/
util.go
84 lines (69 loc) · 2.15 KB
/
util.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
/*
Copyright SecureKey Technologies Inc. All Rights Reserved.
SPDX-License-Identifier: Apache-2.0
*/
package util
import (
"regexp"
"strings"
kitstatsd "github.com/go-kit/kit/metrics/statsd"
"github.com/hyperledger/fabric-sdk-go/pkg/common/logging"
"github.com/hyperledger/fabric/common/metrics"
"github.com/hyperledger/fabric/common/metrics/disabled"
"github.com/hyperledger/fabric/common/metrics/prometheus"
"github.com/hyperledger/fabric/common/metrics/statsd"
"github.com/securekey/fabric-snaps/util/configcache"
"github.com/securekey/fabric-snaps/util/errors"
)
const (
peerConfigFileName = "core"
cmdRootPrefix = "core"
)
var reg = regexp.MustCompile("[^a-zA-Z0-9_]+")
var peerConfigCache = configcache.New(peerConfigFileName, cmdRootPrefix, "/etc/hyperledger/fabric")
var log = logging.NewLogger("metricsutil")
var provider metrics.Provider
//GetMetricsInstance return metrics instance
func GetMetricsInstance() metrics.Provider {
if provider == nil {
panic("provider instance is nil you need to call InitializeMetricsProvider first")
}
return provider
}
//FilterMetricName filter metric name
func FilterMetricName(name string) string {
return reg.ReplaceAllString(name, "_")
}
// InitializeMetricsProvider initialize metrics provider
func InitializeMetricsProvider(peerConfigPath string) error {
peerConfig, err := peerConfigCache.Get(peerConfigPath)
if err != nil {
return errors.WithMessage(errors.InitializeConfigError, err, "Failed to get peer config from cache")
}
providerType := peerConfig.Get("metrics.provider")
switch providerType {
case "statsd":
prefix := peerConfig.GetString("metrics.statsd.prefix")
if prefix != "" && !strings.HasSuffix(prefix, ".") {
prefix = prefix + "."
}
ks := kitstatsd.New(prefix, &logger{})
provider = &statsd.Provider{Statsd: ks}
return nil
case "prometheus":
provider = &prometheus.Provider{}
return nil
default:
if providerType != "disabled" {
log.Warnf("Unknown provider type: %s; metrics disabled", providerType)
}
provider = &disabled.Provider{}
return nil
}
}
type logger struct {
}
func (l *logger) Log(keyvals ...interface{}) error {
log.Warn(keyvals...)
return nil
}