func()

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
}