Пример #1
0
def gen_leader_data(lea_addr):
    res, err = rest.get(lea_addr)
    if err is not None:
        return {}
    info = LeaderInfo.make(res.json()["info"])

    url = "{0}subordinates".format(lea_addr)
    res, err = rest.get(url)
    if err is not None:
        return {}
    subs = res.json()["subordinates"]
    sub_info_list = [SoldierInfo.make(s) for s in subs]

    return {
        "text":
        "Leader: {0}({1}) at {2}".format(info.name, info.id, info.place),
        "icon":
        "troops leader",
        "href":
        info.endpoint,
        "nodes": [
            {
                "text": "missions",
                "nodes": [gen_mission_data(m) for m in info.missions]
            },
            {
                "text": "subordinates",
                "nodes": [gen_soldier_data(info) for info in sub_info_list]
            },
        ]
    }
Пример #2
0
def gen_commander_data(com_addr):
    res, err = rest.get(com_addr)
    if err is not None:
        return {}
    info = CommanderInfo.make(res.json()["info"])

    url = "{0}subordinates".format(com_addr)
    res, err = rest.get(url)
    if err is not None:
        return {}
    subs = res.json()["subordinates"]
    sub_addr_list = [sub["endpoint"] for sub in subs]

    leaders = [gen_leader_data(addr) for addr in sub_addr_list]
    leaders = [l for l in leaders if len(l) != 0]
    return {
        "text": "Commander: {0}({1}) at {2}".
            format(info.name, info.id, info.place),
        "icon": "troops commander",
        "href": info.endpoint,
        "nodes": [
            {
                "text": "campaigns",
                "nodes": [gen_campaign_data(c) for c in info.campaigns]
            },
            {
                "text": "subordinates",
                "nodes": leaders
            },
        ]
    }
Пример #3
0
def gen_leader_data(lea_addr):
    res, err = rest.get(lea_addr)
    if err is not None:
        return {}
    info = LeaderInfo.make(res.json()["info"])

    url = "{0}subordinates".format(lea_addr)
    res, err = rest.get(url)
    if err is not None:
        return {}
    subs = res.json()["subordinates"]
    sub_info_list = [SoldierInfo.make(s) for s in subs]

    return {
        "text": "Leader: {0}({1}) at {2}".
            format(info.name, info.id, info.place),
        "icon": "troops leader",
        "href": info.endpoint,
        "nodes": [
            {
                "text": "missions",
                "nodes": [gen_mission_data(m) for m in info.missions]
            },
            {
                "text": "subordinates",
                "nodes": [gen_soldier_data(info) for info in sub_info_list]
            },
        ]
    }
Пример #4
0
def gen_commander_data(com_addr):
    res, err = rest.get(com_addr)
    if err is not None:
        return {}
    info = CommanderInfo.make(res.json()["info"])

    url = "{0}subordinates".format(com_addr)
    res, err = rest.get(url)
    if err is not None:
        return {}
    subs = res.json()["subordinates"]
    sub_addr_list = [sub["endpoint"] for sub in subs]

    leaders = [gen_leader_data(addr) for addr in sub_addr_list]
    leaders = [l for l in leaders if len(l) != 0]
    return {
        "text":
        "Commander: {0}({1}) at {2}".format(info.name, info.id, info.place),
        "icon":
        "troops commander",
        "href":
        info.endpoint,
        "nodes": [
            {
                "text": "campaigns",
                "nodes": [gen_campaign_data(c) for c in info.campaigns]
            },
            {
                "text": "subordinates",
                "nodes": leaders
            },
        ]
    }
Пример #5
0
    def run(self):
        while not self.lock.wait(timeout=self.interval):
            url = self.soldier.superior_ep + "subordinates/" + self.soldier.id
            res, err = rest.get(url, etag=self.etag)
            if err is not None:
                # TODO: エラー処理ちゃんとやる
                logger.error('In HeartBeat, failed to post report')
                logger.error('> err: {0}', err)
                break
            if res.status_code == 304:
                continue
            self.etag = res.headers['ETag']
            info = SoldierInfo.make(res.json()['info'])

            logger.info([str(m) for m in info.orders])

            # 以前に受理されているorderにはあるが新規のorderリストには無い
            # (消された)orderを消す
            oid_list = [o.get_id() for o in info.orders]
            for old_oid in self.soldier.orders.keys():
                if old_oid not in oid_list:
                    self.soldier.remove_order(old_oid)

            for m in info.orders:
                self.soldier.accept_order(m)
        self.soldier.shutdown()
Пример #6
0
 def __get_review(self, reviewid):
     request = rest.get(self.__server,
                        '/rest-service/reviews-v1/{id}'.format(id=reviewid))
     if request.status_code == requests.codes.ok:
         return request.json()
     elif request.status_code != 404:
         request.raise_for_status()
Пример #7
0
    def awake(self, rec_ep: str, heartbeat_rate: int):
        from model import LeaderInfo

        # 上官を解決する
        url = rec_ep + 'department/squad/leader?soldier_id=' + self.id
        res, err = rest.get(url)
        if err is not None:
            return False
        self.place = res.json()["place"]
        superior = LeaderInfo.make(res.json()['leader'])
        self.superior_ep = superior.endpoint
        logger.info("superior was resolved: id={0}".format(superior.id))

        # 分隊に加入する
        url = self.superior_ep + "subordinates"
        info = SoldierInfo(
            id=self.id,
            name=self.name,
            place=self.place,
            weapons=list(self.weapons.keys()),
            orders=list(self.orders.values()))
        res, err = rest.post(url, json=info.to_dict())
        if err is not None:
            return False
        logger.info("joined to squad: leader_id: {0}".format(superior.id))

        # orderを取得する
        self.heartbeat_thread.interval = heartbeat_rate
        self.heartbeat_thread.start()
        return True
Пример #8
0
    def run(self):
        while not self.lock.wait(timeout=self.interval):
            url = self.soldier.superior_ep + "subordinates/" + self.soldier.id
            res, err = rest.get(url, etag=self.etag)
            if err is not None:
                # TODO: エラー処理ちゃんとやる
                logger.error('In HeartBeat, failed to post report')
                logger.error('> err: {0}', err)
                break
            if res.status_code == 304:
                continue
            self.etag = res.headers['ETag']
            info = SoldierInfo.make(res.json()['info'])

            logger.info([str(m) for m in info.orders])

            # 以前に受理されているorderにはあるが新規のorderリストには無い
            # (消された)orderを消す
            oid_list = [o.get_id() for o in info.orders]
            for old_oid in self.soldier.orders.keys():
                if old_oid not in oid_list:
                    self.soldier.remove_order(old_oid)

            for m in info.orders:
                self.soldier.accept_order(m)
        self.soldier.shutdown()
Пример #9
0
    def awake(self, rec_ep: str, heartbeat_rate: int):
        from model import LeaderInfo

        # 上官を解決する
        url = rec_ep + 'department/squad/leader?soldier_id=' + self.id
        res, err = rest.get(url)
        if err is not None:
            return False
        self.place = res.json()["place"]
        superior = LeaderInfo.make(res.json()['leader'])
        self.superior_ep = superior.endpoint
        logger.info("superior was resolved: id={0}".format(superior.id))

        # 分隊に加入する
        url = self.superior_ep + "subordinates"
        info = SoldierInfo(id=self.id,
                           name=self.name,
                           place=self.place,
                           weapons=list(self.weapons.keys()),
                           orders=list(self.orders.values()))
        res, err = rest.post(url, json=info.to_dict())
        if err is not None:
            return False
        logger.info("joined to squad: leader_id: {0}".format(superior.id))

        # orderを取得する
        self.heartbeat_thread.interval = heartbeat_rate
        self.heartbeat_thread.start()
        return True
Пример #10
0
 def __get_review(self, reviewid):
     request = rest.get(
         self.__server,
         '/rest-service/reviews-v1/{id}'.format(id=reviewid))
     if request.status_code == requests.codes.ok:
         return request.json()
     elif request.status_code != 404:
         request.raise_for_status()
Пример #11
0
    def get_reviews_from_jira(self, jirakey):
        request = rest.get(self.__server,
                           '/rest-service/search-v1/reviewsForIssue',
                           {'jiraKey': jirakey})

        if request.status_code == requests.codes.ok:
            return request.json()['reviewData']
        else:
            request.raise_for_status()
Пример #12
0
    def __plan_exist(self, plankey):
        request = rest.get(self.__bamboo_server,
                           '/rest/api/latest/plan/{}'.format(plankey))
        if request.status_code == requests.codes.ok:
            return True
        elif request.status_code != 404:
            request.raise_for_status()

        return False
Пример #13
0
    def __get_builds(self):
        request = rest.get(self.__bamboo_server,
                           '/build/admin/ajax/getDashboardSummary.action')
        if request.status_code == requests.codes.ok:
            return request.json()['builds']
        elif request.status_code != 403:
            request.raise_for_status()

        return None
Пример #14
0
def generate_data(rec_addr):
    url = "{0}commanders".format(rec_addr)
    res, err = rest.get(url)
    if err is not None:
        return {}

    com_addr_list = []
    for cid in res.json()["commanders"]:
        url = "{0}commanders/{1}".format(rec_addr, cid)
        res, err = rest.get(url)
        if err is not None:
            return {}

        com_info = res.json()["commander"]
        if len(com_info) == 0:
            continue
        com_addr_list.append(com_info["endpoint"])

    return [gen_commander_data(addr) for addr in com_addr_list]
Пример #15
0
    def __get_deployment_key(self, deploymentid):
        request = rest.get(
            self.__bamboo_server,
            '/rest/api/latest/deploy/result/{}'.format(deploymentid))
        if request.status_code == requests.codes.ok:
            return request.json()['key']['key']
        elif request.status_code != 404:
            request.raise_for_status()

        return None
Пример #16
0
    def get_reviews_from_jira(self, jirakey):
        request = rest.get(
            self.__server,
            '/rest-service/search-v1/reviewsForIssue',
            {'jiraKey': jirakey})

        if request.status_code == requests.codes.ok:
            return request.json()['reviewData']
        else:
            request.raise_for_status()
Пример #17
0
def generate_data(rec_addr):
    url = "{0}commanders".format(rec_addr)
    res, err = rest.get(url)
    if err is not None:
        return {}

    com_addr_list = []
    for cid in res.json()["commanders"]:
        url = "{0}commanders/{1}".format(rec_addr, cid)
        res, err = rest.get(url)
        if err is not None:
            return {}

        com_info = res.json()["commander"]
        if len(com_info) == 0:
            continue
        com_addr_list.append(com_info["endpoint"])

    return [gen_commander_data(addr) for addr in com_addr_list]
Пример #18
0
    def __get_deployment_key(self, deploymentid):
        request = rest.get(
            self.__bamboo_server,
            '/rest/api/latest/deploy/result/{}'.format(deploymentid))
        if request.status_code == requests.codes.ok:
            return request.json()['key']['key']
        elif request.status_code != 404:
            request.raise_for_status()

        return None
Пример #19
0
    def __get_builds(self):
        request = rest.get(
            self.__bamboo_server,
            '/build/admin/ajax/getDashboardSummary.action')
        if request.status_code == requests.codes.ok:
            return request.json()['builds']
        elif request.status_code != 403:
            request.raise_for_status()

        return None
Пример #20
0
    def __plan_exist(self, plankey):
        request = rest.get(
            self.__bamboo_server,
            '/rest/api/latest/plan/{}'.format(plankey))
        if request.status_code == requests.codes.ok:
            return True
        elif request.status_code != 404:
            request.raise_for_status()

        return False
Пример #21
0
    def __get_uncompleted_reviewers(self, reviewid):
        request = rest.get(
            self.__server,
            '/rest-service/reviews-v1/{id}/reviewers/uncompleted'.format(
                id=reviewid))

        reviewers = request.json()['reviewer']
        for r in reviewers:
            user_id = self.__slackclient.find_user_by_name(r['userName'])
            yield '<@{}>'.format(user_id) if user_id else '@{}'.format(
                r['userName'])
Пример #22
0
    def __get_uncompleted_reviewers(self, reviewid):
        request = rest.get(
            self.__server,
            '/rest-service/reviews-v1/{id}/reviewers/uncompleted'
            .format(id=reviewid))

        reviewers = request.json()['reviewer']
        for r in reviewers:
            user_id = self.__slackclient.find_user_by_name(r['userName'])
            if not user_id and self.__handle_field:
                user_id = slackbot_utils.get_user_by_crucible_handle(self.__slackclient, r['userName'], self.__handle_field)
            yield '<@{}>'.format(user_id) if user_id else '@{}'.format(r['userName'])
Пример #23
0
    def get_stash_branches(self, repos, project, filter):
        results = []
        for repo in repos:
            path = '/rest/api/1.0/projects/{project}/repos/{repo}/branches'\
                    .format(project=project, repo=repo)
            data = {'filterText': filter, 'details': True, 'limit': 100}

            request = rest.get(self.__server, path, data)
            for result in request.json()['values']:
                results.append((repo, result['id'], result['displayId'],
                                result['latestChangeset']))

        return results
Пример #24
0
    def branch_merged(self, project, basebranches, repo, branch):
        for to in basebranches:
            path = ('/rest/api/1.0/projects/{project}/repos/{repo}/'
                    'compare/changes/').format(project=project, repo=repo)
            data = {'from': branch, 'to': to, 'limit': 1}

            request = rest.get(self.__server, path, data)
            if request.status_code != requests.codes.ok:
                raise Exception(request.text)
            else:
                if request.json()['size'] == 0:
                    return True

        return False
Пример #25
0
    def resolve_leader(self, leader_id, force_retrieve=False) -> LeaderInfo:
        """
        Leaderの情報を上官Commanderから取得する
        :param str leader_id: 取得したいLeaderのID
        :param bool force_retrieve: キャッシュを無視して問い合わせるかどうか
        """
        # TODO: エラー処理
        com_id = self.get_troop_commander(leader_id)
        com_info = self.commander_cache[com_id]
        url = "{0}subordinates/{1}".format(com_info.endpoint, leader_id)
        res, err = rest.get(url)
        if err is not None:
            return None

        return LeaderInfo.make(res.json()["info"])
Пример #26
0
    def find_matching_branches(self, plankey, searched_term):
        request = rest.get(self.__bamboo_server,
                           '/rest/api/latest/search/branches',
                           data={
                               'masterPlanKey': plankey,
                               'searchTerm': searched_term
                           })

        if request.status_code != requests.codes.ok:
            request.raise_for_status()

        for result in request.json()['searchResults']:
            result = result['searchEntity']
            yield (result['id'], '{}/{}'.format(result['planName'],
                                                result['branchName']))
Пример #27
0
    def find_matching_branches(self, plankey, searched_term):
        request = rest.get(
            self.__bamboo_server,
            '/rest/api/latest/search/branches',
            data={
                'masterPlanKey': plankey,
                'searchTerm': searched_term
            }
        )

        if request.status_code != requests.codes.ok:
            request.raise_for_status()

        for result in request.json()['searchResults']:
            result = result['searchEntity']
            yield (result['id'],
                   '{}/{}'.format(result['planName'],
                                  result['branchName']))
Пример #28
0
    def awake(self, rec_ep: str, heartbeat_rate: int):
        from model import CommanderInfo

        # 上官を解決する
        url = rec_ep + 'department/troop/commander?leader_id=' + self.id
        res, err = rest.get(url)
        if err is not None:
            return False
        self.place = res.json()["place"]
        superior = CommanderInfo.make(res.json()['commander'])
        self.superior_ep = superior.endpoint
        logger.info("superior was resolved: id={0}".format(superior.id))

        # 部隊に加入する
        url = self.superior_ep + "subordinates"
        res, err = rest.post(url, json=self.generate_info().to_dict())
        if err is not None:
            return False
        logger.info("joined to squad: commander_id: {0}".format(superior.id))

        # missionを取得する
        self.start_heartbeat(heartbeat_rate)
        return True
Пример #29
0
    def awake(self, rec_ep: str, heartbeat_rate: int):
        from model import CommanderInfo

        # 上官を解決する
        url = rec_ep + 'department/troop/commander?leader_id=' + self.id
        res, err = rest.get(url)
        if err is not None:
            return False
        self.place = res.json()["place"]
        superior = CommanderInfo.make(res.json()['commander'])
        self.superior_ep = superior.endpoint
        logger.info("superior was resolved: id={0}".format(superior.id))

        # 部隊に加入する
        url = self.superior_ep + "subordinates"
        res, err = rest.post(url, json=self.generate_info().to_dict())
        if err is not None:
            return False
        logger.info("joined to squad: commander_id: {0}".format(superior.id))

        # missionを取得する
        self.start_heartbeat(heartbeat_rate)
        return True
Пример #30
0
    def get_games(self):
        url = '{}/games/current'.format(settings.FAF_SERVICE_URL)

        body = yield from rest.get(url)

        return body