aboutsummaryrefslogtreecommitdiff
path: root/gtimelog-stats.sno
diff options
context:
space:
mode:
Diffstat (limited to 'gtimelog-stats.sno')
-rwxr-xr-xgtimelog-stats.sno58
1 files changed, 58 insertions, 0 deletions
diff --git a/gtimelog-stats.sno b/gtimelog-stats.sno
new file mode 100755
index 0000000..63df843
--- /dev/null
+++ b/gtimelog-stats.sno
@@ -0,0 +1,58 @@
+#!/usr/local/bin/snobol4 -b
+# ./gtimelog-stats.sno <pattern> <begin> <end>
+
+-INCLUDE 'time.sno'
+
+ input(.log, 100,, host(4, "HOME") "/.local/share/gtimelog/timelog.txt")
+ data('entry(entry_date_str,entry_date,entry_msg)')
+
+ param.pattern = eval(host(2, host(3))) :f(end)
+ param.begin = (mktime(strptime(host(2, host(3) + 1), "%d.%m.%Y")), 0)
+ param.end = (mktime(strptime(host(2, host(3) + 2), "%d.%m.%Y")),
++ tv_sec(gettimeofday()))
+* Length of day in seconds
+ day_length = 24 * 60 * 60
+
+ entries = table()
+ entries[0] = 0
+next line = log :f(next.end)
+ line pos(0) (break(" ") . date " " arb) . date_time ": " rem . msg :f(next)
+ entries[entries[0] = entries[0] + 1] = entry(date, strptime(date_time, "%Y-%m-%d %R"), msg) :(next)
+next.end
+
+ i = 2
+
+* Skip slack lines and arrived lines
+l entry_msg(entries[i]) "**" rpos(0) :s(l.c)
+* Skip entries not containing <keywords> and before <begin> or after <end>
+ lt(mktime(entry_date(entries[i])), param.begin) :s(l.c)
+
+ ident(entry_date_str(entries[i]), entry_date_str(entries[i - 1])) :s(l.f)
+ eq(stats.sum_day) :s(l.f)
+* Print stats of last day
+* FIXME: does not always print last day
+ output = entry_date_str(entries[i - 1]) ": "
++ (stats.sum_day / (60 * 60)) " hours, "
++ (remdr(stats.sum_day, 60 * 60) / 60) " minutes, "
++ remdr(stats.sum_day, 60) " seconds"
+ stats.sum_day = 0
+
+* Skip "arrived" lines
+l.f entry_msg(entries[i]) pos(0) "arrived" :s(l.c)
+
+ ge(mktime(entry_date(entries[i])), param.end + day_length) :s(print_total)
+
+ replace(entry_msg(entries[i]), &ucase, &lcase) pos(0) param.pattern :f(l.c)
+* output = tm_yday(entry_date(entries[i])) ": " mktime(entry_date(entries[i])) ": " entry_msg(entries[i])
+
+ stats.sum_day = stats.sum_day + mktime(entry_date(entries[i])) -
++ mktime(entry_date(entries[i - 1]))
+ stats.sum = stats.sum + mktime(entry_date(entries[i])) -
++ mktime(entry_date(entries[i - 1]))
+l.c le(i = i + 1, entries[0]) :s(l)
+
+print_total
+ output = "Sum: " (stats.sum / (60 * 60)) " hours, "
++ (remdr(stats.sum, 60 * 60) / 60) " minutes, "
++ remdr(stats.sum, 60) " seconds"
+end