service.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package usagestats
  2. import (
  3. "context"
  4. "time"
  5. "github.com/grafana/grafana/pkg/bus"
  6. "github.com/grafana/grafana/pkg/login/social"
  7. "github.com/grafana/grafana/pkg/services/sqlstore"
  8. "github.com/grafana/grafana/pkg/infra/log"
  9. "github.com/grafana/grafana/pkg/registry"
  10. "github.com/grafana/grafana/pkg/setting"
  11. )
  12. var metricsLogger log.Logger = log.New("metrics")
  13. func init() {
  14. registry.RegisterService(&UsageStatsService{})
  15. }
  16. type UsageStatsService struct {
  17. Cfg *setting.Cfg `inject:""`
  18. Bus bus.Bus `inject:""`
  19. SQLStore *sqlstore.SqlStore `inject:""`
  20. oauthProviders map[string]bool
  21. }
  22. func (uss *UsageStatsService) Init() error {
  23. uss.oauthProviders = social.GetOAuthProviders(uss.Cfg)
  24. return nil
  25. }
  26. func (uss *UsageStatsService) Run(ctx context.Context) error {
  27. uss.updateTotalStats()
  28. onceEveryDayTick := time.NewTicker(time.Hour * 24)
  29. everyMinuteTicker := time.NewTicker(time.Minute)
  30. defer onceEveryDayTick.Stop()
  31. defer everyMinuteTicker.Stop()
  32. for {
  33. select {
  34. case <-onceEveryDayTick.C:
  35. uss.sendUsageStats(uss.oauthProviders)
  36. case <-everyMinuteTicker.C:
  37. uss.updateTotalStats()
  38. case <-ctx.Done():
  39. return ctx.Err()
  40. }
  41. }
  42. }