""" workers service Provides an API for worker machines, allowing workers to report status and get tasks for execution """ from ...._vendor import six import types from datetime import datetime import enum from ...._vendor.dateutil.parser import parse as parse_datetime from ....backend_api.session import Request, BatchRequest, Response, DataModel, NonStrictDataModel, CompoundRequest, schema_property, StringEnum class MetricsCategory(NonStrictDataModel): """ :param name: Name of the metrics category. :type name: str :param metric_keys: The names of the metrics in the category. :type metric_keys: Sequence[str] """ _schema = { 'properties': { 'metric_keys': { 'description': 'The names of the metrics in the category.', 'items': {'type': 'string'}, 'type': ['array', 'null'], }, 'name': { 'description': 'Name of the metrics category.', 'type': ['string', 'null'], }, }, 'type': 'object', } def __init__( self, name=None, metric_keys=None, **kwargs): super(MetricsCategory, self).__init__(**kwargs) self.name = name self.metric_keys = metric_keys @schema_property('name') def name(self): return self._property_name @name.setter def name(self, value): if value is None: self._property_name = None return self.assert_isinstance(value, "name", six.string_types) self._property_name = value @schema_property('metric_keys') def metric_keys(self): return self._property_metric_keys @metric_keys.setter def metric_keys(self, value): if value is None: self._property_metric_keys = None return self.assert_isinstance(value, "metric_keys", (list, tuple)) self.assert_isinstance(value, "metric_keys", six.string_types, is_array=True) self._property_metric_keys = value class AggregationType(StringEnum): avg = "avg" min = "min" max = "max" class StatItem(NonStrictDataModel): """ :param key: Name of a metric :type key: str :param category: :type category: AggregationType """ _schema = { 'properties': { 'category': { 'oneOf': [ {'$ref': '#/definitions/aggregation_type'}, {'type': 'null'}, ], }, 'key': {'description': 'Name of a metric', 'type': ['string', 'null']}, }, 'type': 'object', } def __init__( self, key=None, category=None, **kwargs): super(StatItem, self).__init__(**kwargs) self.key = key self.category = category @schema_property('key') def key(self): return self._property_key @key.setter def key(self, value): if value is None: self._property_key = None return self.assert_isinstance(value, "key", six.string_types) self._property_key = value @schema_property('category') def category(self): return self._property_category @category.setter def category(self, value): if value is None: self._property_category = None return if isinstance(value, six.string_types): try: value = AggregationType(value) except ValueError: pass else: self.assert_isinstance(value, "category", enum.Enum) self._property_category = value class AggregationStats(NonStrictDataModel): """ :param aggregation: :type aggregation: AggregationType :param values: List of values corresponding to the dates in metric statistics :type values: Sequence[float] """ _schema = { 'properties': { 'aggregation': { 'oneOf': [ {'$ref': '#/definitions/aggregation_type'}, {'type': 'null'}, ], }, 'values': { 'description': 'List of values corresponding to the dates in metric statistics', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, }, 'type': 'object', } def __init__( self, aggregation=None, values=None, **kwargs): super(AggregationStats, self).__init__(**kwargs) self.aggregation = aggregation self.values = values @schema_property('aggregation') def aggregation(self): return self._property_aggregation @aggregation.setter def aggregation(self, value): if value is None: self._property_aggregation = None return if isinstance(value, six.string_types): try: value = AggregationType(value) except ValueError: pass else: self.assert_isinstance(value, "aggregation", enum.Enum) self._property_aggregation = value @schema_property('values') def values(self): return self._property_values @values.setter def values(self, value): if value is None: self._property_values = None return self.assert_isinstance(value, "values", (list, tuple)) self.assert_isinstance(value, "values", six.integer_types + (float,), is_array=True) self._property_values = value class MetricStats(NonStrictDataModel): """ :param metric: Name of the metric (cpu_usage, memory_used etc.) :type metric: str :param variant: Name of the metric component. Set only if 'split_by_variant' was set in the request :type variant: str :param dates: List of timestamps (in seconds from epoch) in the acceding order. The timestamps are separated by the requested interval. Timestamps where no workers activity was recorded are omitted. :type dates: Sequence[int] :param stats: Statistics data by type :type stats: Sequence[AggregationStats] """ _schema = { 'properties': { 'dates': { 'description': 'List of timestamps (in seconds from epoch) in the acceding order. The timestamps are separated by the requested interval. Timestamps where no workers activity was recorded are omitted.', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, 'metric': { 'description': 'Name of the metric (cpu_usage, memory_used etc.)', 'type': ['string', 'null'], }, 'stats': { 'description': 'Statistics data by type', 'items': {'$ref': '#/definitions/aggregation_stats'}, 'type': ['array', 'null'], }, 'variant': { 'description': "Name of the metric component. Set only if 'split_by_variant' was set in the request", 'type': ['string', 'null'], }, }, 'type': 'object', } def __init__( self, metric=None, variant=None, dates=None, stats=None, **kwargs): super(MetricStats, self).__init__(**kwargs) self.metric = metric self.variant = variant self.dates = dates self.stats = stats @schema_property('metric') def metric(self): return self._property_metric @metric.setter def metric(self, value): if value is None: self._property_metric = None return self.assert_isinstance(value, "metric", six.string_types) self._property_metric = value @schema_property('variant') def variant(self): return self._property_variant @variant.setter def variant(self, value): if value is None: self._property_variant = None return self.assert_isinstance(value, "variant", six.string_types) self._property_variant = value @schema_property('dates') def dates(self): return self._property_dates @dates.setter def dates(self, value): if value is None: self._property_dates = None return self.assert_isinstance(value, "dates", (list, tuple)) value = [int(v) if isinstance(v, float) and v.is_integer() else v for v in value] self.assert_isinstance(value, "dates", six.integer_types, is_array=True) self._property_dates = value @schema_property('stats') def stats(self): return self._property_stats @stats.setter def stats(self, value): if value is None: self._property_stats = None return self.assert_isinstance(value, "stats", (list, tuple)) if any(isinstance(v, dict) for v in value): value = [AggregationStats.from_dict(v) if isinstance(v, dict) else v for v in value] else: self.assert_isinstance(value, "stats", AggregationStats, is_array=True) self._property_stats = value class WorkerStats(NonStrictDataModel): """ :param worker: ID of the worker :type worker: str :param metrics: List of the metrics statistics for the worker :type metrics: Sequence[MetricStats] """ _schema = { 'properties': { 'metrics': { 'description': 'List of the metrics statistics for the worker', 'items': {'$ref': '#/definitions/metric_stats'}, 'type': ['array', 'null'], }, 'worker': { 'description': 'ID of the worker', 'type': ['string', 'null'], }, }, 'type': 'object', } def __init__( self, worker=None, metrics=None, **kwargs): super(WorkerStats, self).__init__(**kwargs) self.worker = worker self.metrics = metrics @schema_property('worker') def worker(self): return self._property_worker @worker.setter def worker(self, value): if value is None: self._property_worker = None return self.assert_isinstance(value, "worker", six.string_types) self._property_worker = value @schema_property('metrics') def metrics(self): return self._property_metrics @metrics.setter def metrics(self, value): if value is None: self._property_metrics = None return self.assert_isinstance(value, "metrics", (list, tuple)) if any(isinstance(v, dict) for v in value): value = [MetricStats.from_dict(v) if isinstance(v, dict) else v for v in value] else: self.assert_isinstance(value, "metrics", MetricStats, is_array=True) self._property_metrics = value class ActivitySeries(NonStrictDataModel): """ :param dates: List of timestamps (in seconds from epoch) in the acceding order. The timestamps are separated by the requested interval. :type dates: Sequence[int] :param counts: List of worker counts corresponding to the timestamps in the dates list. None values are returned for the dates with no workers. :type counts: Sequence[int] """ _schema = { 'properties': { 'counts': { 'description': 'List of worker counts corresponding to the timestamps in the dates list. None values are returned for the dates with no workers.', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, 'dates': { 'description': 'List of timestamps (in seconds from epoch) in the acceding order. The timestamps are separated by the requested interval.', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, }, 'type': 'object', } def __init__( self, dates=None, counts=None, **kwargs): super(ActivitySeries, self).__init__(**kwargs) self.dates = dates self.counts = counts @schema_property('dates') def dates(self): return self._property_dates @dates.setter def dates(self, value): if value is None: self._property_dates = None return self.assert_isinstance(value, "dates", (list, tuple)) value = [int(v) if isinstance(v, float) and v.is_integer() else v for v in value] self.assert_isinstance(value, "dates", six.integer_types, is_array=True) self._property_dates = value @schema_property('counts') def counts(self): return self._property_counts @counts.setter def counts(self, value): if value is None: self._property_counts = None return self.assert_isinstance(value, "counts", (list, tuple)) value = [int(v) if isinstance(v, float) and v.is_integer() else v for v in value] self.assert_isinstance(value, "counts", six.integer_types, is_array=True) self._property_counts = value class Worker(NonStrictDataModel): """ :param id: Worker ID :type id: str :param user: Associated user (under whose credentials are used by the worker daemon) :type user: IdNameEntry :param company: Associated company :type company: IdNameEntry :param ip: IP of the worker :type ip: str :param register_time: Registration time :type register_time: datetime.datetime :param last_activity_time: Last activity time (even if an error occurred) :type last_activity_time: datetime.datetime :param last_report_time: Last successful report time :type last_report_time: datetime.datetime :param task: Task currently being run by the worker :type task: CurrentTaskEntry :param queue: Queue from which running task was taken :type queue: QueueEntry :param queues: List of queues on which the worker is listening :type queues: Sequence[QueueEntry] """ _schema = { 'properties': { 'company': { 'description': 'Associated company', 'oneOf': [ {'$ref': '#/definitions/id_name_entry'}, {'type': 'null'}, ], }, 'id': {'description': 'Worker ID', 'type': ['string', 'null']}, 'ip': {'description': 'IP of the worker', 'type': ['string', 'null']}, 'last_activity_time': { 'description': 'Last activity time (even if an error occurred)', 'format': 'date-time', 'type': ['string', 'null'], }, 'last_report_time': { 'description': 'Last successful report time', 'format': 'date-time', 'type': ['string', 'null'], }, 'queue': { 'description': 'Queue from which running task was taken', 'oneOf': [{'$ref': '#/definitions/queue_entry'}, {'type': 'null'}], }, 'queues': { 'description': 'List of queues on which the worker is listening', 'items': {'$ref': '#/definitions/queue_entry'}, 'type': ['array', 'null'], }, 'register_time': { 'description': 'Registration time', 'format': 'date-time', 'type': ['string', 'null'], }, 'task': { 'description': 'Task currently being run by the worker', 'oneOf': [ {'$ref': '#/definitions/current_task_entry'}, {'type': 'null'}, ], }, 'user': { 'description': 'Associated user (under whose credentials are used by the worker daemon)', 'oneOf': [ {'$ref': '#/definitions/id_name_entry'}, {'type': 'null'}, ], }, }, 'type': 'object', } def __init__( self, id=None, user=None, company=None, ip=None, register_time=None, last_activity_time=None, last_report_time=None, task=None, queue=None, queues=None, **kwargs): super(Worker, self).__init__(**kwargs) self.id = id self.user = user self.company = company self.ip = ip self.register_time = register_time self.last_activity_time = last_activity_time self.last_report_time = last_report_time self.task = task self.queue = queue self.queues = queues @schema_property('id') def id(self): return self._property_id @id.setter def id(self, value): if value is None: self._property_id = None return self.assert_isinstance(value, "id", six.string_types) self._property_id = value @schema_property('user') def user(self): return self._property_user @user.setter def user(self, value): if value is None: self._property_user = None return if isinstance(value, dict): value = IdNameEntry.from_dict(value) else: self.assert_isinstance(value, "user", IdNameEntry) self._property_user = value @schema_property('company') def company(self): return self._property_company @company.setter def company(self, value): if value is None: self._property_company = None return if isinstance(value, dict): value = IdNameEntry.from_dict(value) else: self.assert_isinstance(value, "company", IdNameEntry) self._property_company = value @schema_property('ip') def ip(self): return self._property_ip @ip.setter def ip(self, value): if value is None: self._property_ip = None return self.assert_isinstance(value, "ip", six.string_types) self._property_ip = value @schema_property('register_time') def register_time(self): return self._property_register_time @register_time.setter def register_time(self, value): if value is None: self._property_register_time = None return self.assert_isinstance(value, "register_time", six.string_types + (datetime,)) if not isinstance(value, datetime): value = parse_datetime(value) self._property_register_time = value @schema_property('last_activity_time') def last_activity_time(self): return self._property_last_activity_time @last_activity_time.setter def last_activity_time(self, value): if value is None: self._property_last_activity_time = None return self.assert_isinstance(value, "last_activity_time", six.string_types + (datetime,)) if not isinstance(value, datetime): value = parse_datetime(value) self._property_last_activity_time = value @schema_property('last_report_time') def last_report_time(self): return self._property_last_report_time @last_report_time.setter def last_report_time(self, value): if value is None: self._property_last_report_time = None return self.assert_isinstance(value, "last_report_time", six.string_types + (datetime,)) if not isinstance(value, datetime): value = parse_datetime(value) self._property_last_report_time = value @schema_property('task') def task(self): return self._property_task @task.setter def task(self, value): if value is None: self._property_task = None return if isinstance(value, dict): value = CurrentTaskEntry.from_dict(value) else: self.assert_isinstance(value, "task", CurrentTaskEntry) self._property_task = value @schema_property('queue') def queue(self): return self._property_queue @queue.setter def queue(self, value): if value is None: self._property_queue = None return if isinstance(value, dict): value = QueueEntry.from_dict(value) else: self.assert_isinstance(value, "queue", QueueEntry) self._property_queue = value @schema_property('queues') def queues(self): return self._property_queues @queues.setter def queues(self, value): if value is None: self._property_queues = None return self.assert_isinstance(value, "queues", (list, tuple)) if any(isinstance(v, dict) for v in value): value = [QueueEntry.from_dict(v) if isinstance(v, dict) else v for v in value] else: self.assert_isinstance(value, "queues", QueueEntry, is_array=True) self._property_queues = value class IdNameEntry(NonStrictDataModel): """ :param id: Worker ID :type id: str :param name: Worker name :type name: str """ _schema = { 'properties': { 'id': {'description': 'Worker ID', 'type': ['string', 'null']}, 'name': {'description': 'Worker name', 'type': ['string', 'null']}, }, 'type': 'object', } def __init__( self, id=None, name=None, **kwargs): super(IdNameEntry, self).__init__(**kwargs) self.id = id self.name = name @schema_property('id') def id(self): return self._property_id @id.setter def id(self, value): if value is None: self._property_id = None return self.assert_isinstance(value, "id", six.string_types) self._property_id = value @schema_property('name') def name(self): return self._property_name @name.setter def name(self, value): if value is None: self._property_name = None return self.assert_isinstance(value, "name", six.string_types) self._property_name = value class CurrentTaskEntry(NonStrictDataModel): """ :param id: Worker ID :type id: str :param name: Worker name :type name: str :param running_time: Task running time :type running_time: int :param last_iteration: Last task iteration :type last_iteration: int """ _schema = { 'properties': { 'id': {'description': 'Worker ID', 'type': ['string', 'null']}, 'last_iteration': { 'description': 'Last task iteration', 'type': ['integer', 'null'], }, 'name': {'description': 'Worker name', 'type': ['string', 'null']}, 'running_time': { 'description': 'Task running time', 'type': ['integer', 'null'], }, }, 'type': 'object', } def __init__( self, id=None, name=None, running_time=None, last_iteration=None, **kwargs): super(CurrentTaskEntry, self).__init__(**kwargs) self.id = id self.name = name self.running_time = running_time self.last_iteration = last_iteration @schema_property('id') def id(self): return self._property_id @id.setter def id(self, value): if value is None: self._property_id = None return self.assert_isinstance(value, "id", six.string_types) self._property_id = value @schema_property('name') def name(self): return self._property_name @name.setter def name(self, value): if value is None: self._property_name = None return self.assert_isinstance(value, "name", six.string_types) self._property_name = value @schema_property('running_time') def running_time(self): return self._property_running_time @running_time.setter def running_time(self, value): if value is None: self._property_running_time = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "running_time", six.integer_types) self._property_running_time = value @schema_property('last_iteration') def last_iteration(self): return self._property_last_iteration @last_iteration.setter def last_iteration(self, value): if value is None: self._property_last_iteration = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "last_iteration", six.integer_types) self._property_last_iteration = value class QueueEntry(NonStrictDataModel): """ :param id: Worker ID :type id: str :param name: Worker name :type name: str :param next_task: Next task in the queue :type next_task: IdNameEntry :param num_tasks: Number of task entries in the queue :type num_tasks: int """ _schema = { 'properties': { 'id': {'description': 'Worker ID', 'type': ['string', 'null']}, 'name': {'description': 'Worker name', 'type': ['string', 'null']}, 'next_task': { 'description': 'Next task in the queue', 'oneOf': [ {'$ref': '#/definitions/id_name_entry'}, {'type': 'null'}, ], }, 'num_tasks': { 'description': 'Number of task entries in the queue', 'type': ['integer', 'null'], }, }, 'type': 'object', } def __init__( self, id=None, name=None, next_task=None, num_tasks=None, **kwargs): super(QueueEntry, self).__init__(**kwargs) self.id = id self.name = name self.next_task = next_task self.num_tasks = num_tasks @schema_property('id') def id(self): return self._property_id @id.setter def id(self, value): if value is None: self._property_id = None return self.assert_isinstance(value, "id", six.string_types) self._property_id = value @schema_property('name') def name(self): return self._property_name @name.setter def name(self, value): if value is None: self._property_name = None return self.assert_isinstance(value, "name", six.string_types) self._property_name = value @schema_property('next_task') def next_task(self): return self._property_next_task @next_task.setter def next_task(self, value): if value is None: self._property_next_task = None return if isinstance(value, dict): value = IdNameEntry.from_dict(value) else: self.assert_isinstance(value, "next_task", IdNameEntry) self._property_next_task = value @schema_property('num_tasks') def num_tasks(self): return self._property_num_tasks @num_tasks.setter def num_tasks(self, value): if value is None: self._property_num_tasks = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "num_tasks", six.integer_types) self._property_num_tasks = value class MachineStats(NonStrictDataModel): """ :param cpu_usage: Average CPU usage per core :type cpu_usage: Sequence[float] :param gpu_usage: Average GPU usage per GPU card :type gpu_usage: Sequence[float] :param memory_used: Used memory MBs :type memory_used: int :param memory_free: Free memory MBs :type memory_free: int :param gpu_memory_free: GPU free memory MBs :type gpu_memory_free: Sequence[int] :param gpu_memory_used: GPU used memory MBs :type gpu_memory_used: Sequence[int] :param network_tx: Mbytes per second :type network_tx: int :param network_rx: Mbytes per second :type network_rx: int :param disk_free_home: Mbytes free space of /home drive :type disk_free_home: int :param disk_free_temp: Mbytes free space of /tmp drive :type disk_free_temp: int :param disk_read: Mbytes read per second :type disk_read: int :param disk_write: Mbytes write per second :type disk_write: int :param cpu_temperature: CPU temperature :type cpu_temperature: Sequence[float] :param gpu_temperature: GPU temperature :type gpu_temperature: Sequence[float] """ _schema = { 'properties': { 'cpu_temperature': { 'description': 'CPU temperature', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, 'cpu_usage': { 'description': 'Average CPU usage per core', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, 'disk_free_home': { 'description': 'Mbytes free space of /home drive', 'type': ['integer', 'null'], }, 'disk_free_temp': { 'description': 'Mbytes free space of /tmp drive', 'type': ['integer', 'null'], }, 'disk_read': { 'description': 'Mbytes read per second', 'type': ['integer', 'null'], }, 'disk_write': { 'description': 'Mbytes write per second', 'type': ['integer', 'null'], }, 'gpu_memory_free': { 'description': 'GPU free memory MBs', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, 'gpu_memory_used': { 'description': 'GPU used memory MBs', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, 'gpu_temperature': { 'description': 'GPU temperature', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, 'gpu_usage': { 'description': 'Average GPU usage per GPU card', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, 'memory_free': { 'description': 'Free memory MBs', 'type': ['integer', 'null'], }, 'memory_used': { 'description': 'Used memory MBs', 'type': ['integer', 'null'], }, 'network_rx': { 'description': 'Mbytes per second', 'type': ['integer', 'null'], }, 'network_tx': { 'description': 'Mbytes per second', 'type': ['integer', 'null'], }, }, 'type': 'object', } def __init__( self, cpu_usage=None, gpu_usage=None, memory_used=None, memory_free=None, gpu_memory_free=None, gpu_memory_used=None, network_tx=None, network_rx=None, disk_free_home=None, disk_free_temp=None, disk_read=None, disk_write=None, cpu_temperature=None, gpu_temperature=None, **kwargs): super(MachineStats, self).__init__(**kwargs) self.cpu_usage = cpu_usage self.gpu_usage = gpu_usage self.memory_used = memory_used self.memory_free = memory_free self.gpu_memory_free = gpu_memory_free self.gpu_memory_used = gpu_memory_used self.network_tx = network_tx self.network_rx = network_rx self.disk_free_home = disk_free_home self.disk_free_temp = disk_free_temp self.disk_read = disk_read self.disk_write = disk_write self.cpu_temperature = cpu_temperature self.gpu_temperature = gpu_temperature @schema_property('cpu_usage') def cpu_usage(self): return self._property_cpu_usage @cpu_usage.setter def cpu_usage(self, value): if value is None: self._property_cpu_usage = None return self.assert_isinstance(value, "cpu_usage", (list, tuple)) self.assert_isinstance(value, "cpu_usage", six.integer_types + (float,), is_array=True) self._property_cpu_usage = value @schema_property('gpu_usage') def gpu_usage(self): return self._property_gpu_usage @gpu_usage.setter def gpu_usage(self, value): if value is None: self._property_gpu_usage = None return self.assert_isinstance(value, "gpu_usage", (list, tuple)) self.assert_isinstance(value, "gpu_usage", six.integer_types + (float,), is_array=True) self._property_gpu_usage = value @schema_property('memory_used') def memory_used(self): return self._property_memory_used @memory_used.setter def memory_used(self, value): if value is None: self._property_memory_used = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "memory_used", six.integer_types) self._property_memory_used = value @schema_property('memory_free') def memory_free(self): return self._property_memory_free @memory_free.setter def memory_free(self, value): if value is None: self._property_memory_free = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "memory_free", six.integer_types) self._property_memory_free = value @schema_property('gpu_memory_free') def gpu_memory_free(self): return self._property_gpu_memory_free @gpu_memory_free.setter def gpu_memory_free(self, value): if value is None: self._property_gpu_memory_free = None return self.assert_isinstance(value, "gpu_memory_free", (list, tuple)) value = [int(v) if isinstance(v, float) and v.is_integer() else v for v in value] self.assert_isinstance(value, "gpu_memory_free", six.integer_types, is_array=True) self._property_gpu_memory_free = value @schema_property('gpu_memory_used') def gpu_memory_used(self): return self._property_gpu_memory_used @gpu_memory_used.setter def gpu_memory_used(self, value): if value is None: self._property_gpu_memory_used = None return self.assert_isinstance(value, "gpu_memory_used", (list, tuple)) value = [int(v) if isinstance(v, float) and v.is_integer() else v for v in value] self.assert_isinstance(value, "gpu_memory_used", six.integer_types, is_array=True) self._property_gpu_memory_used = value @schema_property('network_tx') def network_tx(self): return self._property_network_tx @network_tx.setter def network_tx(self, value): if value is None: self._property_network_tx = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "network_tx", six.integer_types) self._property_network_tx = value @schema_property('network_rx') def network_rx(self): return self._property_network_rx @network_rx.setter def network_rx(self, value): if value is None: self._property_network_rx = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "network_rx", six.integer_types) self._property_network_rx = value @schema_property('disk_free_home') def disk_free_home(self): return self._property_disk_free_home @disk_free_home.setter def disk_free_home(self, value): if value is None: self._property_disk_free_home = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "disk_free_home", six.integer_types) self._property_disk_free_home = value @schema_property('disk_free_temp') def disk_free_temp(self): return self._property_disk_free_temp @disk_free_temp.setter def disk_free_temp(self, value): if value is None: self._property_disk_free_temp = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "disk_free_temp", six.integer_types) self._property_disk_free_temp = value @schema_property('disk_read') def disk_read(self): return self._property_disk_read @disk_read.setter def disk_read(self, value): if value is None: self._property_disk_read = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "disk_read", six.integer_types) self._property_disk_read = value @schema_property('disk_write') def disk_write(self): return self._property_disk_write @disk_write.setter def disk_write(self, value): if value is None: self._property_disk_write = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "disk_write", six.integer_types) self._property_disk_write = value @schema_property('cpu_temperature') def cpu_temperature(self): return self._property_cpu_temperature @cpu_temperature.setter def cpu_temperature(self, value): if value is None: self._property_cpu_temperature = None return self.assert_isinstance(value, "cpu_temperature", (list, tuple)) self.assert_isinstance(value, "cpu_temperature", six.integer_types + (float,), is_array=True) self._property_cpu_temperature = value @schema_property('gpu_temperature') def gpu_temperature(self): return self._property_gpu_temperature @gpu_temperature.setter def gpu_temperature(self, value): if value is None: self._property_gpu_temperature = None return self.assert_isinstance(value, "gpu_temperature", (list, tuple)) self.assert_isinstance(value, "gpu_temperature", six.integer_types + (float,), is_array=True) self._property_gpu_temperature = value class GetActivityReportRequest(Request): """ Returns count of active company workers in the selected time range. :param from_date: Starting time (in seconds from epoch) for collecting statistics :type from_date: float :param to_date: Ending time (in seconds from epoch) for collecting statistics :type to_date: float :param interval: Time interval in seconds for a single statistics point. The minimal value is 1 :type interval: int """ _service = "workers" _action = "get_activity_report" _version = "2.5" _schema = { 'definitions': {}, 'properties': { 'from_date': { 'description': 'Starting time (in seconds from epoch) for collecting statistics', 'type': 'number', }, 'interval': { 'description': 'Time interval in seconds for a single statistics point. The minimal value is 1', 'type': 'integer', }, 'to_date': { 'description': 'Ending time (in seconds from epoch) for collecting statistics', 'type': 'number', }, }, 'required': ['from_date', 'to_date', 'interval'], 'type': 'object', } def __init__( self, from_date, to_date, interval, **kwargs): super(GetActivityReportRequest, self).__init__(**kwargs) self.from_date = from_date self.to_date = to_date self.interval = interval @schema_property('from_date') def from_date(self): return self._property_from_date @from_date.setter def from_date(self, value): if value is None: self._property_from_date = None return self.assert_isinstance(value, "from_date", six.integer_types + (float,)) self._property_from_date = value @schema_property('to_date') def to_date(self): return self._property_to_date @to_date.setter def to_date(self, value): if value is None: self._property_to_date = None return self.assert_isinstance(value, "to_date", six.integer_types + (float,)) self._property_to_date = value @schema_property('interval') def interval(self): return self._property_interval @interval.setter def interval(self, value): if value is None: self._property_interval = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "interval", six.integer_types) self._property_interval = value class GetActivityReportResponse(Response): """ Response of workers.get_activity_report endpoint. :param total: Activity series that include all the workers that sent reports in the given time interval. :type total: ActivitySeries :param active: Activity series that include only workers that worked on a task in the given time interval. :type active: ActivitySeries """ _service = "workers" _action = "get_activity_report" _version = "2.5" _schema = { 'definitions': { 'activity_series': { 'properties': { 'counts': { 'description': 'List of worker counts corresponding to the timestamps in the dates list. None values are returned for the dates with no workers.', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, 'dates': { 'description': 'List of timestamps (in seconds from epoch) in the acceding order. The timestamps are separated by the requested interval.', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, }, 'type': 'object', }, }, 'properties': { 'active': { 'description': 'Activity series that include only workers that worked on a task in the given time interval.', 'oneOf': [ {'$ref': '#/definitions/activity_series'}, {'type': 'null'}, ], }, 'total': { 'description': 'Activity series that include all the workers that sent reports in the given time interval.', 'oneOf': [ {'$ref': '#/definitions/activity_series'}, {'type': 'null'}, ], }, }, 'type': 'object', } def __init__( self, total=None, active=None, **kwargs): super(GetActivityReportResponse, self).__init__(**kwargs) self.total = total self.active = active @schema_property('total') def total(self): return self._property_total @total.setter def total(self, value): if value is None: self._property_total = None return if isinstance(value, dict): value = ActivitySeries.from_dict(value) else: self.assert_isinstance(value, "total", ActivitySeries) self._property_total = value @schema_property('active') def active(self): return self._property_active @active.setter def active(self, value): if value is None: self._property_active = None return if isinstance(value, dict): value = ActivitySeries.from_dict(value) else: self.assert_isinstance(value, "active", ActivitySeries) self._property_active = value class GetAllRequest(Request): """ Returns information on all registered workers. :param last_seen: Filter out workers not active for more than last_seen seconds. A value or 0 or 'none' will disable the filter. :type last_seen: int """ _service = "workers" _action = "get_all" _version = "2.5" _schema = { 'definitions': {}, 'properties': { 'last_seen': { 'default': 3600, 'description': "Filter out workers not active for more than last_seen seconds.\n A value or 0 or 'none' will disable the filter.", 'type': ['integer', 'null'], }, }, 'type': 'object', } def __init__( self, last_seen=3600, **kwargs): super(GetAllRequest, self).__init__(**kwargs) self.last_seen = last_seen @schema_property('last_seen') def last_seen(self): return self._property_last_seen @last_seen.setter def last_seen(self, value): if value is None: self._property_last_seen = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "last_seen", six.integer_types) self._property_last_seen = value class GetAllResponse(Response): """ Response of workers.get_all endpoint. :param workers: :type workers: Sequence[Worker] """ _service = "workers" _action = "get_all" _version = "2.5" _schema = { 'definitions': { 'current_task_entry': { 'properties': { 'id': {'description': 'Worker ID', 'type': ['string', 'null']}, 'last_iteration': { 'description': 'Last task iteration', 'type': ['integer', 'null'], }, 'name': { 'description': 'Worker name', 'type': ['string', 'null'], }, 'running_time': { 'description': 'Task running time', 'type': ['integer', 'null'], }, }, 'type': 'object', }, 'id_name_entry': { 'properties': { 'id': {'description': 'Worker ID', 'type': ['string', 'null']}, 'name': { 'description': 'Worker name', 'type': ['string', 'null'], }, }, 'type': 'object', }, 'queue_entry': { 'properties': { 'id': {'description': 'Worker ID', 'type': ['string', 'null']}, 'name': { 'description': 'Worker name', 'type': ['string', 'null'], }, 'next_task': { 'description': 'Next task in the queue', 'oneOf': [ {'$ref': '#/definitions/id_name_entry'}, {'type': 'null'}, ], }, 'num_tasks': { 'description': 'Number of task entries in the queue', 'type': ['integer', 'null'], }, }, 'type': 'object', }, 'worker': { 'properties': { 'company': { 'description': 'Associated company', 'oneOf': [ {'$ref': '#/definitions/id_name_entry'}, {'type': 'null'}, ], }, 'id': {'description': 'Worker ID', 'type': ['string', 'null']}, 'ip': { 'description': 'IP of the worker', 'type': ['string', 'null'], }, 'last_activity_time': { 'description': 'Last activity time (even if an error occurred)', 'format': 'date-time', 'type': ['string', 'null'], }, 'last_report_time': { 'description': 'Last successful report time', 'format': 'date-time', 'type': ['string', 'null'], }, 'queue': { 'description': 'Queue from which running task was taken', 'oneOf': [ {'$ref': '#/definitions/queue_entry'}, {'type': 'null'}, ], }, 'queues': { 'description': 'List of queues on which the worker is listening', 'items': {'$ref': '#/definitions/queue_entry'}, 'type': ['array', 'null'], }, 'register_time': { 'description': 'Registration time', 'format': 'date-time', 'type': ['string', 'null'], }, 'task': { 'description': 'Task currently being run by the worker', 'oneOf': [ {'$ref': '#/definitions/current_task_entry'}, {'type': 'null'}, ], }, 'user': { 'description': 'Associated user (under whose credentials are used by the worker daemon)', 'oneOf': [ {'$ref': '#/definitions/id_name_entry'}, {'type': 'null'}, ], }, }, 'type': 'object', }, }, 'properties': { 'workers': { 'items': {'$ref': '#/definitions/worker'}, 'type': ['array', 'null'], }, }, 'type': 'object', } def __init__( self, workers=None, **kwargs): super(GetAllResponse, self).__init__(**kwargs) self.workers = workers @schema_property('workers') def workers(self): return self._property_workers @workers.setter def workers(self, value): if value is None: self._property_workers = None return self.assert_isinstance(value, "workers", (list, tuple)) if any(isinstance(v, dict) for v in value): value = [Worker.from_dict(v) if isinstance(v, dict) else v for v in value] else: self.assert_isinstance(value, "workers", Worker, is_array=True) self._property_workers = value class GetMetricKeysRequest(Request): """ Returns worker statistics metric keys grouped by categories. :param worker_ids: List of worker ids to collect metrics for. If not provided or empty then all the company workers metrics are analyzed. :type worker_ids: Sequence[str] """ _service = "workers" _action = "get_metric_keys" _version = "2.5" _schema = { 'definitions': {}, 'properties': { 'worker_ids': { 'description': 'List of worker ids to collect metrics for. If not provided or empty then all the company workers metrics are analyzed.', 'items': {'type': 'string'}, 'type': ['array', 'null'], }, }, 'type': 'object', } def __init__( self, worker_ids=None, **kwargs): super(GetMetricKeysRequest, self).__init__(**kwargs) self.worker_ids = worker_ids @schema_property('worker_ids') def worker_ids(self): return self._property_worker_ids @worker_ids.setter def worker_ids(self, value): if value is None: self._property_worker_ids = None return self.assert_isinstance(value, "worker_ids", (list, tuple)) self.assert_isinstance(value, "worker_ids", six.string_types, is_array=True) self._property_worker_ids = value class GetMetricKeysResponse(Response): """ Response of workers.get_metric_keys endpoint. :param categories: List of unique metric categories found in the statistics of the requested workers. :type categories: Sequence[MetricsCategory] """ _service = "workers" _action = "get_metric_keys" _version = "2.5" _schema = { 'definitions': { 'metrics_category': { 'properties': { 'metric_keys': { 'description': 'The names of the metrics in the category.', 'items': {'type': 'string'}, 'type': ['array', 'null'], }, 'name': { 'description': 'Name of the metrics category.', 'type': ['string', 'null'], }, }, 'type': 'object', }, }, 'properties': { 'categories': { 'description': 'List of unique metric categories found in the statistics of the requested workers.', 'items': {'$ref': '#/definitions/metrics_category'}, 'type': ['array', 'null'], }, }, 'type': 'object', } def __init__( self, categories=None, **kwargs): super(GetMetricKeysResponse, self).__init__(**kwargs) self.categories = categories @schema_property('categories') def categories(self): return self._property_categories @categories.setter def categories(self, value): if value is None: self._property_categories = None return self.assert_isinstance(value, "categories", (list, tuple)) if any(isinstance(v, dict) for v in value): value = [MetricsCategory.from_dict(v) if isinstance(v, dict) else v for v in value] else: self.assert_isinstance(value, "categories", MetricsCategory, is_array=True) self._property_categories = value class GetStatsRequest(Request): """ Returns statistics for the selected workers and time range aggregated by date intervals. :param worker_ids: List of worker ids to collect metrics for. If not provided or empty then all the company workers metrics are analyzed. :type worker_ids: Sequence[str] :param from_date: Starting time (in seconds from epoch) for collecting statistics :type from_date: float :param to_date: Ending time (in seconds from epoch) for collecting statistics :type to_date: float :param interval: Time interval in seconds for a single statistics point. The minimal value is 1 :type interval: int :param items: List of metric keys and requested statistics :type items: Sequence[StatItem] :param split_by_variant: If true then break statistics by hardware sub types :type split_by_variant: bool """ _service = "workers" _action = "get_stats" _version = "2.5" _schema = { 'definitions': { 'aggregation_type': { 'description': 'Metric aggregation type', 'enum': ['avg', 'min', 'max'], 'type': 'string', }, 'stat_item': { 'properties': { 'category': { 'oneOf': [ {'$ref': '#/definitions/aggregation_type'}, {'type': 'null'}, ], }, 'key': { 'description': 'Name of a metric', 'type': ['string', 'null'], }, }, 'type': 'object', }, }, 'properties': { 'from_date': { 'description': 'Starting time (in seconds from epoch) for collecting statistics', 'type': 'number', }, 'interval': { 'description': 'Time interval in seconds for a single statistics point. The minimal value is 1', 'type': 'integer', }, 'items': { 'description': 'List of metric keys and requested statistics', 'items': {'$ref': '#/definitions/stat_item'}, 'type': 'array', }, 'split_by_variant': { 'default': False, 'description': 'If true then break statistics by hardware sub types', 'type': 'boolean', }, 'to_date': { 'description': 'Ending time (in seconds from epoch) for collecting statistics', 'type': 'number', }, 'worker_ids': { 'description': 'List of worker ids to collect metrics for. If not provided or empty then all the company workers metrics are analyzed.', 'items': {'type': 'string'}, 'type': ['array', 'null'], }, }, 'required': ['from_date', 'to_date', 'interval', 'items'], 'type': 'object', } def __init__( self, from_date, to_date, interval, items, worker_ids=None, split_by_variant=False, **kwargs): super(GetStatsRequest, self).__init__(**kwargs) self.worker_ids = worker_ids self.from_date = from_date self.to_date = to_date self.interval = interval self.items = items self.split_by_variant = split_by_variant @schema_property('worker_ids') def worker_ids(self): return self._property_worker_ids @worker_ids.setter def worker_ids(self, value): if value is None: self._property_worker_ids = None return self.assert_isinstance(value, "worker_ids", (list, tuple)) self.assert_isinstance(value, "worker_ids", six.string_types, is_array=True) self._property_worker_ids = value @schema_property('from_date') def from_date(self): return self._property_from_date @from_date.setter def from_date(self, value): if value is None: self._property_from_date = None return self.assert_isinstance(value, "from_date", six.integer_types + (float,)) self._property_from_date = value @schema_property('to_date') def to_date(self): return self._property_to_date @to_date.setter def to_date(self, value): if value is None: self._property_to_date = None return self.assert_isinstance(value, "to_date", six.integer_types + (float,)) self._property_to_date = value @schema_property('interval') def interval(self): return self._property_interval @interval.setter def interval(self, value): if value is None: self._property_interval = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "interval", six.integer_types) self._property_interval = value @schema_property('items') def items(self): return self._property_items @items.setter def items(self, value): if value is None: self._property_items = None return self.assert_isinstance(value, "items", (list, tuple)) if any(isinstance(v, dict) for v in value): value = [StatItem.from_dict(v) if isinstance(v, dict) else v for v in value] else: self.assert_isinstance(value, "items", StatItem, is_array=True) self._property_items = value @schema_property('split_by_variant') def split_by_variant(self): return self._property_split_by_variant @split_by_variant.setter def split_by_variant(self, value): if value is None: self._property_split_by_variant = None return self.assert_isinstance(value, "split_by_variant", (bool,)) self._property_split_by_variant = value class GetStatsResponse(Response): """ Response of workers.get_stats endpoint. :param workers: List of the requested workers with their statistics :type workers: Sequence[WorkerStats] """ _service = "workers" _action = "get_stats" _version = "2.5" _schema = { 'definitions': { 'aggregation_stats': { 'properties': { 'aggregation': { 'oneOf': [ {'$ref': '#/definitions/aggregation_type'}, {'type': 'null'}, ], }, 'values': { 'description': 'List of values corresponding to the dates in metric statistics', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, }, 'type': 'object', }, 'aggregation_type': { 'description': 'Metric aggregation type', 'enum': ['avg', 'min', 'max'], 'type': 'string', }, 'metric_stats': { 'properties': { 'dates': { 'description': 'List of timestamps (in seconds from epoch) in the acceding order. The timestamps are separated by the requested interval. Timestamps where no workers activity was recorded are omitted.', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, 'metric': { 'description': 'Name of the metric (cpu_usage, memory_used etc.)', 'type': ['string', 'null'], }, 'stats': { 'description': 'Statistics data by type', 'items': {'$ref': '#/definitions/aggregation_stats'}, 'type': ['array', 'null'], }, 'variant': { 'description': "Name of the metric component. Set only if 'split_by_variant' was set in the request", 'type': ['string', 'null'], }, }, 'type': 'object', }, 'worker_stats': { 'properties': { 'metrics': { 'description': 'List of the metrics statistics for the worker', 'items': {'$ref': '#/definitions/metric_stats'}, 'type': ['array', 'null'], }, 'worker': { 'description': 'ID of the worker', 'type': ['string', 'null'], }, }, 'type': 'object', }, }, 'properties': { 'workers': { 'description': 'List of the requested workers with their statistics', 'items': {'$ref': '#/definitions/worker_stats'}, 'type': ['array', 'null'], }, }, 'type': 'object', } def __init__( self, workers=None, **kwargs): super(GetStatsResponse, self).__init__(**kwargs) self.workers = workers @schema_property('workers') def workers(self): return self._property_workers @workers.setter def workers(self, value): if value is None: self._property_workers = None return self.assert_isinstance(value, "workers", (list, tuple)) if any(isinstance(v, dict) for v in value): value = [WorkerStats.from_dict(v) if isinstance(v, dict) else v for v in value] else: self.assert_isinstance(value, "workers", WorkerStats, is_array=True) self._property_workers = value class RegisterRequest(Request): """ Register a worker in the system. Called by the Worker Daemon. :param worker: Worker id. Must be unique in company. :type worker: str :param timeout: Registration timeout in seconds. If timeout seconds have passed since the worker's last call to register or status_report, the worker is automatically removed from the list of registered workers. :type timeout: int :param queues: List of queue IDs on which the worker is listening. :type queues: Sequence[str] """ _service = "workers" _action = "register" _version = "2.5" _schema = { 'definitions': {}, 'properties': { 'queues': { 'description': 'List of queue IDs on which the worker is listening.', 'items': {'type': 'string'}, 'type': 'array', }, 'timeout': { 'default': 600, 'description': "Registration timeout in seconds. If timeout seconds have passed since the worker's last call to register or status_report, the worker is automatically removed from the list of registered workers.", 'type': 'integer', }, 'worker': { 'description': 'Worker id. Must be unique in company.', 'type': 'string', }, }, 'required': ['worker'], 'type': 'object', } def __init__( self, worker, timeout=600, queues=None, **kwargs): super(RegisterRequest, self).__init__(**kwargs) self.worker = worker self.timeout = timeout self.queues = queues @schema_property('worker') def worker(self): return self._property_worker @worker.setter def worker(self, value): if value is None: self._property_worker = None return self.assert_isinstance(value, "worker", six.string_types) self._property_worker = value @schema_property('timeout') def timeout(self): return self._property_timeout @timeout.setter def timeout(self, value): if value is None: self._property_timeout = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "timeout", six.integer_types) self._property_timeout = value @schema_property('queues') def queues(self): return self._property_queues @queues.setter def queues(self, value): if value is None: self._property_queues = None return self.assert_isinstance(value, "queues", (list, tuple)) self.assert_isinstance(value, "queues", six.string_types, is_array=True) self._property_queues = value class RegisterResponse(Response): """ Response of workers.register endpoint. """ _service = "workers" _action = "register" _version = "2.5" _schema = {'definitions': {}, 'properties': {}, 'type': 'object'} class StatusReportRequest(Request): """ Called periodically by the worker daemon to report machine status :param worker: Worker id. :type worker: str :param task: ID of a task currently being run by the worker. If no task is sent, the worker's task field will be cleared. :type task: str :param queue: ID of the queue from which task was received. If no queue is sent, the worker's queue field will be cleared. :type queue: str :param queues: List of queue IDs on which the worker is listening. If null, the worker's queues list will not be updated. :type queues: Sequence[str] :param timestamp: UNIX time in seconds since epoch. :type timestamp: int :param machine_stats: The machine statistics. :type machine_stats: MachineStats """ _service = "workers" _action = "status_report" _version = "2.5" _schema = { 'definitions': { 'machine_stats': { 'properties': { 'cpu_temperature': { 'description': 'CPU temperature', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, 'cpu_usage': { 'description': 'Average CPU usage per core', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, 'disk_free_home': { 'description': 'Mbytes free space of /home drive', 'type': ['integer', 'null'], }, 'disk_free_temp': { 'description': 'Mbytes free space of /tmp drive', 'type': ['integer', 'null'], }, 'disk_read': { 'description': 'Mbytes read per second', 'type': ['integer', 'null'], }, 'disk_write': { 'description': 'Mbytes write per second', 'type': ['integer', 'null'], }, 'gpu_memory_free': { 'description': 'GPU free memory MBs', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, 'gpu_memory_used': { 'description': 'GPU used memory MBs', 'items': {'type': 'integer'}, 'type': ['array', 'null'], }, 'gpu_temperature': { 'description': 'GPU temperature', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, 'gpu_usage': { 'description': 'Average GPU usage per GPU card', 'items': {'type': 'number'}, 'type': ['array', 'null'], }, 'memory_free': { 'description': 'Free memory MBs', 'type': ['integer', 'null'], }, 'memory_used': { 'description': 'Used memory MBs', 'type': ['integer', 'null'], }, 'network_rx': { 'description': 'Mbytes per second', 'type': ['integer', 'null'], }, 'network_tx': { 'description': 'Mbytes per second', 'type': ['integer', 'null'], }, }, 'type': 'object', }, }, 'properties': { 'machine_stats': { '$ref': '#/definitions/machine_stats', 'description': 'The machine statistics.', }, 'queue': { 'description': "ID of the queue from which task was received. If no queue is sent, the worker's queue field will be cleared.", 'type': 'string', }, 'queues': { 'description': "List of queue IDs on which the worker is listening. If null, the worker's queues list will not be updated.", 'items': {'type': 'string'}, 'type': 'array', }, 'task': { 'description': "ID of a task currently being run by the worker. If no task is sent, the worker's task field will be cleared.", 'type': 'string', }, 'timestamp': { 'description': 'UNIX time in seconds since epoch.', 'type': 'integer', }, 'worker': {'description': 'Worker id.', 'type': 'string'}, }, 'required': ['worker', 'timestamp'], 'type': 'object', } def __init__( self, worker, timestamp, task=None, queue=None, queues=None, machine_stats=None, **kwargs): super(StatusReportRequest, self).__init__(**kwargs) self.worker = worker self.task = task self.queue = queue self.queues = queues self.timestamp = timestamp self.machine_stats = machine_stats @schema_property('worker') def worker(self): return self._property_worker @worker.setter def worker(self, value): if value is None: self._property_worker = None return self.assert_isinstance(value, "worker", six.string_types) self._property_worker = value @schema_property('task') def task(self): return self._property_task @task.setter def task(self, value): if value is None: self._property_task = None return self.assert_isinstance(value, "task", six.string_types) self._property_task = value @schema_property('queue') def queue(self): return self._property_queue @queue.setter def queue(self, value): if value is None: self._property_queue = None return self.assert_isinstance(value, "queue", six.string_types) self._property_queue = value @schema_property('queues') def queues(self): return self._property_queues @queues.setter def queues(self, value): if value is None: self._property_queues = None return self.assert_isinstance(value, "queues", (list, tuple)) self.assert_isinstance(value, "queues", six.string_types, is_array=True) self._property_queues = value @schema_property('timestamp') def timestamp(self): return self._property_timestamp @timestamp.setter def timestamp(self, value): if value is None: self._property_timestamp = None return if isinstance(value, float) and value.is_integer(): value = int(value) self.assert_isinstance(value, "timestamp", six.integer_types) self._property_timestamp = value @schema_property('machine_stats') def machine_stats(self): return self._property_machine_stats @machine_stats.setter def machine_stats(self, value): if value is None: self._property_machine_stats = None return if isinstance(value, dict): value = MachineStats.from_dict(value) else: self.assert_isinstance(value, "machine_stats", MachineStats) self._property_machine_stats = value class StatusReportResponse(Response): """ Response of workers.status_report endpoint. """ _service = "workers" _action = "status_report" _version = "2.5" _schema = {'definitions': {}, 'properties': {}, 'type': 'object'} class UnregisterRequest(Request): """ Unregister a worker in the system. Called by the Worker Daemon. :param worker: Worker id. Must be unique in company. :type worker: str """ _service = "workers" _action = "unregister" _version = "2.5" _schema = { 'definitions': {}, 'properties': { 'worker': { 'description': 'Worker id. Must be unique in company.', 'type': 'string', }, }, 'required': ['worker'], 'type': 'object', } def __init__( self, worker, **kwargs): super(UnregisterRequest, self).__init__(**kwargs) self.worker = worker @schema_property('worker') def worker(self): return self._property_worker @worker.setter def worker(self, value): if value is None: self._property_worker = None return self.assert_isinstance(value, "worker", six.string_types) self._property_worker = value class UnregisterResponse(Response): """ Response of workers.unregister endpoint. """ _service = "workers" _action = "unregister" _version = "2.5" _schema = {'definitions': {}, 'properties': {}, 'type': 'object'} response_mapping = { GetAllRequest: GetAllResponse, RegisterRequest: RegisterResponse, UnregisterRequest: UnregisterResponse, StatusReportRequest: StatusReportResponse, GetMetricKeysRequest: GetMetricKeysResponse, GetStatsRequest: GetStatsResponse, GetActivityReportRequest: GetActivityReportResponse, }