in pkg/admin/services/prometheus_service_impl.go [122:214]
func (p *PrometheusServiceImpl) FlowMetrics() (model.FlowMetricsRes, error) {
res := model.FlowMetricsRes{
Data: make(map[string]float64),
}
ip := config.PrometheusIp
port := config.PrometheusPort
address := fmt.Sprintf("http://%s:%s", ip, port)
client, err := api.NewClient(api.Config{
Address: address,
})
if err != nil {
logger.Sugar().Errorf("Error creating client: %v\n", err)
return res, err
}
v1api := prom_v1.NewAPI(client)
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
// qps
vector1 := prometheus.FetchQuery(ctx, v1api, constant.MetricsQps, nil)
err = vector1.Err
qps := float64(0)
if err != nil {
logger.Sugar().Errorf("Error query qps: %v\n", err)
} else {
if vector1.Vector.Len() != 0 {
qps = float64(vector1.Vector[0].Value)
}
res.Data["qps"] = qps
}
// total count
vector3 := prometheus.FetchQuery(ctx, v1api, constant.MetricsHttpRequestTotalCount, nil)
total := float64(0)
if vector3.Err != nil {
logger.Sugar().Errorf("Error query total count: %v\n", err)
} else {
if vector3.Vector.Len() != 0 {
total = float64(vector3.Vector[0].Value)
}
res.Data["total"] = total
}
// success count
vector2 := prometheus.FetchQuery(ctx, v1api, constant.MetricsHttpRequestSuccessCount, nil)
success := float64(0)
if vector2.Err != nil {
logger.Sugar().Errorf("Error query success count: %v\n", err)
} else {
if vector2.Vector.Len() != 0 {
success = float64(vector2.Vector[0].Value)
}
res.Data["total"] = success
}
// timeout count
vector4 := prometheus.FetchQuery(ctx, v1api, constant.MetricsHttpRequestOutOfTimeCount, nil)
timeout := float64(0)
if vector4.Err != nil {
logger.Sugar().Errorf("Error query timeout count: %v\n", err)
} else {
if vector4.Vector.Len() != 0 {
timeout = float64(vector4.Vector[0].Value)
}
res.Data["timeout"] = timeout
}
// address not found count
vector5 := prometheus.FetchQuery(ctx, v1api, constant.MetricsHttpRequestAddressNotFount, nil)
addrNotFound := float64(0)
if vector5.Err != nil {
logger.Sugar().Errorf("Error query address not found count: %v\n", err)
} else {
if vector5.Vector.Len() != 0 {
addrNotFound = float64(vector5.Vector[0].Value)
}
res.Data["addressNotFound"] = addrNotFound
}
// other exceptions count
vector6 := prometheus.FetchQuery(ctx, v1api, constant.MetricsHttpRequestOtherException, nil)
others := float64(0)
if vector6.Err != nil {
logger.Sugar().Errorf("Error query othere exceptions count: %v\n", err)
} else {
if vector6.Vector.Len() != 0 {
others = float64(vector6.Vector[0].Value)
}
res.Data["others"] = others
}
return res, nil
}