Files

57 lines
1.7 KiB
Go

package libprometheus
import (
"fmt"
prometheusreg "github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/prometheus/discovery/targetgroup"
"github.com/prometheus/prometheus/notifier"
"github.com/prometheus/prometheus/scrape"
"github.com/prometheus/prometheus/storage"
)
// ManagerSet bundles the Prometheus managers and initial target sets built
// from config.yaml.
type ManagerSet struct {
ScrapeManager *scrape.Manager
ScrapeTargetSets chan map[string][]*targetgroup.Group
NotifierManager *notifier.Manager
NotifierTargetSets chan map[string][]*targetgroup.Group
}
// BootstrapManagerSet writes config.yaml, loads it back, and builds the scrape
// and notifier managers from that file so config.yaml remains the single source
// of truth for runtime configuration.
func BootstrapManagerSet(
dataDir string,
options PrometheusConfigOptions,
appendable storage.Appendable,
reg prometheusreg.Registerer,
) (*ManagerSet, error) {
if err := WritePrometheusConfig(dataDir, options); err != nil {
return nil, fmt.Errorf("write prometheus config: %w", err)
}
cfg, err := LoadPrometheusConfig(dataDir)
if err != nil {
return nil, fmt.Errorf("load prometheus config: %w", err)
}
scrapeManager, scrapeTargetSets, err := NewScrapeManagerFromConfig(cfg, appendable, reg)
if err != nil {
return nil, fmt.Errorf("create scrape manager: %w", err)
}
notifierManager, notifierTargetSets, err := NewNotifierManagerFromConfig(cfg, reg)
if err != nil {
return nil, fmt.Errorf("create notifier manager: %w", err)
}
return &ManagerSet{
ScrapeManager: scrapeManager,
ScrapeTargetSets: scrapeTargetSets,
NotifierManager: notifierManager,
NotifierTargetSets: notifierTargetSets,
}, nil
}