d6d8d2148d
* implement metrics
51 lines
1.2 KiB
Go
51 lines
1.2 KiB
Go
package sync
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/bakito/adguardhome-sync/pkg/metrics"
|
|
"github.com/bakito/adguardhome-sync/pkg/types"
|
|
)
|
|
|
|
func (w *worker) startScraping() {
|
|
metrics.Init()
|
|
if w.cfg.API.Metrics.ScrapeInterval == 0 {
|
|
w.cfg.API.Metrics.ScrapeInterval = 30 * time.Second
|
|
}
|
|
if w.cfg.API.Metrics.QueryLogLimit == 0 {
|
|
w.cfg.API.Metrics.QueryLogLimit = 10_000
|
|
}
|
|
l.With(
|
|
"scrape-interval", w.cfg.API.Metrics.ScrapeInterval,
|
|
"query-log-limit", w.cfg.API.Metrics.QueryLogLimit,
|
|
).Info("setup metrics")
|
|
w.scrape()
|
|
for range time.Tick(w.cfg.API.Metrics.ScrapeInterval) {
|
|
w.scrape()
|
|
}
|
|
}
|
|
|
|
func (w *worker) scrape() {
|
|
var ims []metrics.InstanceMetrics
|
|
|
|
ims = append(ims, w.getMetrics(w.cfg.Origin))
|
|
for _, replica := range w.cfg.Replicas {
|
|
ims = append(ims, w.getMetrics(replica))
|
|
}
|
|
metrics.Update(ims...)
|
|
}
|
|
|
|
func (w *worker) getMetrics(inst types.AdGuardInstance) (im metrics.InstanceMetrics) {
|
|
client, err := w.createClient(inst)
|
|
if err != nil {
|
|
l.With("error", err, "url", w.cfg.Origin.URL).Error("Error creating origin client")
|
|
return
|
|
}
|
|
|
|
im.HostName = inst.Host
|
|
im.Status, _ = client.Status()
|
|
im.Stats, _ = client.Stats()
|
|
im.QueryLog, _ = client.QueryLog(w.cfg.API.Metrics.QueryLogLimit)
|
|
return
|
|
}
|