func()

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")

}