mirror of
https://github.com/Chipazawra/v8-1c-cluster-pde.git
synced 2025-03-17 20:57:44 +02:00
81 lines
1.5 KiB
Go
81 lines
1.5 KiB
Go
package pusher
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
"github.com/prometheus/client_golang/prometheus/push"
|
|
)
|
|
|
|
var (
|
|
defaultIntervalMillis int = 500
|
|
defaultJobname string = "v8-1C-cluster-pde"
|
|
)
|
|
|
|
type Pusher struct {
|
|
intervalMillis int
|
|
collector prometheus.Collector
|
|
url string
|
|
jobName string
|
|
pusher *push.Pusher
|
|
}
|
|
|
|
type PusherOption func(*Pusher)
|
|
|
|
func WithInterval(millis int) PusherOption {
|
|
return func(p *Pusher) {
|
|
p.intervalMillis = millis
|
|
}
|
|
}
|
|
|
|
func WithJobName(Name string) PusherOption {
|
|
return func(p *Pusher) {
|
|
p.jobName = Name
|
|
}
|
|
}
|
|
|
|
func WithConfig(config PusherConfig) PusherOption {
|
|
return func(p *Pusher) {
|
|
p.url = fmt.Sprintf("%s:%s", config.PUSH_HOST, config.PUSH_PORT)
|
|
p.intervalMillis = config.PUSH_INTERVAL
|
|
}
|
|
}
|
|
|
|
func New(collector prometheus.Collector, opts ...PusherOption) *Pusher {
|
|
|
|
p := &Pusher{
|
|
collector: collector,
|
|
jobName: defaultJobname,
|
|
}
|
|
|
|
for _, opt := range opts {
|
|
opt(p)
|
|
}
|
|
|
|
p.pusher = push.New(p.url, p.jobName).Collector(collector)
|
|
|
|
return p
|
|
}
|
|
|
|
func (p *Pusher) Run(ctx context.Context, errchan chan<- error) {
|
|
log.Printf("v8-1c-cluster-pde: pusher %v", p.url)
|
|
ticker := time.NewTicker(time.Duration(p.intervalMillis * int(time.Microsecond)))
|
|
Loop:
|
|
for {
|
|
select {
|
|
case <-ticker.C:
|
|
err := p.pusher.Push()
|
|
if err != nil {
|
|
errchan <- fmt.Errorf("puser: %v", err)
|
|
break Loop
|
|
}
|
|
case <-ctx.Done():
|
|
log.Println("INFO: pusher context done")
|
|
break Loop
|
|
}
|
|
}
|
|
}
|