UsageStats: track enabled features (#47407)

* #47127: include enabled features in the usage stats reports

* #47127: convert feature names to snake cased metric names

* #47127: remove dead code

* #47127: lint fix

* #47127: convert GetUsageStats to return `map[string]interface{}`

* #47127: fix testssssssss

* #47127: fix testssssssss
This commit is contained in:
Artur Wierzbicki
2022-04-08 12:42:33 +02:00
committed by GitHub
parent 416da59c43
commit f1a1070d41
6 changed files with 192 additions and 1 deletions

View File

@@ -11,6 +11,7 @@ import (
"github.com/grafana/grafana/pkg/infra/usagestats"
"github.com/grafana/grafana/pkg/login/social"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/sqlstore"
"github.com/grafana/grafana/pkg/setting"
)
@@ -22,6 +23,7 @@ type UsageStats struct {
SocialService social.Service
kvStore *kvstore.NamespacedKVStore
RouteRegister routing.RouteRegister
features *featuremgmt.FeatureManager
log log.Logger
@@ -33,11 +35,12 @@ type UsageStats struct {
}
func ProvideService(cfg *setting.Cfg, sqlStore *sqlstore.SQLStore, pluginStore plugins.Store,
socialService social.Service, kvStore kvstore.KVStore, routeRegister routing.RouteRegister,
socialService social.Service, kvStore kvstore.KVStore, routeRegister routing.RouteRegister, features *featuremgmt.FeatureManager,
) *UsageStats {
s := &UsageStats{
Cfg: cfg,
SQLStore: sqlStore,
features: features,
oauthProviders: socialService.GetOAuthProviders(),
RouteRegister: routeRegister,
pluginStore: pluginStore,

View File

@@ -230,6 +230,11 @@ func (uss *UsageStats) GetUsageReport(ctx context.Context) (usagestats.Report, e
metrics["stats.uptime"] = int64(time.Since(uss.startTime).Seconds())
featureUsageStats := uss.features.GetUsageStats(ctx)
for name, val := range featureUsageStats {
metrics[name] = val
}
return report, nil
}

View File

@@ -18,6 +18,7 @@ import (
"github.com/grafana/grafana/pkg/infra/usagestats"
"github.com/grafana/grafana/pkg/models"
"github.com/grafana/grafana/pkg/plugins"
"github.com/grafana/grafana/pkg/services/featuremgmt"
"github.com/grafana/grafana/pkg/services/sqlstore"
"github.com/grafana/grafana/pkg/services/sqlstore/mockstore"
"github.com/grafana/grafana/pkg/setting"
@@ -405,6 +406,14 @@ func TestMetrics(t *testing.T) {
metric := report.Metrics[metricName]
assert.Equal(t, 1, metric)
})
t.Run("Should include feature usage stats", func(t *testing.T) {
report, err := uss.GetUsageReport(context.Background())
require.NoError(t, err, "Expected no error")
assert.Equal(t, 1, report.Metrics["stats.features.feature_1.count"])
assert.Equal(t, 1, report.Metrics["stats.features.feature_2.count"])
})
})
t.Run("When registering external metrics", func(t *testing.T) {
@@ -511,5 +520,6 @@ func createService(t *testing.T, cfg setting.Cfg, sqlStore sqlstore.Store, withD
log: log.New("infra.usagestats"),
startTime: time.Now().Add(-1 * time.Minute),
RouteRegister: routing.NewRouteRegister(),
features: featuremgmt.WithFeatures("feature1", "feature2"),
}
}