Beispiel #1
0
 async def test_get_tms_activated_with_some_found_no_repeat(self):
     ''' _get_tms_activated_with should return the tms activated with these metrics each only once '''
     tm1 = transfer_methods.transfermethod(f=noop)
     tm2 = transfer_methods.transfermethod(f=noop)
     tm1._decorate_method(tm1._f)
     tm2._decorate_method(tm2._f)
     tmi = TransferMethodsIndex()
     self.assertTrue(tmi.add_tm(tm1))
     self.assertTrue(tmi.add_tm(tm2))
     self.assertTrue(tm1.mid in tmi._disabled_methods)
     self.assertTrue(tm2.mid in tmi._disabled_methods)
     self.assertTrue(await tmi.enable_all())
     tm1.schedule = OnUpdateSchedule(
         activation_metrics=[Datasource('uri'),
                             Datasource('uri2')])
     tm2.schedule = OnUpdateSchedule(
         activation_metrics=[Datasource('uri'),
                             Datasource('uri2')])
     self.assertTrue(Datasource('uri') in tm1.schedule.activation_metrics)
     self.assertTrue(Datasource('uri') in tm2.schedule.activation_metrics)
     self.assertTrue(Datasource('uri2') in tm1.schedule.activation_metrics)
     self.assertTrue(Datasource('uri2') in tm2.schedule.activation_metrics)
     self.assertTrue(tm1.mid in tmi._enabled_methods)
     self.assertTrue(tm2.mid in tmi._enabled_methods)
     self.assertIsNotNone(tmi._enabled_methods[tm1.mid]['first'])
     self.assertIsNotNone(tmi._enabled_methods[tm2.mid]['first'])
     metrics = [Datasource('uri'), Datasource('uri2')]
     activated = tmi._get_tms_activated_with(metrics)
     self.assertEqual(len(activated), 2)
     self.assertTrue(tm1 in activated)
     self.assertTrue(tm2 in activated)
Beispiel #2
0
 async def test_metrics_updated_two_tm_activated_with_them(self):
     ''' metrics_updated should generate two new tasks '''
     tm1 = transfer_methods.transfermethod(f=noop)
     tm2 = transfer_methods.transfermethod(f=noop)
     tm1._decorate_method(tm1._f)
     tm2._decorate_method(tm2._f)
     tmi = TransferMethodsIndex()
     self.assertTrue(tmi.add_tm(tm1))
     self.assertTrue(tmi.add_tm(tm2))
     self.assertTrue(tm1.mid in tmi._disabled_methods)
     self.assertTrue(tm2.mid in tmi._disabled_methods)
     self.assertTrue(await tmi.enable_all())
     tm1.schedule = OnUpdateSchedule(activation_metrics=Datasource('uri'))
     tm2.schedule = OnUpdateSchedule(activation_metrics=Datasource('uri'))
     self.assertTrue(tm1.mid in tmi._enabled_methods)
     self.assertTrue(tm2.mid in tmi._enabled_methods)
     self.assertIsNotNone(tmi._enabled_methods[tm1.mid]['first'])
     self.assertIsNotNone(tmi._enabled_methods[tm2.mid]['first'])
     metrics = [Datasource('uri'), Datasource('uri2')]
     t = timeuuid.TimeUUID()
     current_task = asyncio.Task.current_task()
     tasks = asyncio.Task.all_tasks()
     self.assertEqual(len(tasks), 1)  #this task
     tmi.metrics_updated(t=t, metrics=metrics, irt=timeuuid.TimeUUID())
     tasks = asyncio.Task.all_tasks()
     self.assertEqual(len(tasks), 3)  #two tm activated
     [
         task.cancel() for task in asyncio.Task.all_tasks()
         if task != current_task
     ]
Beispiel #3
0
    def __init__(self, root_uri):
        self.info = Datasource(
            uri='.'.join((root_uri,'memory')),
            supplies = ['pswpin','pswpout','pgpgin','pgpgout','fault','majflt','pgfree','pgscank','pgscand','pgsteal','vmeff','kbmemfree','kbmemused','memused','kbbuffers','kbcached','kbcommit','commit','kbactive','kbinact','kbdirty']
        )
        self.use_metrics= {
            'memused':Datapoint('.'.join((self.info.uri,'memused'))),
            'majflt':Datapoint('.'.join((self.info.uri,'majflt')))
        }

        self.tms = [
            transfermethod(f=self.check_anom, schedule=OnUpdateSchedule(activation_metrics=self.use_metrics)),
        ]
Beispiel #4
0
 async def test_retry_failed_failure_cannot_hook_metric(self):
     ''' retry_failed should fail if we cannot enable a tm. It should generate a retry task '''
     tm = transfer_methods.transfermethod(f=noop,
                                          schedule=OnUpdateSchedule(
                                              Datasource('uri')))
     tm._decorate_method(tm._f)
     tmi = TransferMethodsIndex()
     self.assertTrue(tmi.add_tm(tm))
     self.assertTrue(tm.mid in tmi._disabled_methods)
     self.assertFalse(await tmi.enable_tm(tm.mid))
     self.assertFalse(tm.mid in tmi._enabled_methods)
     self.assertIsNone(tmi._disabled_methods[tm.mid]['first'])
     current_task = asyncio.Task.current_task()
     tasks = asyncio.Task.all_tasks()
     self.assertEqual(len(tasks), 2)  #this task and retry task
     tm.schedule = OnUpdateSchedule()
     self.assertTrue(await tmi._retry_failed(sleep=1))
     tasks = asyncio.Task.all_tasks()
     self.assertEqual(len(tasks), 2)  # no new task
     [
         task.cancel() for task in asyncio.Task.all_tasks()
         if task != current_task
     ]
Beispiel #5
0
    def _decorate_method(self, f):
        @wraps(f)
        async def decorated(t, metrics):
            now = pd.Timestamp('now', tz='utc')
            exec_params = self._get_execution_params(t=t, metrics=metrics)
            if asyncio.iscoroutinefunction(f):
                await f(**exec_params)
            else:
                f(**exec_params)
            return True

        self.f = decorated
        self._func_params = inspect.signature(f).parameters
        if self.schedule == None:
            self.schedule = OnUpdateSchedule(activation_metrics=self.f_params)
Beispiel #6
0
    def __init__(self, root_uri):
        self.info = Datasource(
            uri = '.'.join((root_uri,'cpu')),
            supplies = ['ldavg.1min','ldavg.5min','ldavg.15min','cpu_count','all.user','all.nice','all.system','all.iowait','all.steal','all.idle','tasks.runnable','tasks.total','tasks.blocked']
        )
        self.use_metrics= {
            'user':Datapoint('.'.join((self.info.uri,'all.user'))),
            'nice':Datapoint('.'.join((self.info.uri,'all.nice'))),
            'system':Datapoint('.'.join((self.info.uri,'all.system'))),
            'steal':Datapoint('.'.join((self.info.uri,'all.steal'))),
            'iowait':Datapoint('.'.join((self.info.uri,'all.iowait'))),
            'idle':Datapoint('.'.join((self.info.uri,'all.idle'))),
            'cpu_count':Datapoint('.'.join((self.info.uri,'cpu_count'))),
            't_runnable':Datapoint('.'.join((self.info.uri,'tasks.runnable'))),
            'ldavg1':Datapoint('.'.join((self.info.uri,'ldavg.1min')))
        }

        self.tms = [
            transfermethod(f=self.check_anom, schedule=OnUpdateSchedule(activation_metrics=self.use_metrics)),
        ]