bar/internal/providers/disk.go
AKP 29ac240241
Update definition of i3bar.BlockGenerator
Signed-off-by: AKP <tom@tdpain.net>
2022-05-27 11:47:59 +01:00

69 lines
No EOL
1.5 KiB
Go

package providers
import (
"errors"
"fmt"
"strconv"
"strings"
"github.com/codemicro/bar/internal/i3bar"
)
type Disk struct {
OkThreshold float32
WarningThreshold float32
MountPath string
name string
}
func NewDisk(mountPath string, okThreshold, warningThreshold float32) i3bar.BlockGenerator {
return &Disk{
OkThreshold: okThreshold,
WarningThreshold: warningThreshold,
MountPath: mountPath,
name: "disk",
}
}
func (g *Disk) getAvailable() (float32, error) {
cmdout, err := runCommand("df", "-x", "fuse.portal")
if err != nil {
return 0, err
}
for _, line := range strings.Split(string(cmdout), "\n") {
fields := strings.Fields(line)
if fields[5] == g.MountPath || (g.MountPath == "" && fields[5] == "/") {
y, _ := strconv.ParseFloat(fields[3], 64)
return float32(y / 1000 / 1000), nil // to GB
}
}
return 0, errors.New("could not find specified mounted drive")
}
func (g *Disk) Block(colors *i3bar.ColorSet) (*i3bar.Block, error) {
da, err := g.getAvailable()
if err != nil {
return nil, err
}
block := &i3bar.Block{
Name: g.name,
Instance: g.MountPath,
FullText: fmt.Sprintf("Disk avail: %.1fGB", da),
ShortText: fmt.Sprintf("D: %.1fGB", da),
}
if da < g.WarningThreshold && g.WarningThreshold != 0 {
block.TextColor = colors.Bad
} else if da < g.OkThreshold && g.OkThreshold != 0 {
block.TextColor = colors.Warning
}
return block, nil
}
func (g *Disk) GetNameAndInstance() (string, string) {
return g.name, g.MountPath
}