in sample-apps/prometheus-sample-app/metrics/metrics_cli.go [64:122]
func (conf *Config) initConnection() {
rand.Seed(time.Now().Unix())
mc := newMetricCollector()
mc.interval = time.Duration(conf.Frequency) * time.Second
mc.labelValues, mc.labelKeys = generateLabels(conf.LabelsCount)
mc.datapointCount = conf.DataPointCount
switch conf.Type {
case "counter":
createCounter(conf.MetricsCount, mc)
case "gauge":
createGauge(conf.MetricsCount, mc)
case "histogram":
createHistogram(conf.MetricsCount, mc)
case "summary":
createSummary(conf.MetricsCount, mc)
case "all":
createAll(conf.MetricsCount, mc, conf.Random)
default:
log.Fatal("Invalid type")
}
log.Print("Server Started")
log.Println("Serving on address: " + conf.Address)
if conf.Random {
log.Println("Producing randomized metrics per type")
} else {
log.Println("Producing " + fmt.Sprintf("%d", conf.MetricsCount) + " metric(s) per type")
}
// Server handling
srv := &http.Server{
Addr: conf.Address,
Handler: nil,
}
done := make(chan os.Signal, 1)
signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
go func() {
if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatalf("listen: %s\n", err)
}
}()
log.Println("Updating at a frequency of "+fmt.Sprintf("%d", mc.interval/time.Second), "seconds")
http.HandleFunc("/", healthCheckHandler)
http.Handle("/metrics", promhttp.HandlerFor(promRegistry, promhttp.HandlerOpts{}))
<-done
log.Print("Server Stopped")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer func() {
cancel()
}()
if err := srv.Shutdown(ctx); err != nil {
log.Fatalf("Server Shutdown Failed:%+v", err)
}
log.Print("Server Exited")
}