Provisioning: Add metrics around webhooks (#111453)

This commit is contained in:
Stephanie Hingtgen
2025-09-22 16:53:50 -05:00
committed by GitHub
parent 8b1caccc72
commit 63e1d52663
9 changed files with 196 additions and 18 deletions
@@ -6,6 +6,7 @@ import (
"net/url"
"path"
"strings"
"time"
"github.com/grafana/grafana-app-sdk/logging"
dashboard "github.com/grafana/grafana/apps/dashboard/pkg/apis/dashboard/v1beta1"
@@ -15,6 +16,8 @@ import (
"github.com/grafana/grafana/pkg/infra/slugify"
"github.com/grafana/grafana/pkg/registry/apis/provisioning/jobs"
"github.com/grafana/grafana/pkg/registry/apis/provisioning/resources"
"github.com/grafana/grafana/pkg/registry/apis/provisioning/utils"
"github.com/prometheus/client_golang/prometheus"
)
type changeInfo struct {
@@ -53,13 +56,16 @@ type evaluator struct {
render ScreenshotRenderer
parsers resources.ParserFactory
urlProvider func(namespace string) string
metrics screenshotMetrics
}
func NewEvaluator(render ScreenshotRenderer, parsers resources.ParserFactory, urlProvider func(namespace string) string) Evaluator {
func NewEvaluator(render ScreenshotRenderer, parsers resources.ParserFactory, urlProvider func(namespace string) string, registry prometheus.Registerer) Evaluator {
metrics := registerScreenshotMetrics(registry)
return &evaluator{
render: render,
parsers: parsers,
urlProvider: urlProvider,
metrics: metrics,
}
}
@@ -152,14 +158,14 @@ func (e *evaluator) evaluateFile(ctx context.Context, repo repository.Reader, ba
info.PreviewURL += "?" + query.Encode()
if shouldRender {
if info.GrafanaURL != "" {
info.GrafanaScreenshotURL, err = renderScreenshotFromGrafanaURL(ctx, baseURL, e.render, info.Parsed.Repo, info.GrafanaURL)
info.GrafanaScreenshotURL, err = renderScreenshotFromGrafanaURL(ctx, baseURL, e.render, info.Parsed.Repo, info.GrafanaURL, e.metrics)
if err != nil {
info.Error = err.Error()
}
}
if info.PreviewURL != "" {
info.PreviewScreenshotURL, err = renderScreenshotFromGrafanaURL(ctx, baseURL, e.render, info.Parsed.Repo, info.PreviewURL)
info.PreviewScreenshotURL, err = renderScreenshotFromGrafanaURL(ctx, baseURL, e.render, info.Parsed.Repo, info.PreviewURL, e.metrics)
if err != nil {
info.Error = err.Error()
}
@@ -175,7 +181,13 @@ func renderScreenshotFromGrafanaURL(ctx context.Context,
renderer ScreenshotRenderer,
repo provisioning.ResourceRepositoryInfo,
grafanaURL string,
metrics screenshotMetrics,
) (string, error) {
outcome := utils.ErrorOutcome
duration := time.Now()
defer func() {
metrics.recordScreenshotDuration(outcome, time.Since(duration))
}()
parsed, err := url.Parse(grafanaURL)
if err != nil {
logging.FromContext(ctx).Warn("invalid", "url", grafanaURL, "err", err)
@@ -194,5 +206,6 @@ func renderScreenshotFromGrafanaURL(ctx context.Context,
logger.Warn("invalid base", "url", baseURL, "err", err)
return "", err
}
outcome = utils.SuccessOutcome
return base.JoinPath(snap).String(), nil
}