def get_executions(): """ get list of workflow execution info, log info will not be returned :http param name: specify the workflow name :http param limit: specify max number of execution info returned on each request :http param startBefore: workflows start before this time in ms :http param skip: number of element to skip, this is used for pagination """ args = request.args name = args.get('name', None) limit = int(args.get('limit', 100)) startBefore = int(args.get('startBefore', now_ms())) skip = int(args.get('skip', 0)) wfs = (wf_executor.get_execution_history( name=name, startBefore=startBefore).limit(limit).order_by('-start').skip(skip)) def transform(wf): s = wf.execution.state wf.execution.state = state_str(s) return wf.to_mongo() return json.dumps(transform(wf) for wf in wfs)
def update_runner(self, hostname, **kwarg): runner = self.runners.get(hostname, None) if not runner: runner = self.Runner(hostname) self.runners[hostname] = runner for k, v in kwarg.iteritems(): setattr(runner, k, v) runner.last = now_ms()
def construct(self, topology, reactor): self.topology = topology self.reactor = reactor if not self.id: self.logger = LogProcessor() self.execution = Execution(next_task=topology.entrance, wf_name=self.name) self.tri_chain = TriggerChain() self.start = now_ms()
def test_ttr(self): driver = StatDriver() driver.start() try: start = now_ms() - 100 * 1000 data = [[ 'info', start, lambda ttr: (self.assertTrue( ttr != None) and self.assertTrue(ttr.state == 'info')) ], [ 'info', start, lambda ttr: (self.assertTrue(len(ttr.ttrs) == 0) and self. assertTrue(ttr.state == 'info')) ], [ 'warning', start + 10 * 1000, lambda ttr: (self.assertTrue(len(ttr.ttrs) == 0) and self. assertTrue(ttr.state == 'warning')) ], [ 'info', start + 30 * 1000, lambda ttr: (self.assertTrue(len(ttr.ttrs) == 1) and self. assertTrue(ttr.state == 'info') and self.assertTrue( ttr.ttrs[0] == 20 * 1000)) ]] for level, timestamp, validator in data: e = self.gen_event(level, timestamp) driver.add_event(e) time.sleep(1) validator(TTR.from_event(e)) driver._compute_mttr(False) ttr = TTR.from_event(self.gen_event('info', now_ms())) self.assertTrue(ttr.mttr == 20 * 1000) finally: driver.stop()
def run(self): while self.running: now = now_ms() asyn_results = self.dispatcher_async_wf.handle_timeout(now) # TODO: log here sleep(1)
def __init__(self, hostname): self.hostname = hostname self.last = now_ms() self.pid = 0
def judge(self, decision, comment=''): if decision not in self.options: raise Exception('decision from user is not in the list of options') self.decision = decision self.comment = comment self.judge_time = now_ms()
def construct(desc, options): return Judgement(desc=desc, options=options, created_time=now_ms())