Monitor hard disk usage with Go
Bright Paint
The Update()
function, which Listing 2 defines starting in line 59, writes new values to the display. It expects two values: the fill level of the hard disk as an integer and the measured fill speed as a float64
value. It passes the fill level to the Gauge
widget of the termui library in line 62 and the fill speed to the pie chart in ui.Pie
.
To make the pie chart paint a positive fill speed in red and a negative one in green, lines 63 and 64 sets the colors of the slices in the pie chart to black and red, and lines 66 and 67 modifies the second color to green in case of a negative speed. Because the graph only processes positive values, line 68 reverses the sign of the negative velocities after the color has been adjusted. The termui Render
function paints all three widgets onto the terminal's canvas in lines 71 and 72, refreshing the display at intervals of one second.
Now how does the pie chart paint the speedometer reading based on a floating-point value for speed between 0 and 1? It does this by calling the fract()
function starting in line 75, which – in turn – produces a fraction using the formula (1-val)/val
, which yields the ratio of the speed's colored area (green or red) divided by the size of the black area. For percentage values, lines 77 and 78 also multiply the numerator and denominator values by 100.
In this way, for a floating-point value of 0.35
, for example, fract()
returns 0.65*100
and 0.35*100
, (i.e., 65 and 35). Consequently, the red speedometer segment shown (see Figure 1) occupies about one third of the total circle, and the remaining two thirds are left black on the left side.
Build Time!
You can compile the whole enchilada with the calls from Listing 3, which retrieve the termui UI and its dependencies from GitHub and then go ahead to build the dftop
binary. When invoking the finished program from the command line, Listing 3 produces the output from Figures 1 and 2. If you run dftop
in a window in a corner of your desktop, you can keep an eye on your remaining hard disk capacity, and prevent overfilling before it's too late.
Listing 3
Compiling
$ go mod init dftop $ go mod tidy $ go build dftop.go ui.go
Infos
- statfs: https://man7.org/linux/man-pages/man2/statfs.2.html
- Listings for this article: ftp://ftp.linux-magazine.com/pub/listings/linux-magazine.com/253/
« Previous 1 2 3
Buy this article as PDF
(incl. VAT)