ArinDash/widgets/piholestats.go
2025-12-22 18:49:05 +01:00

49 lines
1.3 KiB
Go

package widgets
import (
"ArinDash/apis/pihole"
"ArinDash/util"
"context"
"fmt"
"time"
"github.com/mum4k/termdash/terminal/terminalapi"
"github.com/mum4k/termdash/widgetapi"
"github.com/mum4k/termdash/widgets/text"
)
type PiholeStatsOptions struct {
}
func PiholeStats() PiholeStatsOptions {
widgetOptions["PiholeStatsOptions"] = createPiholeStats
return PiholeStatsOptions{}
}
func createPiholeStats(ctx context.Context, _ terminalapi.Terminal, _ interface{}) widgetapi.Widget {
list := util.PanicOnErrorWithResult(text.New())
ph := pihole.Connect()
go util.Periodic(ctx, 1*time.Minute, func() error {
summary := ph.Summary()
if err := list.Write(fmt.Sprintf("Blocked Domains: %d\n", summary.Gravity.DomainsBeingBlocked), text.WriteReplace()); err != nil {
return err
}
if err := list.Write(fmt.Sprint("---------------------------\n")); err != nil {
return err
}
if err := list.Write(fmt.Sprintf("Total Queries: %d\n", summary.Queries.Total)); err != nil {
return err
}
if err := list.Write(fmt.Sprintf("Blocked Queries: %d\n", summary.Queries.Blocked)); err != nil {
return err
}
if err := list.Write(fmt.Sprintf("Unique Domains: %d\n", summary.Queries.UniqueDomains)); err != nil {
return err
}
return nil
})
return list
}