diff --git a/pkg/infra/metrics/metrics.go b/pkg/infra/metrics/metrics.go index 8c44d8e4665..e5f3f138e8e 100644 --- a/pkg/infra/metrics/metrics.go +++ b/pkg/infra/metrics/metrics.go @@ -200,6 +200,8 @@ var ( grafanaPluginBuildInfoDesc *prometheus.GaugeVec + grafanaPluginTargetInfoDesc *prometheus.GaugeVec + // StatsTotalLibraryPanels is a metric of total number of library panels stored in Grafana. StatsTotalLibraryPanels prometheus.Gauge @@ -570,6 +572,12 @@ func init() { Namespace: ExporterName, }, []string{"plugin_id", "plugin_type", "version", "signature_status"}) + grafanaPluginTargetInfoDesc = prometheus.NewGaugeVec(prometheus.GaugeOpts{ + Name: "plugin_target_info", + Help: "A metric with a constant '1' value labeled by pluginId and target", + Namespace: ExporterName, + }, []string{"plugin_id", "target"}) + StatsTotalDashboardVersions = prometheus.NewGauge(prometheus.GaugeOpts{ Name: "stat_totals_dashboard_versions", Help: "total amount of dashboard versions in the database", @@ -710,6 +718,10 @@ func SetPluginBuildInformation(pluginID, pluginType, version, signatureStatus st grafanaPluginBuildInfoDesc.WithLabelValues(pluginID, pluginType, version, signatureStatus).Set(1) } +func SetPluginTargetInformation(pluginID, target string) { + grafanaPluginTargetInfoDesc.WithLabelValues(pluginID, target).Set(1) +} + func initMetricVars(reg prometheus.Registerer) { reg.MustRegister( MInstanceStart, @@ -764,6 +776,7 @@ func initMetricVars(reg prometheus.Registerer) { StatsTotalActiveAdmins, StatsTotalDataSources, grafanaPluginBuildInfoDesc, + grafanaPluginTargetInfoDesc, StatsTotalDashboardVersions, StatsTotalAnnotations, StatsTotalAlertRules, diff --git a/pkg/plugins/manager/fakes/fakes.go b/pkg/plugins/manager/fakes/fakes.go index f25daddc504..8120b460b79 100644 --- a/pkg/plugins/manager/fakes/fakes.go +++ b/pkg/plugins/manager/fakes/fakes.go @@ -127,6 +127,10 @@ func (pc *FakePluginClient) IsDecommissioned() bool { return pc.decommissioned } +func (pc *FakePluginClient) Target() backendplugin.Target { + return "test-target" +} + func (pc *FakePluginClient) CollectMetrics(ctx context.Context, req *backend.CollectMetricsRequest) (*backend.CollectMetricsResult, error) { if pc.CollectMetricsHandlerFunc != nil { return pc.CollectMetricsHandlerFunc(ctx, req) @@ -646,3 +650,7 @@ func (p *FakeBackendPlugin) Kill() { defer p.mutex.Unlock() p.Running = false } + +func (p *FakeBackendPlugin) Target() backendplugin.Target { + return "test-target" +} diff --git a/pkg/services/pluginsintegration/pipeline/pipeline.go b/pkg/services/pluginsintegration/pipeline/pipeline.go index a590d8c810a..458e02694bd 100644 --- a/pkg/services/pluginsintegration/pipeline/pipeline.go +++ b/pkg/services/pluginsintegration/pipeline/pipeline.go @@ -73,6 +73,7 @@ func ProvideInitializationStage(cfg *config.PluginManagementCfg, pr registry.Ser RegisterPluginRolesStep(roleRegistry), RegisterActionSetsStep(actionSetRegistry), ReportBuildMetrics, + ReportTargetMetrics, initialization.PluginRegistrationStep(pr), }, }) diff --git a/pkg/services/pluginsintegration/pipeline/steps.go b/pkg/services/pluginsintegration/pipeline/steps.go index 7fa3281c22f..def45c2fa33 100644 --- a/pkg/services/pluginsintegration/pipeline/steps.go +++ b/pkg/services/pluginsintegration/pipeline/steps.go @@ -127,6 +127,16 @@ func ReportBuildMetrics(_ context.Context, p *plugins.Plugin) (*plugins.Plugin, if !p.IsCorePlugin() && !p.IsBundledPlugin() { metrics.SetPluginBuildInformation(p.ID, string(p.Type), p.Info.Version, string(p.Signature)) } + + return p, nil +} + +// ReportTargetMetrics reports target information for all backend plugins. +func ReportTargetMetrics(_ context.Context, p *plugins.Plugin) (*plugins.Plugin, error) { + if p.Backend { + metrics.SetPluginTargetInformation(p.ID, string(p.Target())) + } + return p, nil }