mirror of https://github.com/grafana/grafana
Metrics package now follows new service interface & registration (#11787)
* refactoring: metrics package now follows new service interface & registration * fix: minor fix, make sure metrics service is imported, by grafana-serverpull/11804/head
parent
04d071aaa3
commit
14bb7832af
@ -1,38 +0,0 @@ |
||||
package metrics |
||||
|
||||
import ( |
||||
"context" |
||||
|
||||
ini "gopkg.in/ini.v1" |
||||
|
||||
"github.com/grafana/grafana/pkg/log" |
||||
"github.com/grafana/grafana/pkg/metrics/graphitebridge" |
||||
) |
||||
|
||||
var metricsLogger log.Logger = log.New("metrics") |
||||
|
||||
type logWrapper struct { |
||||
logger log.Logger |
||||
} |
||||
|
||||
func (lw *logWrapper) Println(v ...interface{}) { |
||||
lw.logger.Info("graphite metric bridge", v...) |
||||
} |
||||
|
||||
func Init(file *ini.File) { |
||||
cfg := ReadSettings(file) |
||||
internalInit(cfg) |
||||
} |
||||
|
||||
func internalInit(settings *MetricSettings) { |
||||
initMetricVars(settings) |
||||
|
||||
if settings.GraphiteBridgeConfig != nil { |
||||
bridge, err := graphitebridge.NewBridge(settings.GraphiteBridgeConfig) |
||||
if err != nil { |
||||
metricsLogger.Error("failed to create graphite bridge", "error", err) |
||||
} else { |
||||
go bridge.Run(context.Background()) |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,71 @@ |
||||
package metrics |
||||
|
||||
import ( |
||||
"context" |
||||
"time" |
||||
|
||||
"github.com/grafana/grafana/pkg/log" |
||||
"github.com/grafana/grafana/pkg/metrics/graphitebridge" |
||||
"github.com/grafana/grafana/pkg/registry" |
||||
"github.com/grafana/grafana/pkg/setting" |
||||
) |
||||
|
||||
var metricsLogger log.Logger = log.New("metrics") |
||||
|
||||
type logWrapper struct { |
||||
logger log.Logger |
||||
} |
||||
|
||||
func (lw *logWrapper) Println(v ...interface{}) { |
||||
lw.logger.Info("graphite metric bridge", v...) |
||||
} |
||||
|
||||
func init() { |
||||
registry.RegisterService(&InternalMetricsService{}) |
||||
initMetricVars() |
||||
} |
||||
|
||||
type InternalMetricsService struct { |
||||
Cfg *setting.Cfg `inject:""` |
||||
|
||||
enabled bool |
||||
intervalSeconds int64 |
||||
graphiteCfg *graphitebridge.Config |
||||
} |
||||
|
||||
func (im *InternalMetricsService) Init() error { |
||||
return im.readSettings() |
||||
} |
||||
|
||||
func (im *InternalMetricsService) Run(ctx context.Context) error { |
||||
// Start Graphite Bridge
|
||||
if im.graphiteCfg != nil { |
||||
bridge, err := graphitebridge.NewBridge(im.graphiteCfg) |
||||
if err != nil { |
||||
metricsLogger.Error("failed to create graphite bridge", "error", err) |
||||
} else { |
||||
go bridge.Run(ctx) |
||||
} |
||||
} |
||||
|
||||
M_Instance_Start.Inc() |
||||
|
||||
// set the total stats gauges before we publishing metrics
|
||||
updateTotalStats() |
||||
|
||||
onceEveryDayTick := time.NewTicker(time.Hour * 24) |
||||
everyMinuteTicker := time.NewTicker(time.Minute) |
||||
defer onceEveryDayTick.Stop() |
||||
defer everyMinuteTicker.Stop() |
||||
|
||||
for { |
||||
select { |
||||
case <-onceEveryDayTick.C: |
||||
sendUsageStats() |
||||
case <-everyMinuteTicker.C: |
||||
updateTotalStats() |
||||
case <-ctx.Done(): |
||||
return ctx.Err() |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue