Export correct stats for each check tool

This commit is contained in:
valeros
2019-10-24 20:44:34 +03:00
parent 3177aaf591
commit 8127fd9960

View File

@ -137,6 +137,7 @@ def cli(
result["succeeded"] = rc == 0 and not any( result["succeeded"] = rc == 0 and not any(
d.severity == DefectItem.SEVERITY_HIGH for d in result["defects"] d.severity == DefectItem.SEVERITY_HIGH for d in result["defects"]
) )
result["stats"] = collect_component_stats(result)
results.append(result) results.append(result)
if verbose: if verbose:
@ -147,26 +148,24 @@ def cli(
click.echo("No defects found") click.echo("No defects found")
print_processing_footer(result) print_processing_footer(result)
component_stats = collect_component_stats(results)
if json_output: if json_output:
click.echo(dump_json_to_unicode(results_to_json(results, component_stats))) click.echo(dump_json_to_unicode(results_to_json(results)))
elif not silent: elif not silent:
print_check_summary(results, component_stats) print_check_summary(results)
command_failed = any(r.get("succeeded") is False for r in results) command_failed = any(r.get("succeeded") is False for r in results)
if command_failed: if command_failed:
raise exception.ReturnErrorCode(1) raise exception.ReturnErrorCode(1)
def results_to_json(raw, components): def results_to_json(raw):
results = [] results = []
for item in raw: for item in raw:
item.update( item.update(
{ {
"ignored": item.get("succeeded") is None, "ignored": item.get("succeeded") is None,
"succeeded": bool(item.get("succeeded")), "succeeded": bool(item.get("succeeded")),
"defects": [d.to_json() for d in item.get("defects", [])], "defects": [d.to_json() for d in item.get("defects", [])]
"stats": [{k: v} for k, v in components.items()],
} }
) )
results.append(item) results.append(item)
@ -199,7 +198,7 @@ def print_processing_footer(result):
) )
def collect_component_stats(results): def collect_component_stats(result):
components = dict() components = dict()
def _append_defect(component, defect): def _append_defect(component, defect):
@ -207,20 +206,29 @@ def collect_component_stats(results):
components[component] = Counter() components[component] = Counter()
components[component].update({DefectItem.SEVERITY_LABELS[defect.severity]: 1}) components[component].update({DefectItem.SEVERITY_LABELS[defect.severity]: 1})
for result in results: for defect in result.get("defects", []):
for defect in result.get("defects", []): component = dirname(defect.file) or defect.file
component = dirname(defect.file) or defect.file _append_defect(component, defect)
_append_defect(component, defect)
if component.startswith(get_project_dir()): if component.startswith(get_project_dir()):
while os.sep in component: while os.sep in component:
component = dirname(component) component = dirname(component)
_append_defect(component, defect) _append_defect(component, defect)
return dict(components) return components
def print_defects_stats(component_stats): def print_defects_stats(results):
if not results:
return
component_stats = {}
for r in results:
for k, v in r.get("stats", {}).items():
if not component_stats.get(k):
component_stats[k] = Counter()
component_stats[k].update(r["stats"][k])
if not component_stats: if not component_stats:
return return
@ -233,7 +241,7 @@ def print_defects_stats(component_stats):
total = ["Total"] + [sum(d) for d in list(zip(*tabular_data))[1:]] total = ["Total"] + [sum(d) for d in list(zip(*tabular_data))[1:]]
tabular_data.sort() tabular_data.sort()
tabular_data.append([]) # Empty line as delimeter tabular_data.append([]) # Empty line as delimiter
tabular_data.append(total) tabular_data.append(total)
headers = ["Component"] headers = ["Component"]
@ -243,7 +251,7 @@ def print_defects_stats(component_stats):
click.echo() click.echo()
def print_check_summary(results, component_stats): def print_check_summary(results):
click.echo() click.echo()
tabular_data = [] tabular_data = []
@ -251,7 +259,7 @@ def print_check_summary(results, component_stats):
failed_nums = 0 failed_nums = 0
duration = 0 duration = 0
print_defects_stats(component_stats) print_defects_stats(results)
for result in results: for result in results:
duration += result.get("duration", 0) duration += result.get("duration", 0)