2019-10-25 12:13:41 +00:00
"""
workers service
Provides an API for worker machines , allowing workers to report status and get tasks for execution
"""
import enum
2020-07-04 19:52:09 +00:00
from datetime import datetime
2019-10-25 12:13:41 +00:00
2020-07-04 19:52:09 +00:00
import six
2019-10-25 12:13:41 +00:00
from dateutil . parser import parse as parse_datetime
2020-07-04 19:52:09 +00:00
from . . . . backend_api . session import NonStrictDataModel , Request , Response , schema_property , StringEnum
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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.4 "
_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 ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_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.4 "
_schema = {
' definitions ' : { } ,
' properties ' : {
' worker ' : {
' description ' : ' Worker id. Must be unique in company. ' ,
' type ' : ' string ' ,
} ,
} ,
' required ' : [ ' worker ' ] ,
' type ' : ' object ' ,
}
2020-07-04 19:52:09 +00:00
2019-10-25 12:13:41 +00:00
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.4 "
_schema = { ' definitions ' : { } , ' properties ' : { } , ' type ' : ' object ' }
response_mapping = {
GetAllRequest : GetAllResponse ,
RegisterRequest : RegisterResponse ,
UnregisterRequest : UnregisterResponse ,
StatusReportRequest : StatusReportResponse ,
GetMetricKeysRequest : GetMetricKeysResponse ,
GetStatsRequest : GetStatsResponse ,
GetActivityReportRequest : GetActivityReportResponse ,
}