| 27 | |
| 28 | |
| 29 | class CodeDogApiServer(object): |
| 30 | def __init__(self, token, server_url): |
| 31 | |
| 32 | self._headers = { |
| 33 | 'CONTENT-TYPE': 'application/json', |
| 34 | 'NODE-IDENTITY': '1', |
| 35 | 'Authorization': 'Token %s' % token |
| 36 | } |
| 37 | self._server_url = server_url |
| 38 | |
| 39 | def get_data_from_result(self, response): |
| 40 | """ |
| 41 | Analysis返回格式调整,不具备通用性,需要特殊适配 |
| 42 | """ |
| 43 | return_data = response.read() |
| 44 | return_str = return_data.decode("utf8") |
| 45 | # 可能为空字符串,直接返回,不需要转换json |
| 46 | if not return_str: |
| 47 | return return_str |
| 48 | result = json.loads(return_str) |
| 49 | if isinstance(result, dict): |
| 50 | if result.get("data") is not None and result.get("code") is not None \ |
| 51 | and result.get("status_code") is not None: |
| 52 | return result["data"] |
| 53 | return result |
| 54 | |
| 55 | def job_heart_beat(self, org_sid, team_name, repo_id, project_id, job_id): |
| 56 | """任务心跳上报 |
| 57 | |
| 58 | :param job_id: 任务job id |
| 59 | :return: |
| 60 | """ |
| 61 | rel_url = f"api/orgs/{org_sid}/teams/{team_name}/repos/{repo_id}/projects/{project_id}/jobs/{job_id}/tasksbeat/" |
| 62 | CodeDogHttpClient(self._server_url, rel_url, headers=self._headers).post() |
| 63 | |
| 64 | def update_task_progress(self, task_params, node_id, message, percent): |
| 65 | """任务进度信息上报 |
| 66 | |
| 67 | :param node_id: 节点标识号 |
| 68 | :param job_id: 项目标识号 |
| 69 | :param task_id: 任务标识号 |
| 70 | :param message: str, 进度信息 |
| 71 | :param percent: int, 进度百分比 |
| 72 | :return: |
| 73 | """ |
| 74 | rel_url = "api/orgs/%s/teams/%s/repos/%s/projects/%s/" \ |
| 75 | "jobs/%s/tasks/%s/progresses/" % (task_params["org_sid"], |
| 76 | task_params["team_name"], |
| 77 | task_params["repo_id"], |
| 78 | task_params["project_id"], |
| 79 | task_params["job_id"], |
| 80 | task_params["task_id"]) |
| 81 | data = { |
| 82 | "message": message, |
| 83 | "progress_rate": percent, |
| 84 | "task": task_params["task_id"], |
| 85 | "node": node_id |
| 86 | } |