Skip to content

Commit d0ec1e2

Browse files
committed
Generate file with package info
1 parent 3353c3e commit d0ec1e2

File tree

1 file changed

+45
-23
lines changed

1 file changed

+45
-23
lines changed

misc/scripts/library-coverage/generate-time-series.py

Lines changed: 45 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -54,20 +54,33 @@ def get_stats(lang, query):
5454
sinks = 0
5555
summaries = 0
5656

57+
packages = {}
58+
5759
with open(ql_output) as csvfile:
5860
reader = csv.reader(csvfile)
5961
for row in reader:
6062
# row: "android.util",1,"remote","source",16
63+
package = row[0]
64+
if package not in packages:
65+
packages[package] = {
66+
"sources": 0,
67+
"sinks": 0,
68+
"summaries": 0
69+
}
70+
6171
if row[3] == "source":
6272
sources += int(row[4])
73+
packages[package]["sources"] += int(row[4])
6374
if row[3] == "sink":
6475
sinks += int(row[4])
76+
packages[package]["sinks"] += int(row[4])
6577
if row[3] == "summary":
6678
summaries += int(row[4])
79+
packages[package]["summaries"] += int(row[4])
6780

6881
os.remove(ql_output)
6982

70-
return (sources, sinks, summaries)
83+
return (sources, sinks, summaries, packages)
7184
except:
7285
print("Unexpected error:", sys.exc_info()[0])
7386
raise Exception()
@@ -88,35 +101,44 @@ def get_stats(lang, query):
88101
# todo: change this when we cover multiple languages. We should compute the SHAs
89102
# only once and not per language
90103
for config in configs:
91-
with open("timeseries-" + config.lang + ".csv", 'w', newline='') as csvfile:
92-
csvwriter = csv.writer(csvfile)
93-
csvwriter.writerow(["SHA", "Date", "Sources", "Sinks", "Summaries"])
104+
with open("timeseries-" + config.lang + ".csv", 'w', newline='') as csvfile_total:
105+
with open("timeseries-" + config.lang + "-packages.csv", 'w', newline='') as csvfile_packages:
106+
csvwriter_total = csv.writer(csvfile_total)
107+
csvwriter_packages = csv.writer(csvfile_packages)
108+
csvwriter_total.writerow(
109+
["SHA", "Date", "Sources", "Sinks", "Summaries"])
110+
csvwriter_packages.writerow(
111+
["SHA", "Date", "Package", "Sources", "Sinks", "Summaries"])
112+
113+
os.chdir(working_dir)
94114

95-
os.chdir(working_dir)
115+
utils.subprocess_run(["git", "checkout", "main"])
96116

97-
utils.subprocess_run(["git", "checkout", "main"])
117+
current_sha = get_str_output(["git", "rev-parse", "HEAD"])
118+
current_date = get_date(current_sha)
98119

99-
current_sha = get_str_output(["git", "rev-parse", "HEAD"])
100-
current_date = get_date(current_sha)
120+
while True:
121+
print("Getting stats for " + current_sha)
122+
utils.subprocess_run(["git", "checkout", current_sha])
101123

102-
while True:
103-
print("Getting stats for " + current_sha)
104-
utils.subprocess_run(["git", "checkout", current_sha])
124+
try:
125+
stats = get_stats(config.lang, config.ql_path)
105126

106-
try:
107-
stats = get_stats(config.lang, config.ql_path)
127+
csvwriter_total.writerow(
128+
[current_sha, current_date, stats[0], stats[1], stats[2]])
108129

109-
csvwriter.writerow(
110-
[current_sha, current_date, stats[0], stats[1], stats[2]])
130+
for package in stats[3]:
131+
csvwriter_packages.writerow(
132+
[current_sha, current_date, package, stats[3][package]["sources"], stats[3][package]["sinks"], stats[3][package]["summaries"]])
111133

112-
print("Collected stats for " + current_sha +
113-
" at " + current_date.isoformat())
114-
except:
115-
print("Error getting stats for " +
116-
current_sha + ". Stopping iteration.")
117-
break
134+
print("Collected stats for " + current_sha +
135+
" at " + current_date.isoformat())
136+
except:
137+
print("Error getting stats for " +
138+
current_sha + ". Stopping iteration.")
139+
break
118140

119-
current_sha, current_date = get_previous_sha(
120-
current_sha, current_date)
141+
current_sha, current_date = get_previous_sha(
142+
current_sha, current_date)
121143

122144
utils.subprocess_run(["git", "checkout", "main"])

0 commit comments

Comments
 (0)