Files
hg612-exporter/internal/metrics/collector.go

56 lines
1.1 KiB
Go

package metrics
import (
"context"
"time"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
"github.com/nikdoof/hg612-exporter/pkg/hg612"
)
type Collector interface {
Collect()
Start()
Stop()
}
type MetricsCollector struct {
ctx context.Context
collectIntervalSeconds int
dslMetricsCollector dslMetricsCollector
}
func New(client hg612.Client, host string, identifier string, collectIntervalSeconds int) Collector {
return MetricsCollector{
collectIntervalSeconds: collectIntervalSeconds,
ctx: context.Background(),
dslMetricsCollector: newDSLMetricsCollector(client, host, identifier),
}
}
func (c MetricsCollector) Collect() {
err := c.dslMetricsCollector.collect()
if err != nil {
logrus.Error(errors.Wrap(err, "error collecting dsl metrics"))
}
}
func (c MetricsCollector) Start() {
go func() {
for {
select {
case <-time.After(time.Second * time.Duration(c.collectIntervalSeconds)):
c.Collect()
case <-c.ctx.Done():
return
}
}
}()
}
func (c MetricsCollector) Stop() {
c.ctx.Done()
}