异步启动扫描 1. 创建任务和Scan,然后返回job_id,scan_id 2. 异步获取并更新任务参数 3. 启动任务 :param project: Project, 项目 :param creator: str,创建人 :param scan_data: dict,扫描数据 { "force_create": True/False,表示是否强制启动 "incr_scan": True/False,表示是否增量扫描 } :param async_fl
(project, creator, scan_data, async_flag=True, **kwargs)
| 84 | |
| 85 | |
| 86 | def create_server_scan(project, creator, scan_data, async_flag=True, **kwargs): |
| 87 | """异步启动扫描 |
| 88 | |
| 89 | 1. 创建任务和Scan,然后返回job_id,scan_id |
| 90 | 2. 异步获取并更新任务参数 |
| 91 | 3. 启动任务 |
| 92 | |
| 93 | :param project: Project, 项目 |
| 94 | :param creator: str,创建人 |
| 95 | :param scan_data: dict,扫描数据 |
| 96 | { |
| 97 | "force_create": True/False,表示是否强制启动 |
| 98 | "incr_scan": True/False,表示是否增量扫描 |
| 99 | } |
| 100 | :param async_flag: boolean, 异步启动标识 |
| 101 | :param kwargs: |
| 102 | - client_flag: boolean, 客户端启动标识 |
| 103 | :return: int,int 任务编号和扫描编号 |
| 104 | """ |
| 105 | tag = scan_data.pop("tag", None) |
| 106 | labels = scan_data.pop("labels", None) |
| 107 | job_context = { |
| 108 | "force_create": scan_data.get("force_create", False), |
| 109 | "incr_scan": scan_data.get("incr_scan", True) is True, |
| 110 | "init_scan": scan_data.get("init_scan", False) or kwargs.get("init_scan", False), |
| 111 | "created_from": scan_data.get("created_from", "tca_web"), |
| 112 | "tag": str(tag) if tag else None, |
| 113 | "scm_revision": scan_data.get("revision", None), |
| 114 | "scm_last_revision": scan_data.get("last_revision", None), |
| 115 | "labels": [label.name for label in labels] if labels else None, |
| 116 | } |
| 117 | job_context.update(**scan_data) |
| 118 | job_manager = JobManager(project) |
| 119 | logger.info("开始初始化任务,任务参数: %s" % json.dumps(job_context, indent=2)) |
| 120 | scan_type = job_manager.get_scan_type(scan_data, job_context) |
| 121 | job = job_manager.initialize_job( |
| 122 | force_create=job_context["force_create"], |
| 123 | creator=creator, created_from=job_context["created_from"], |
| 124 | async_flag=async_flag, client_flag=kwargs.get("client_flag", False) |
| 125 | ) |
| 126 | try: |
| 127 | job.context = job_context |
| 128 | job.save() |
| 129 | job_manager.create_waiting_scan_on_analysis_server(job, scan_type) |
| 130 | if async_flag: |
| 131 | start_server_job.delay(job.id) |
| 132 | return job.id, job.scan_id |
| 133 | except Exception as err: # 访问analyse server异常时,取消任务 |
| 134 | if isinstance(err, CDErrorBase): |
| 135 | result_msg = err.msg |
| 136 | result_code = err.code |
| 137 | else: |
| 138 | result_msg = "创建扫描异常: %s" % str(err) |
| 139 | result_code = errcode.E_SERVER_JOB_CREATE_ERROR |
| 140 | JobCloseHandler.revoke_job(job, result_code=result_code, result_msg=result_msg) |
| 141 | raise |
| 142 | |
| 143 |
no test coverage detected