service.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package metrics
  2. import (
  3. "context"
  4. "github.com/grafana/grafana/pkg/infra/log"
  5. "github.com/grafana/grafana/pkg/infra/metrics/graphitebridge"
  6. "github.com/grafana/grafana/pkg/registry"
  7. "github.com/grafana/grafana/pkg/setting"
  8. )
  9. var metricsLogger log.Logger = log.New("metrics")
  10. type logWrapper struct {
  11. logger log.Logger
  12. }
  13. func (lw *logWrapper) Println(v ...interface{}) {
  14. lw.logger.Info("graphite metric bridge", v...)
  15. }
  16. func init() {
  17. registry.RegisterService(&InternalMetricsService{})
  18. initMetricVars()
  19. }
  20. type InternalMetricsService struct {
  21. Cfg *setting.Cfg `inject:""`
  22. intervalSeconds int64
  23. graphiteCfg *graphitebridge.Config
  24. }
  25. func (im *InternalMetricsService) Init() error {
  26. return im.readSettings()
  27. }
  28. func (im *InternalMetricsService) Run(ctx context.Context) error {
  29. // Start Graphite Bridge
  30. if im.graphiteCfg != nil {
  31. bridge, err := graphitebridge.NewBridge(im.graphiteCfg)
  32. if err != nil {
  33. metricsLogger.Error("failed to create graphite bridge", "error", err)
  34. } else {
  35. go bridge.Run(ctx)
  36. }
  37. }
  38. MInstanceStart.Inc()
  39. <-ctx.Done()
  40. return ctx.Err()
  41. }