From 48ff532ca84ece677dc700961658d3f196de9b28 Mon Sep 17 00:00:00 2001 From: Gabriel MABILLE Date: Mon, 15 Jan 2024 17:56:01 +0100 Subject: [PATCH] RBAC: Add histogram metric on search endpoint (#80553) RBAC: Add histogram on search endpoint --- pkg/infra/metrics/metrics.go | 10 ++++++++++ pkg/services/accesscontrol/acimpl/service.go | 3 +++ 2 files changed, 13 insertions(+) diff --git a/pkg/infra/metrics/metrics.go b/pkg/infra/metrics/metrics.go index 4ed18149f8b..a938f59aefc 100644 --- a/pkg/infra/metrics/metrics.go +++ b/pkg/infra/metrics/metrics.go @@ -128,6 +128,9 @@ var ( // MAccessPermissionsSummary is a metric summary for loading permissions request duration when evaluating access MAccessPermissionsSummary prometheus.Histogram + // MSearchPermissionsSummary is a metric summary for searching permissions request duration + MAccessSearchPermissionsSummary prometheus.Histogram + // MAccessEvaluationsSummary is a metric summary for loading permissions request duration when evaluating access MAccessEvaluationsSummary prometheus.Histogram ) @@ -581,6 +584,12 @@ func init() { Namespace: ExporterName, }) + MAccessSearchPermissionsSummary = prometheus.NewHistogram(prometheus.HistogramOpts{ + Name: "access_search_permissions_duration", + Help: "Histogram for the runtime of permissions search function", + Buckets: prometheus.ExponentialBuckets(0.001, 4, 5), + }) + StatsTotalLibraryPanels = prometheus.NewGauge(prometheus.GaugeOpts{ Name: "stat_totals_library_panels", Help: "total amount of library panels in the database", @@ -698,6 +707,7 @@ func initMetricVars(reg prometheus.Registerer) { MRenderingQueue, MAccessPermissionsSummary, MAccessEvaluationsSummary, + MAccessSearchPermissionsSummary, MAlertingActiveAlerts, MStatTotalDashboards, MStatTotalFolders, diff --git a/pkg/services/accesscontrol/acimpl/service.go b/pkg/services/accesscontrol/acimpl/service.go index fa6471a8ca8..eb43561cdb7 100644 --- a/pkg/services/accesscontrol/acimpl/service.go +++ b/pkg/services/accesscontrol/acimpl/service.go @@ -242,6 +242,9 @@ func (s *Service) DeclarePluginRoles(ctx context.Context, ID, name string, regs // SearchUsersPermissions returns all users' permissions filtered by action prefixes func (s *Service) SearchUsersPermissions(ctx context.Context, user identity.Requester, options accesscontrol.SearchOptions) (map[int64][]accesscontrol.Permission, error) { + timer := prometheus.NewTimer(metrics.MAccessSearchPermissionsSummary) + defer timer.ObserveDuration() + // Filter ram permissions basicPermissions := map[string][]accesscontrol.Permission{} for role, basicRole := range s.roles {