1
// Copyright (c) 2016-2019 Uber Technologies, Inc.
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
7
// http://www.apache.org/licenses/LICENSE-2.0
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
23
"github.com/uber/kraken/utils/log"
25
"github.com/uber-go/tally"
29
register("statsd", newStatsdScope)
30
register("disabled", newDisabledScope)
31
register("m3", newM3Scope)
34
var _scopeFactories = make(map[string]scopeFactory)
36
type scopeFactory func(config Config, cluster string) (tally.Scope, io.Closer, error)
38
func register(name string, f scopeFactory) {
39
if _, ok := _scopeFactories[name]; ok {
40
log.Fatalf("Metrics reporter factory %q is already registered", name)
42
_scopeFactories[name] = f
45
// New creates a new metrics Scope from config. If no backend is configured, metrics
47
func New(config Config, cluster string) (tally.Scope, io.Closer, error) {
48
if config.Backend == "" {
49
config.Backend = "disabled"
51
f, ok := _scopeFactories[config.Backend]
53
return nil, nil, fmt.Errorf("metrics backend %q not registered", config.Backend)
55
return f(config, cluster)
58
// EmitVersion periodically emits the current GIT_DESCRIBE as a metric.
59
func EmitVersion(stats tally.Scope) {
60
counter, err := getVersionCounter(stats)
62
log.Warnf("Skipping version emitting: %s", err)
66
time.Sleep(time.Minute)
71
func getVersionCounter(stats tally.Scope) (tally.Counter, error) {
72
version := os.Getenv("GIT_DESCRIBE")
74
return nil, errors.New("no GIT_DESCRIBE env variable found")
76
hostname, err := os.Hostname()
78
return nil, fmt.Errorf("hostname: %s", err)
80
return stats.Tagged(map[string]string{
83
}).Counter("version"), nil