MCPcopy Index your code
hub / github.com/Tencent/CodeAnalysis / run

Method run

client/node/quicktask/quickrunner.py:277–339  ·  view source on GitHub ↗

执行本地项目分析

(self)

Source from the content-addressed store, hash-verified

275 self._output_result(scan_result)
276
277 def run(self):
278 """执行本地项目分析
279 """
280 try:
281 os.environ["TaskScene"] = TaskScene.LOCAL
282 os.environ["TCA_QUICK_SCAN"] = "True" # 标记为快速扫描模式,方便后续判断
283
284 # 保存当前环境变量,执行子进程时使用该环境变量,避免被污染
285 self._origin_os_env = dict(os.environ)
286
287 # 校验输入的配置信息是否正确,如果有问题,提示重新输入
288 self._check_config_info()
289
290 # 获取任务执行参数
291 input_params = QuickScan.get_input_params(self._scan_files)
292 # LogPrinter.info(f">>> input_params: {json.dumps(input_params, indent=2)}")
293 self._scan_rel_paths, self._path_info = QuickScan.get_scan_paths(input_params, self._source_dir)
294 self.check_language(input_params)
295 # LogPrinter.info(f">>> input_params: {json.dumps(input_params, indent=2)}")
296 if self._scheme_template_id:
297 if self._token and self._org_sid: # 通过server获取指定的分析方案模板的任务参数
298 LogPrinter.info(f"token and scheme_template_id are set, get task config from server ...")
299 server_url = LocalConfig.get_server_url()
300 dog_server = RetryDogServer(server_url, self._token).get_api_server(retry_times=2)
301 proj_conf = dog_server.get_jobconfs_by_scheme_template(self._scheme_template_id, self._org_sid)
302 else:
303 raise NodeError(code=errcode.E_NODE_TASK_CONFIG, msg="已输入scheme_template_id, "
304 "但缺少--token和--org-sid参数, "
305 "无法获取到分析方案模板, 请补充参数!")
306 else:
307 proj_conf = QuickScan.get_proj_config(self._scm_url, self._languages, self._labels, input_params)
308
309 # debug打印调试
310 # with open("quickscan_proj_config.json", "w") as wf:
311 # json.dump(proj_conf, wf, indent=2)
312
313 # 将需要扫描的文件添加到项目过滤路径中
314 path_filters = QuickScan.get_path_filters(input_params)
315
316 # 根据参数对项目进行分析
317 execute_request_list = self._generate_request(proj_conf, path_filters)
318 self._scan_project(execute_request_list)
319 return "OK"
320 except Exception as err:
321 # 异常封装处理:
322 # ScmCommandError 是cmdscm抛的异常,统一封装成 client 异常 E_NODE_TASK_SCM_FAILED 上报
323 # 其他未知异常,统一报 E_NODE_TASK
324 if isinstance(err, ScmCommandError):
325 error_code = errcode.E_NODE_TASK_SCM_FAILED
326 else:
327 error_code = getattr(err, 'code', errcode.E_NODE_TASK)
328
329 description = "%s: %s" % (type(err).__name__, err)
330 scan_result = {
331 "status": "error",
332 "error_code": error_code,
333 "text": "分析异常",
334 "description": description,

Callers 1

_scan_projectMethod · 0.45

Calls 15

_check_config_infoMethod · 0.95
check_languageMethod · 0.95
_generate_requestMethod · 0.95
_scan_projectMethod · 0.95
_output_resultMethod · 0.95
RetryDogServerClass · 0.90
NodeErrorClass · 0.90
get_input_paramsMethod · 0.80
get_scan_pathsMethod · 0.80
get_server_urlMethod · 0.80
get_proj_configMethod · 0.80

Tested by

no test coverage detected