def __init__(self, configuration, exit_flag): self._exit_flag = exit_flag self._logger = logging.getLogger(__name__) self._logger.info("Initialized scaling engine with configuration %s", repr(configuration)) self._services_dictionary = configuration.services_dictionary self._metrics_receiver = configuration.metrics_receiver self._metrics = ScalingMetrics() self._rule_checker = RuleChecker(configuration.scaling_policies, configuration.services_dictionary) self._executed_tasks_receiver = configuration.executed_task_receiver self._scaling_action_sender = configuration.scaling_action_sender atexit.register(self._on_engine_shutdown) self._running_services_registry = RunningServicesRegistry( configuration.services_dictionary) instance_name_resolver = ServiceInstanceNameResolver( configuration.etcd_connection) self._service_instance_name_resolver = CachingServiceInstanceNameResolver( instance_name_resolver)