forked from Azure/azure-cli
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathcodegen_report.py
More file actions
123 lines (110 loc) · 4.91 KB
/
codegen_report.py
File metadata and controls
123 lines (110 loc) · 4.91 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
#!/usr/bin/env python
# --------------------------------------------------------------------------------------------
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License. See License.txt in the project root for license information.
# --------------------------------------------------------------------------------------------
import datetime
import json
import logging
import os
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
ch = logging.StreamHandler()
ch.setLevel(logging.DEBUG)
logger.addHandler(ch)
BUILD_ID = os.environ.get('BUILD_ID', None)
BUILD_BRANCH = os.environ.get('BUILD_BRANCH', None)
def load_module_stats():
stats_dir = "/tmp/module_stats"
all_stats = {}
with open("/mnt/vss/_work/1/s/scripts/ci/core_modules.txt", "r") as f:
core_modules = [line.strip() for line in f.readlines()]
with open("/mnt/vss/_work/1/s/scripts/ci/extension_modules.txt", "r") as f:
extension_modules = [line.strip() for line in f.readlines()]
for module in core_modules + extension_modules:
stats_file = os.path.join(stats_dir, f"{module}.json")
if os.path.exists(stats_file):
with open(stats_file, "r") as f:
try:
stats = json.load(f)
codegenV1 = stats.get("codegenV1", 0)
codegenV2 = stats.get("codegenV2", 0)
total = stats.get("total", 0)
manual = total - codegenV1 - codegenV2
all_stats[module] = {
"codegenV1": codegenV1,
"codegenV2": codegenV2,
"manual": manual,
"total": total,
"type": "core" if module in core_modules else "extension"
}
except json.JSONDecodeError:
logger.info(f"Warning: Could not parse {stats_file}")
return all_stats
def analyze_stats(all_stats):
counters = {
"manual": {"core": 0, "extension": 0},
"mixed": {"core": 0, "extension": 0},
"codegen": {"core": 0, "extension": 0},
"codegenV1": {"core": 0, "extension": 0},
"total": {"core": 0, "extension": 0}
}
for _, stats in all_stats.items():
module_type = stats["type"]
counters["total"][module_type] += 1
if stats["manual"] > 0 and (stats["codegenV1"] > 0 or stats["codegenV2"] > 0):
counters["mixed"][module_type] += 1
if stats["codegenV1"] > 0 or stats["codegenV2"] > 0:
counters["codegen"][module_type] += 1
if stats["codegenV1"] > 0:
counters["codegenV1"][module_type] += 1
counters["manual"]["core"] = counters["total"]["core"] - counters["codegen"]["core"]
counters["manual"]["extension"] = counters["total"]["extension"] - counters["codegen"]["extension"]
return counters
def print_results(counters):
logger.info("\n===== Codegen Coverage Report =====")
logger.info("\n1. Manual Modules:")
logger.info(f" Core: {counters['manual']['core']}")
logger.info(f" Extension: {counters['manual']['extension']}")
logger.info("\n2. Mixed Modules:")
logger.info(f" Core: {counters['mixed']['core']}")
logger.info(f" Extension: {counters['mixed']['extension']}")
logger.info("\n3. Codegen Modules:")
logger.info(f" Core: {counters['codegen']['core']}")
logger.info(f" Extension: {counters['codegen']['extension']}")
logger.info("\n4. CodegenV1 Modules:")
logger.info(f" Core: {counters['codegenV1']['core']}")
logger.info(f" Extension: {counters['codegenV1']['extension']}")
logger.info("\n5. Total Modules:")
logger.info(f" Core: {counters['total']['core']}")
logger.info(f" Extension: {counters['total']['extension']}")
def analyze_and_report():
all_stats = load_module_stats()
counters = analyze_stats(all_stats)
print_results(counters)
output = {
"detailed_stats": all_stats,
"summary": counters
}
logger.info("\n=== Detailed JSON Output ===")
logger.info(json.dumps(output, indent=2))
with open("/tmp/module_stats_summary.json", "w") as f:
json.dump(output, f, indent=2)
def generate_csv():
data = []
with open(f'/tmp/codegen_report.json', 'r') as file:
ref = json.load(file)
codegenv1 = ref['codegenV1']
codegenv2 = ref['codegenV2']
total = ref['total']
manual = total - codegenv1 - codegenv2
is_release = True if BUILD_BRANCH == 'release' else False
date = (datetime.datetime.utcnow() + datetime.timedelta(hours=8)).strftime("%Y-%m-%d")
data.append([BUILD_ID, manual, codegenv1, codegenv2, total, is_release, date])
logger.info('Finish generate data for codegen report:')
logger.info("BUILD_ID, manual, codegenv1, codegenv2, total, is_release, date")
logger.info(f'{data}')
return data
if __name__ == '__main__':
analyze_and_report()
generate_csv()