Plugins: Add metrics for fs + cloud provisioning info (#111030)
* add new metrics for plugin fs + cloud provisioning * fix test * update label
This commit is contained in:
@@ -20,6 +20,7 @@ import (
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/registry"
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/signature"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/provisionedplugins"
|
||||
)
|
||||
|
||||
func ProvideDiscoveryStage(cfg *config.PluginManagementCfg, pr registry.Service) *discovery.Discovery {
|
||||
@@ -67,10 +68,9 @@ func ProvideValidationStage(cfg *config.PluginManagementCfg, sv signature.Valida
|
||||
|
||||
func ProvideInitializationStage(cfg *config.PluginManagementCfg, pr registry.Service, bp plugins.BackendFactoryProvider,
|
||||
pm process.Manager, externalServiceRegistry auth.ExternalServiceRegistry,
|
||||
roleRegistry pluginaccesscontrol.RoleRegistry,
|
||||
actionSetRegistry pluginaccesscontrol.ActionSetRegistry,
|
||||
pluginEnvProvider envvars.Provider,
|
||||
tracer tracing.Tracer) *initialization.Initialize {
|
||||
roleRegistry pluginaccesscontrol.RoleRegistry, actionSetRegistry pluginaccesscontrol.ActionSetRegistry,
|
||||
pluginEnvProvider envvars.Provider, tracer tracing.Tracer, provisionedPluginsManager provisionedplugins.Manager,
|
||||
) *initialization.Initialize {
|
||||
return initialization.New(cfg, initialization.Opts{
|
||||
InitializeFuncs: []initialization.InitializeFunc{
|
||||
ExternalServiceRegistrationStep(cfg, externalServiceRegistry, tracer),
|
||||
@@ -80,6 +80,8 @@ func ProvideInitializationStage(cfg *config.PluginManagementCfg, pr registry.Ser
|
||||
RegisterActionSetsStep(actionSetRegistry),
|
||||
ReportBuildMetrics,
|
||||
ReportTargetMetrics,
|
||||
ReportFSMetrics,
|
||||
ReportCloudProvisioningMetrics(provisionedPluginsManager),
|
||||
initialization.PluginRegistrationStep(pr),
|
||||
},
|
||||
})
|
||||
|
||||
@@ -9,6 +9,7 @@ import (
|
||||
"go.opentelemetry.io/otel/attribute"
|
||||
"go.opentelemetry.io/otel/codes"
|
||||
|
||||
"github.com/grafana/grafana/pkg/cmd/grafana-cli/logger"
|
||||
"github.com/grafana/grafana/pkg/infra/metrics"
|
||||
"github.com/grafana/grafana/pkg/infra/tracing"
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
@@ -20,6 +21,7 @@ import (
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/registry"
|
||||
"github.com/grafana/grafana/pkg/plugins/manager/signature"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/pluginaccesscontrol"
|
||||
"github.com/grafana/grafana/pkg/services/pluginsintegration/provisionedplugins"
|
||||
)
|
||||
|
||||
// ExternalServiceRegistration implements an InitializeFunc for registering external services.
|
||||
@@ -139,6 +141,48 @@ func ReportTargetMetrics(_ context.Context, p *plugins.Plugin) (*plugins.Plugin,
|
||||
return p, nil
|
||||
}
|
||||
|
||||
// ReportFSMetrics reports plugin filesystem information for all non-core plugins.
|
||||
func ReportFSMetrics(_ context.Context, p *plugins.Plugin) (*plugins.Plugin, error) {
|
||||
if p.IsCorePlugin() {
|
||||
// No metrics for core plugins
|
||||
return p, nil
|
||||
}
|
||||
|
||||
metrics.SetPluginFSInformation(p.ID, p.FS.Type())
|
||||
return p, nil
|
||||
}
|
||||
|
||||
// ReportCloudProvisioningMetrics reports plugin cloud provisioning information for all non-core plugins.
|
||||
func ReportCloudProvisioningMetrics(ppManaged provisionedplugins.Manager) initialization.InitializeFunc {
|
||||
cloudProvisioningMethod := plugins.CloudProvisioningMethodNone
|
||||
pps, err := ppManaged.ProvisionedPlugins(context.Background())
|
||||
if err != nil {
|
||||
cloudProvisioningMethod = plugins.CloudProvisioningMethodUnknown
|
||||
logger.Warn("Failed to get provisioned plugins", "error", err)
|
||||
}
|
||||
|
||||
return func(ctx context.Context, p *plugins.Plugin) (*plugins.Plugin, error) {
|
||||
if p.IsCorePlugin() {
|
||||
// No metrics for core plugins
|
||||
return p, nil
|
||||
}
|
||||
|
||||
for _, pp := range pps {
|
||||
if pp.ID != p.ID {
|
||||
continue
|
||||
}
|
||||
if pp.URL == "" {
|
||||
cloudProvisioningMethod = plugins.CloudProvisioningMethodCatalog
|
||||
} else {
|
||||
cloudProvisioningMethod = plugins.CloudProvisioningMethodURL
|
||||
}
|
||||
metrics.SetPluginProvisioningInformation(p.ID, string(cloudProvisioningMethod))
|
||||
}
|
||||
|
||||
return p, nil
|
||||
}
|
||||
}
|
||||
|
||||
// SignatureValidation implements a ValidateFunc for validating plugin signatures.
|
||||
type SignatureValidation struct {
|
||||
signatureValidator signature.Validator
|
||||
|
||||
Reference in New Issue
Block a user