50 lines
1.6 KiB
Go
50 lines
1.6 KiB
Go
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
|
|
}
|
|
return nil
|
|
})
|
|
|
|
return list
|
|
}
|