def test_submit_report(self): # add leader leader = LeaderInfo(id='lxxx0', name='lea_http', place="desk", endpoint='http://localhost:50000', subordinates=[], missions=[]) self.app.post('/commander/subordinates', data=json.dumps(leader.to_dict()), content_type='application/json') # submit a report report = Report(purpose="some app", time=datetime.now().strftime('%Y-%m-%d %H:%M:%S'), place="desk", values="some values") response = self.app.post('/commander/subordinates/lxxx0/report', data=json.dumps(report.to_dict()), content_type='application/json') self.assertEqual(response.status_code, 200) actual = json.loads(response.data.decode("utf-8")) # assert expected = { "_status": { 'success': True, 'msg': "status is ok" }, "accepted": report.to_dict() } self.assertEqual(actual, expected)
def run(self): if 'timer' in self.mission.trigger.keys(): interval = self.mission.trigger['timer'] while not self.lock.wait(timeout=interval): m_id = self.mission.get_id() time = datetime.datetime.now(datetime.timezone.utc).isoformat() works = [] for sid, w in self.leader.work_cache: if w.purpose != m_id: continue works.append({ "time": w.time, "place": self.leader.subordinates[sid].place, "values": w.values }) report = Report(time, self.leader.place, self.mission.purpose, works) url = "{0}subordinates/{1}/report".\ format(self.leader.superior_ep, self.leader.id) res, err = rest.post(url, json=report.to_dict()) if err is not None: # TODO: エラー処理ちゃんとやる # 本当に接続先がダウンしてる場合、ただのDoSになってしまう logger.error('In WorkingThread, failed to post report') logger.error('> err: {0}', err) self.leader.work_cache = \ [(sid, w) for sid, w in self.leader.work_cache if w.purpose != m_id] else: pass
def run(self): if 'timer' in self.mission.trigger.keys(): interval = self.mission.trigger['timer'] while not self.lock.wait(timeout=interval): m_id = self.mission.get_id() time = datetime.datetime.now(datetime.timezone.utc).isoformat() works = [] for sid, w in self.leader.work_cache: if w.purpose != m_id: continue works.append({"time": w.time, "place": self.leader.subordinates[sid].place, "values": w.values}) report = Report(time, self.leader.place, self.mission.purpose, works) url = "{0}subordinates/{1}/report".\ format(self.leader.superior_ep, self.leader.id) res, err = rest.post(url, json=report.to_dict()) if err is not None: # TODO: エラー処理ちゃんとやる # 本当に接続先がダウンしてる場合、ただのDoSになってしまう logger.error('In WorkingThread, failed to post report') logger.error('> err: {0}', err) self.leader.work_cache = \ [(sid, w) for sid, w in self.leader.work_cache if w.purpose != m_id] else: pass
def submit_error(self, msg): time = datetime.datetime.now(datetime.timezone.utc).isoformat() report = Report(time=time, place="internal", purpose="_error", values=[{"type": "error_msg", "msg": msg}]) url = "{0}subordinates/{1}/report".format(self.superior_ep, self.id) rest.post(url, json=report.to_dict())
def submit_error(self, msg): time = datetime.datetime.now(datetime.timezone.utc).isoformat() report = Report(time=time, place="internal", purpose="_error", values=[{ "type": "error_msg", "msg": msg }]) url = "{0}subordinates/{1}/report".format(self.superior_ep, self.id) rest.post(url, json=report.to_dict())