Source code for cfxdb.mrealm.router_workergroup_cluster_placement

##############################################################################
#
#                        Crossbar.io Database
#     Copyright (c) typedef int GmbH. Licensed under MIT.
#
##############################################################################

import pprint
import uuid
from typing import Optional

import numpy as np

from cfxdb.mrealm.types import STATUS_BY_CODE, STATUS_BY_NAME


[docs] class RouterWorkerGroupClusterPlacement(object): """ Placement of router worker groups onto router clusters, specifically **router workers** and **xbrmm workers** running as part of router worker groups. """ def __init__( self, oid: Optional[uuid.UUID] = None, worker_group_oid: Optional[uuid.UUID] = None, cluster_oid: Optional[uuid.UUID] = None, node_oid: Optional[uuid.UUID] = None, worker_name: Optional[str] = None, status: Optional[int] = None, changed: Optional[np.datetime64] = None, tcp_listening_port: Optional[int] = None, _unknown: Optional[dict] = None, ): """ :param oid: Object ID of this placement itself. :param worker_group_oid: Object ID of the router worker group this placement applies to. Refers to :class:`cfxdb.mrealm.RouterWorkerGroup` :param cluster_oid: Object ID of the router cluster this placement applies to. Refers to :class:`cfxdb.mrealm.RouterCluster` :param node_oid: Object ID of the node (within the router cluster) this placement is assigned to. Refers to :class:`cfxdb.mrealm.Node` :param worker_name: Run-time ID (in the node) of the router worker this placement is assigned to. :param status: Status of this placement, which essentially reflects the router worker status of this placement. :param changed: Timestamp when the status of this placement last changed. :param tcp_listening_port: TCP listening port the router worker this placement is assigned to is listening on for incoming proxy front-end and router-to-router connections. """
[docs] self.oid = oid
[docs] self.worker_group_oid = worker_group_oid
[docs] self.cluster_oid = cluster_oid
[docs] self.node_oid = node_oid
[docs] self.worker_name = worker_name
[docs] self.status = status
[docs] self.changed = changed
[docs] self.tcp_listening_port = tcp_listening_port
[docs] self._unknown = _unknown
[docs] def __eq__(self, other): if not isinstance(other, self.__class__): return False if other.oid != self.oid: return False if other.worker_group_oid != self.worker_group_oid: return False if other.cluster_oid != self.cluster_oid: return False if other.node_oid != self.node_oid: return False if other.worker_name != self.worker_name: return False if other.status != self.status: return False if other.changed != self.changed: return False if other.tcp_listening_port != self.tcp_listening_port: return False return True
[docs] def __ne__(self, other): return not self.__eq__(other)
[docs] def __str__(self): return pprint.pformat(self.marshal())
[docs] def marshal(self): """ Marshal this object to a generic host language object. :return: dict """ obj = { "oid": str(self.oid) if self.oid else None, "worker_group_oid": str(self.worker_group_oid), "cluster_oid": str(self.cluster_oid), "node_oid": str(self.node_oid), "worker_name": self.worker_name, "status": STATUS_BY_CODE[self.status] if self.status else None, "changed": int(self.changed) if self.changed else None, "tcp_listening_port": self.tcp_listening_port, } return obj
@staticmethod
[docs] def parse(data): """ Parse generic host language object into an object of this class. :param data: Generic host language object :type data: dict :return: instance of :class:`WebService` """ assert type(data) == dict # future attributes (yet unknown) are not only ignored, but passed through! _unknown = {} for k in data: if k not in [ "oid", "worker_group_oid", "cluster_oid", "node_oid", "worker_name", "status", "changed", "tcp_listening_port", ]: _unknown[k] = data[k] oid = None if "oid" in data: assert type(data["oid"]) == str oid = uuid.UUID(data["oid"]) worker_group_oid = None if "worker_group_oid" in data: assert type(data["worker_group_oid"]) == str worker_group_oid = uuid.UUID(data["worker_group_oid"]) cluster_oid = None if "cluster_oid" in data: assert type(data["cluster_oid"]) == str cluster_oid = uuid.UUID(data["cluster_oid"]) node_oid = None if "node_oid" in data: assert type(data["node_oid"]) == str node_oid = uuid.UUID(data["node_oid"]) worker_name = None if "worker_name" in data: assert type(data["worker_name"]) == str worker_name = data["worker_name"] status = data.get("status", None) assert status is None or (type(status) == str) status = STATUS_BY_NAME.get(status, None) changed = data.get("changed", None) assert changed is None or (type(changed) == int) if changed: changed = np.datetime64(changed, "ns") tcp_listening_port = data.get("tcp_listening_port", None) assert tcp_listening_port is None or (type(tcp_listening_port) == int and 0 <= tcp_listening_port < 65536) obj = RouterWorkerGroupClusterPlacement( oid=oid, worker_group_oid=worker_group_oid, cluster_oid=cluster_oid, worker_name=worker_name, node_oid=node_oid, status=status, changed=changed, tcp_listening_port=tcp_listening_port, _unknown=_unknown, ) return obj