示例#1
0
    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)
示例#2
0
    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
示例#3
0
    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
示例#4
0
    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())
示例#5
0
    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())