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 }