Plugins: Add metric for tracking plugin asset info (#112322)

* add metric for tracking plugin asset info

* make check more specific

* check host instead
This commit is contained in:
Will Browne
2025-10-13 14:42:32 +01:00
committed by GitHub
parent 8cb3d3b552
commit e109763f21
3 changed files with 32 additions and 0 deletions
+13
View File
@@ -204,6 +204,8 @@ var (
grafanaPluginFileSystemInfoDesc *prometheus.GaugeVec
grafanaPluginAssetInfoDesc *prometheus.GaugeVec
grafanaPluginProvisioningInfoDesc *prometheus.GaugeVec
// StatsTotalLibraryPanels is a metric of total number of library panels stored in Grafana.
@@ -588,6 +590,12 @@ func init() {
Namespace: ExporterName,
}, []string{"plugin_id", "filesystem_type"})
grafanaPluginAssetInfoDesc = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: "plugin_asset_info",
Help: "A metric with a constant '1' value labeled by pluginId and asset source",
Namespace: ExporterName,
}, []string{"plugin_id", "asset_source"})
grafanaPluginProvisioningInfoDesc = prometheus.NewGaugeVec(prometheus.GaugeOpts{
Name: "plugin_provisioning_info",
Help: "A metric with a constant '1' value labeled by pluginId and cloud provisioning method",
@@ -742,6 +750,10 @@ func SetPluginFSInformation(pluginID, fsType string) {
grafanaPluginFileSystemInfoDesc.WithLabelValues(pluginID, fsType).Set(1)
}
func SetPluginAssetInformation(pluginID, assetSrc string) {
grafanaPluginAssetInfoDesc.WithLabelValues(pluginID, assetSrc).Set(1)
}
func SetPluginProvisioningInformation(pluginID, provisioningMethod string) {
grafanaPluginProvisioningInfoDesc.WithLabelValues(pluginID, provisioningMethod).Set(1)
}
@@ -802,6 +814,7 @@ func initMetricVars(reg prometheus.Registerer) {
grafanaPluginBuildInfoDesc,
grafanaPluginTargetInfoDesc,
grafanaPluginFileSystemInfoDesc,
grafanaPluginAssetInfoDesc,
grafanaPluginProvisioningInfoDesc,
StatsTotalDashboardVersions,
StatsTotalAnnotations,
@@ -81,6 +81,7 @@ func ProvideInitializationStage(cfg *config.PluginManagementCfg, pr registry.Ser
ReportBuildMetrics,
ReportTargetMetrics,
ReportFSMetrics,
ReportAssetMetrics,
ReportCloudProvisioningMetrics(provisionedPluginsManager),
initialization.PluginRegistrationStep(pr),
},
@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
"net/url"
"slices"
"go.opentelemetry.io/otel/attribute"
@@ -152,6 +153,23 @@ func ReportFSMetrics(_ context.Context, p *plugins.Plugin) (*plugins.Plugin, err
return p, nil
}
// ReportAssetMetrics reports plugin asset information for all non-core plugins.
func ReportAssetMetrics(_ context.Context, p *plugins.Plugin) (*plugins.Plugin, error) {
if p.IsCorePlugin() {
// No metrics for core plugins
return p, nil
}
u, err := url.ParseRequestURI(p.BaseURL)
if err == nil && u.Host != "" {
metrics.SetPluginAssetInformation(p.ID, "remote")
return p, nil
}
metrics.SetPluginAssetInformation(p.ID, "local")
return p, nil
}
// ReportCloudProvisioningMetrics reports plugin cloud provisioning information for all non-core plugins.
func ReportCloudProvisioningMetrics(ppManaged provisionedplugins.Manager) initialization.InitializeFunc {
cloudProvisioningMethod := plugins.CloudProvisioningMethodNone