|
|
|
@ -18,6 +18,7 @@ import ( |
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend/log" |
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/backend/tracing" |
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/data" |
|
|
|
|
"github.com/grafana/grafana-plugin-sdk-go/experimental/errorsource" |
|
|
|
|
"go.opentelemetry.io/otel/attribute" |
|
|
|
|
"go.opentelemetry.io/otel/trace" |
|
|
|
|
) |
|
|
|
@ -28,15 +29,15 @@ func addInterval(period string, field *data.Field) error { |
|
|
|
|
if err != nil { |
|
|
|
|
return err |
|
|
|
|
} |
|
|
|
|
if err == nil { |
|
|
|
|
if field.Config != nil { |
|
|
|
|
field.Config.Interval = float64(p.Milliseconds()) |
|
|
|
|
} else { |
|
|
|
|
field.SetConfig(&data.FieldConfig{ |
|
|
|
|
Interval: float64(p.Milliseconds()), |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if field.Config != nil { |
|
|
|
|
field.Config.Interval = float64(p.Milliseconds()) |
|
|
|
|
} else { |
|
|
|
|
field.SetConfig(&data.FieldConfig{ |
|
|
|
|
Interval: float64(p.Milliseconds()), |
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -70,7 +71,7 @@ func createRequest(ctx context.Context, dsInfo *datasourceInfo, proxyPass string |
|
|
|
|
return req, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func doRequestPage(ctx context.Context, r *http.Request, dsInfo datasourceInfo, params url.Values, body map[string]any, logger log.Logger) (cloudMonitoringResponse, error) { |
|
|
|
|
func doRequestPage(_ context.Context, r *http.Request, dsInfo datasourceInfo, params url.Values, body map[string]any, logger log.Logger) (cloudMonitoringResponse, error) { |
|
|
|
|
if params != nil { |
|
|
|
|
r.URL.RawQuery = params.Encode() |
|
|
|
|
} |
|
|
|
@ -84,7 +85,7 @@ func doRequestPage(ctx context.Context, r *http.Request, dsInfo datasourceInfo, |
|
|
|
|
} |
|
|
|
|
res, err := dsInfo.services[cloudMonitor].client.Do(r) |
|
|
|
|
if err != nil { |
|
|
|
|
return cloudMonitoringResponse{}, err |
|
|
|
|
return cloudMonitoringResponse{}, errorsource.DownstreamError(err, false) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
defer func() { |
|
|
|
@ -124,7 +125,7 @@ func doRequestWithPagination(ctx context.Context, r *http.Request, dsInfo dataso |
|
|
|
|
return d, nil |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func traceReq(ctx context.Context, req *backend.QueryDataRequest, dsInfo datasourceInfo, r *http.Request, target string) trace.Span { |
|
|
|
|
func traceReq(ctx context.Context, req *backend.QueryDataRequest, dsInfo datasourceInfo, _ *http.Request, target string) trace.Span { |
|
|
|
|
_, span := tracing.DefaultTracer().Start(ctx, "cloudMonitoring query", trace.WithAttributes( |
|
|
|
|
attribute.String("target", target), |
|
|
|
|
attribute.String("from", req.Queries[0].TimeRange.From.String()), |
|
|
|
@ -141,8 +142,7 @@ func runTimeSeriesRequest(ctx context.Context, req *backend.QueryDataRequest, |
|
|
|
|
dr := &backend.DataResponse{} |
|
|
|
|
projectName, err := s.ensureProject(ctx, dsInfo, projectName) |
|
|
|
|
if err != nil { |
|
|
|
|
dr.Error = err |
|
|
|
|
return dr, cloudMonitoringResponse{}, "", nil |
|
|
|
|
return dr, cloudMonitoringResponse{}, "", err |
|
|
|
|
} |
|
|
|
|
timeSeriesMethod := "timeSeries" |
|
|
|
|
if body != nil { |
|
|
|
@ -150,8 +150,7 @@ func runTimeSeriesRequest(ctx context.Context, req *backend.QueryDataRequest, |
|
|
|
|
} |
|
|
|
|
r, err := createRequest(ctx, &dsInfo, path.Join("/v3/projects", projectName, timeSeriesMethod), nil) |
|
|
|
|
if err != nil { |
|
|
|
|
dr.Error = err |
|
|
|
|
return dr, cloudMonitoringResponse{}, "", nil |
|
|
|
|
return dr, cloudMonitoringResponse{}, "", err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
span := traceReq(ctx, req, dsInfo, r, params.Encode()) |
|
|
|
@ -159,8 +158,7 @@ func runTimeSeriesRequest(ctx context.Context, req *backend.QueryDataRequest, |
|
|
|
|
|
|
|
|
|
d, err := doRequestWithPagination(ctx, r, dsInfo, params, body, logger) |
|
|
|
|
if err != nil { |
|
|
|
|
dr.Error = err |
|
|
|
|
return dr, cloudMonitoringResponse{}, "", nil |
|
|
|
|
return dr, cloudMonitoringResponse{}, "", err |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return dr, d, r.URL.RawQuery, nil |
|
|
|
|