package api import ( "math/rand" "strconv" "github.com/grafana/grafana/pkg/api/dtos" "github.com/grafana/grafana/pkg/metrics" "github.com/grafana/grafana/pkg/middleware" ) func GetTestMetrics(c *middleware.Context) { from := c.QueryInt64("from") to := c.QueryInt64("to") maxDataPoints := c.QueryInt64("maxDataPoints") stepInSeconds := (to - from) / maxDataPoints result := dtos.MetricQueryResultDto{} result.Data = make([]dtos.MetricQueryResultDataDto, 1) for seriesIndex := range result.Data { points := make([][2]float64, maxDataPoints) walker := rand.Float64() * 100 time := from for i := range points { points[i][0] = walker points[i][1] = float64(time) walker += rand.Float64() - 0.5 time += stepInSeconds } result.Data[seriesIndex].Target = "test-series-" + strconv.Itoa(seriesIndex) result.Data[seriesIndex].DataPoints = points } c.JSON(200, &result) } func GetInternalMetrics(c middleware.Context) Response { snapshots := metrics.MetricStats.GetSnapshots() resp := make(map[string]interface{}) for _, m := range snapshots { metricName := m.Name() + m.StringifyTags() switch metric := m.(type) { case metrics.Counter: resp[metricName] = map[string]interface{}{ "count": metric.Count(), } case metrics.Timer: percentiles := metric.Percentiles([]float64{0.25, 0.75, 0.90, 0.99}) resp[metricName] = map[string]interface{}{ "count": metric.Count(), "min": metric.Min(), "max": metric.Max(), "mean": metric.Mean(), "std": metric.StdDev(), "p25": percentiles[0], "p75": percentiles[1], "p90": percentiles[2], "p99": percentiles[3], } } } return Json(200, resp) }