View Licence Agreement

class sosw.managers.ecology.EcologyManager(*args, **kwargs)[source]
add_running_tasks_for_labourer(labourer: sosw.labourer.Labourer, count: int = 1)[source]

Adds to the current counter of running tasks the given count. Invokes the getter first in case the original number was not yet calculated from DynamoDB.

count_running_tasks_for_labourer(labourer: sosw.labourer.Labourer) → int[source]

TODO Refactor this to cache the value in the Labourer object itself. Should also update add_running_tasks_for_labourer() for that.

fetch_metric_stats(metric: Dict) → List[Dict][source]

Fetches from CloudWatch Datapoints of aggregated metric statistics. Fields in metric are the attributes of get_metric_statistics. Additional parameter: MetricAggregationTimeSlice in seconds is used to calculate the Start and EndTime.

If some fields are missing in the metric, the defaults come from config['default_metric_values']

get_health(value: Union[int, float], metric: Dict) → int[source]

Checks the value against the health_metric configuration.

get_labourer_average_duration(labourer: sosw.labourer.Labourer) → int[source]

Calculates the average duration of labourer executions.

The operation consumes DynamoDB RCU . Normally this method is called for each labourer only once during registration of Labourers. If you want to learn this value, you should ask Labourer object.

get_labourer_status(labourer: sosw.labourer.Labourer) → int[source]

Get the worst (lowest) health status according to preconfigured health metrics of the Labourer.


  • (0, ‘Bad’)
  • (1, ‘Poor’)
  • (2, ‘Moderate’)
  • (3, ‘Good’)
  • (4, ‘High’)
get_max_labourer_duration(labourer: sosw.labourer.Labourer) → int[source]

Maximum duration of labourer executions.


Return statistics of operations performed by current instance of the Class.

Statistics of custom clients existing in the Processor is also aggregated by default. Clients must be initialized as self.some_client ending with _client suffix (e.g. self.dynamo_client). Clients must also have their own get_stats() methods implemented.

Be careful about circular get_stats() calls from child classes. If required overwrite get_stats() with recursive = False.

Parameters:recursive – Merge stats from self.***_client.
Return type:dict
Returns:Statistics counter of current Processor instance.
register_task_manager(task_manager: sosw.managers.task.TaskManager)[source]

We will have to make some queries, and don’t want to initialise another TaskManager locally. Just receive the pointer to TaskManager from whoever needs.

This could be in __init__, but I don’t want to update the initialization workflows for every function initialising me. They usually use built-in in core Processor mechanism to register_clients().


Cleans statistics other than specified for the lifetime of processor. All the parameters with prefix ‘total_’ are also preserved.

The function makes sense if your Processor lives outside the scope of lambda_handler.

Be careful about circular get_stats() calls from child classes. If required overwrite reset_stats() with recursive = False.

Parameters:recursive – Reset stats from self.***_client.