I promised to share my fruits with Tcl. I took some time (very busy with a
lot of Tcl things), but here is one example.
I had some problems with the temperature of my CPU. So I wrote a systemd
service (with Tcl) to log the temperature every minute to a SQLite
database. And wrote the following script to display statistics of the last
seven days and the last day:
#!/usr/bin/env tclsh
package require sqlite3
# for getDB: my way to open the db database
source /usr/local/share/tcltk/utilities.tcl
set periodFormat " %10s | %4s | %4s | %7s | %5s"
set periodDivider [string map {" " - | +} [format ${periodFormat} ""
"" "" "" ""]]
set periodSelect {
SELECT *
FROM temperatureStatistics
WHERE date BETWEEN
DATE('now', '-7 days')
AND DATE('now', '-1 day')
ORDER BY date DESC
}
set yesterdayFormat " %11s | %5s"
set yesterdayDivider [string map {" " - | +} [format ${yesterdayFormat}
"" ""]]
set yesterdaySelect {
SELECT Temperature
, COUNT(*) AS Count
FROM temperature
WHERE date = DATE('now', '-1 day')
GROUP BY Temperature
ORDER BY Temperature DESC
}
getDB
puts ${periodDivider}
puts [format ${periodFormat} "Date " Min Max Average Total]
puts ${periodDivider}
db eval ${periodSelect} {
puts [format ${periodFormat} ${Date} ${Minimum} ${Maximum}
${Average} ${Count}]
}
puts ${periodDivider}
puts ""
set i 0
set subtotal 0
set total 0
puts ${yesterdayDivider}
puts [format ${yesterdayFormat} "Temperature" Total]
puts ${yesterdayDivider}
db eval ${yesterdaySelect} {
puts [format ${yesterdayFormat} ${Temperature} ${Count}]
incr i
incr subtotal ${Count}
incr total ${Count}
if {[expr ${i} % 5] == 0} {
puts ${yesterdayDivider}
puts [format ${yesterdayFormat} "SubTotal" ${subtotal}]
puts ${yesterdayDivider}
set subtotal 0
}
}
if {[expr ${i} % 5] != 0} {
puts ${yesterdayDivider}
if {[expr ${i} % 5] > 1} {
puts [format ${yesterdayFormat} "SubTotal" ${subtotal}]
puts ${yesterdayDivider}
set subtotal 0
}
}
puts [format ${yesterdayFormat} "Total" ${total}]
puts ${yesterdayDivider}
I put this in a cronjob and the results of this morning where:
------------+------+------+---------+------
Date | Min | Max | Average | Total
------------+------+------+---------+------
2017-12-19 | 40.5 | 67.0 | 45.5 | 1440
2017-12-18 | 43.5 | 70.5 | 48.1 | 1439
2017-12-17 | 43.5 | 65.5 | 55.1 | 1439
2017-12-16 | 60.5 | 77.5 | 64.1 | 1440
2017-12-15 | 61.5 | 77.5 | 63.9 | 1440
2017-12-14 | 57.5 | 77.5 | 62.4 | 1440
2017-12-13 | 46.0 | 77.0 | 54.1 | 1440
------------+------+------+---------+------
-------------+------
Temperature | Total
-------------+------
67.0 | 1
66.5 | 3
66.0 | 1
65.0 | 4
64.5 | 18
-------------+------
SubTotal | 27
-------------+------
64.0 | 4
63.5 | 11
63.0 | 2
62.5 | 10
62.0 | 10
-------------+------
SubTotal | 37
-------------+------
61.5 | 5
61.0 | 1
60.5 | 5
60.0 | 2
59.5 | 1
-------------+------
SubTotal | 14
-------------+------
59.0 | 1
58.5 | 4
57.5 | 3
57.0 | 1
56.5 | 6
-------------+------
SubTotal | 15
-------------+------
56.0 | 1
55.5 | 2
53.5 | 4
53.0 | 5
52.5 | 5
-------------+------
SubTotal | 17
-------------+------
52.0 | 3
51.5 | 2
51.0 | 4
50.5 | 8
50.0 | 7
-------------+------
SubTotal | 24
-------------+------
49.5 | 13
49.0 | 14
48.5 | 19
48.0 | 22
47.5 | 24
-------------+------
SubTotal | 92
-------------+------
47.0 | 27
46.5 | 56
46.0 | 79
45.5 | 105
45.0 | 188
-------------+------
SubTotal | 455
-------------+------
44.5 | 162
44.0 | 73
43.5 | 40
43.0 | 53
42.5 | 70
-------------+------
SubTotal | 398
-------------+------
42.0 | 96
41.5 | 161
41.0 | 96
40.5 | 8
-------------+------
SubTotal | 361
-------------+------
Total | 1440
-------------+------
If people are interested I can share some more.
--
Cecil Westerhof
_______________________________________________
sqlite-users mailing list
[email protected]
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users