func InitMetrics()

in vermeer/apps/common/metrics.go [78:168]


func InitMetrics(engine *gin.Engine, serviceName string) {
	reqCnt := prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Subsystem: serviceName,
			Name:      "requests_total",
			Help:      "How many HTTP requests processed, partitioned by status code and HTTP method.",
		},
		[]string{"code", "method", "host", "url"})
	reqDur := prometheus.NewSummaryVec(
		prometheus.SummaryOpts{
			Subsystem:  serviceName,
			Name:       "request_duration_ms",
			Help:       "The HTTP request latencies in ms.",
			Objectives: map[float64]float64{0.9: 0, 0.95: 0, 0.99: 0},
			MaxAge:     10 * time.Second,
			AgeBuckets: 3,
		},
		[]string{"code", "method", "host", "url"})
	slowReqCnt := prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Subsystem: serviceName,
			Name:      "requests_slow",
			Help:      "How many HTTP requests longer than xx ms.",
		},
		[]string{"host", "url", "level"})
	taskCnt := prometheus.NewCounterVec(
		prometheus.CounterOpts{
			Subsystem: serviceName,
			Name:      "task_count_total",
			Help:      "How many tasks created, partitioned by task type.",
		},
		[]string{"task_type"})
	taskRunningCnt := prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Subsystem: serviceName,
			Name:      "task_running_total",
			Help:      "How many tasks is running, partitioned by task type.",
		},
		[]string{"task_type"})
	graphCnt := prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Subsystem: serviceName,
			Name:      "graph_total",
			Help:      "How many graphs is created",
		},
		[]string{})
	graphLoadedCnt := prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Subsystem: serviceName,
			Name:      "graph_loaded_total",
			Help:      "How many graphs is loaded",
		},
		[]string{})
	workerCnt := prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Subsystem: serviceName,
			Name:      "worker_count",
			Help:      "How many workers is available",
		},
		[]string{})
	vertexCnt := prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Subsystem: serviceName,
			Name:      "vertex_count",
			Help:      "How many vertices in graphs, partitioned by graph name.",
		},
		[]string{"graph_name"})
	edgeCnt := prometheus.NewGaugeVec(
		prometheus.GaugeOpts{
			Subsystem: serviceName,
			Name:      "edge_count",
			Help:      "How many edges in graphs, partitioned by graph name.",
		},
		[]string{"graph_name"})
	PrometheusMetrics = MozartPrometheus{
		serviceName:    serviceName,
		reqCnt:         reqCnt,
		reqDur:         reqDur,
		slowReqCnt:     slowReqCnt,
		TaskCnt:        taskCnt,
		TaskRunningCnt: taskRunningCnt,
		GraphCnt:       graphCnt,
		GraphLoadedCnt: graphLoadedCnt,
		WorkerCnt:      workerCnt,
		VertexCnt:      vertexCnt,
		EdgeCnt:        edgeCnt,
	}
	PrometheusMetrics.register()
	engine.Use(PrometheusMetrics.HandleFunc())
	engine.GET("/metrics", gin.WrapH(promhttp.Handler()))
}