package widgets import ( "ArinDash/apis/pihole" "ArinDash/util" "context" "fmt" "time" "github.com/mum4k/termdash/cell" "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(), text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil { return err } if err := list.Write(fmt.Sprint("───────────────────────────\n"), text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil { return err } if err := list.Write(fmt.Sprintf("Total Queries: %d\n", summary.Queries.Total), text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil { return err } if err := list.Write(fmt.Sprintf("Blocked Queries: %d\n", summary.Queries.Blocked), text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil { return err } if err := list.Write(fmt.Sprintf("Unique Domains: %d\n", summary.Queries.UniqueDomains), text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil { return err } if err := list.Write(fmt.Sprintf("Forwarded Queries: %d\n", summary.Queries.Forwarded), text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil { return err } if err := list.Write(fmt.Sprintf("Cached Queries: %d\n", summary.Queries.Cached), text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil { return err } if err := list.Write(fmt.Sprintf("Queries per Second: %d\n", summary.Queries.Frequency), text.WriteCellOpts(cell.FgColor(cell.ColorWhite))); err != nil { return err } return nil }) return list }