From 6008296fb7ba45700fe7377925074332763cdb83 Mon Sep 17 00:00:00 2001 From: Adam Simpson Date: Wed, 10 May 2023 15:08:46 -0400 Subject: [PATCH] Google Cloud Monitor: send ServerTiming and metricDescriptors (#67873) * CloudMonitor: send ServerTiming and metricDescriptors * fix lint --- pkg/tsdb/cloudmonitoring/resource_handler.go | 10 ++++++++++ .../components/VisualMetricQueryEditor.tsx | 4 ++++ 2 files changed, 14 insertions(+) diff --git a/pkg/tsdb/cloudmonitoring/resource_handler.go b/pkg/tsdb/cloudmonitoring/resource_handler.go index 0066e27c1d5..be591685775 100644 --- a/pkg/tsdb/cloudmonitoring/resource_handler.go +++ b/pkg/tsdb/cloudmonitoring/resource_handler.go @@ -10,7 +10,9 @@ import ( "net/http" "net/url" "regexp" + "strconv" "strings" + "time" "github.com/andybalholm/brotli" "github.com/grafana/grafana-plugin-sdk-go/backend/resource/httpadapter" @@ -304,7 +306,11 @@ func doRequest(req *http.Request, cli *http.Client, responseFn processResponse) } func getResponses(req *http.Request, cli *http.Client, responseFn processResponse) ([]json.RawMessage, http.Header, string, int, error) { + timings := "" + start := time.Now() result := doRequest(req, cli, responseFn) + elapsed := time.Since(start) + timings = timings + " " + strconv.FormatFloat(elapsed.Seconds(), 'f', 10, 64) if result.err != nil { return nil, nil, "", result.code, result.err } @@ -312,17 +318,21 @@ func getResponses(req *http.Request, cli *http.Client, responseFn processRespons token := result.token responses := result.responses for token != "" { + start = time.Now() query := req.URL.Query() query.Set("pageToken", token) req.URL.RawQuery = query.Encode() loopResult := doRequest(req, cli, responseFn) + elapsed = time.Since(start) + timings = timings + " " + strconv.FormatFloat(elapsed.Seconds(), 'f', 10, 64) if loopResult.err != nil { return nil, nil, "", loopResult.code, loopResult.err } responses = append(responses, loopResult.responses...) token = loopResult.token } + result.header.Set("Server-Timing", fmt.Sprintf("doRequest;dur=%v", timings)) return responses, result.header, result.encoding, result.code, nil } diff --git a/public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx b/public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx index dd96bc0a0cb..10b6990ba42 100644 --- a/public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx +++ b/public/app/plugins/datasource/cloud-monitoring/components/VisualMetricQueryEditor.tsx @@ -5,6 +5,7 @@ import React, { useCallback, useEffect, useState } from 'react'; import { GrafanaTheme2, SelectableValue, TimeRange } from '@grafana/data'; import { EditorField, EditorFieldGroup, EditorRow } from '@grafana/experimental'; +import { reportInteraction } from '@grafana/runtime'; import { getSelectStyles, Select, AsyncSelect, useStyles2, useTheme2 } from '@grafana/ui'; import CloudMonitoringDatasource from '../datasource'; @@ -88,6 +89,9 @@ export function Editor({ const loadMetricDescriptors = async () => { if (projectName) { const metricDescriptors = await datasource.getMetricTypes(projectName); + reportInteraction('cloud-monitoring-metric-descriptors-loaded', { + count: metricDescriptors.length, + }); const services = getServicesList(metricDescriptors); setMetricDescriptors(metricDescriptors); setServices(services);