diff options
| author | hmj6502 <hashim@hmj6502.com> | 2025-12-18 21:54:49 +0000 |
|---|---|---|
| committer | hmj6502 <hashim@hmj6502.com> | 2025-12-18 21:54:49 +0000 |
| commit | b7f285f2b866366cff49d49ccfb49a40c62cb0e3 (patch) | |
| tree | 43e6cd6d143add79fe3409cdcb69620ea880dc88 | |
| parent | 81f6bcf7d7a62b6d920e17a2d30512c260d6c586 (diff) | |
| download | lock-n-log-b7f285f2b866366cff49d49ccfb49a40c62cb0e3.tar.gz lock-n-log-b7f285f2b866366cff49d49ccfb49a40c62cb0e3.tar.bz2 lock-n-log-b7f285f2b866366cff49d49ccfb49a40c62cb0e3.zip | |
add basic rendering
display each day as a seperate svg; each a bar chart of tags of that day
| -rw-r--r-- | display.py | 24 | ||||
| -rw-r--r-- | formatting.py | 22 |
2 files changed, 46 insertions, 0 deletions
diff --git a/display.py b/display.py new file mode 100644 index 0000000..e5b9bda --- /dev/null +++ b/display.py @@ -0,0 +1,24 @@ +# displays stats as graph. assumes csv is in chronological order, with no +# overlapping sessions. as initial test: make a bar chart for time spent per +# tag, for every day +import pygal +import csv +import argparse +from collections import OrderedDict +import formatting as f + +parser = argparse.ArgumentParser() +parser.add_argument("logfile", help="log file to display chart of", + type=argparse.FileType('r')) +args = parser.parse_args() + +day_times = f.per_tag_per_day(args.logfile) +print(day_times) + +for day in day_times: + chart = pygal.Bar() + for key, value in day.items(): + if key == "date": + continue + chart.add(key, value) + chart.render_to_file(str(day["date"]+".svg")) diff --git a/formatting.py b/formatting.py index a7c7ed7..5002ee9 100644 --- a/formatting.py +++ b/formatting.py @@ -22,3 +22,25 @@ def sess_to_log(session, filename): if logmode == 'w': writer.writeheader() writer.writerow(session) + +def per_tag_per_day(file): + """returns list of dicts, each has date, tag and time spent per tag""" + reader = csv.DictReader(file) + + rows = [] # need to make into list to transverse backwards + for row in reader: + rows.append(row) + +# list of dicts; each dict is tag: time_spent + day_times = [] + cur = -1 + for i in range(len(rows)): + date = rows[i]['date'] + tag = rows[i]['tag'] + if i > 0 and date == rows[i-1]['date']: + day_times[cur][tag] = day_times[cur].get(tag, 0) + int(rows[i]['elapsed']) + else: + cur += 1 + day_times.append({"date": date, tag: int(rows[i]['elapsed'])}) + + return day_times |
