This repository has been archived by the owner on Dec 1, 2021. It is now read-only.
/
metric_forwarder.go
60 lines (49 loc) · 1.77 KB
/
metric_forwarder.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
package forwarder
import (
"code.cloudfoundry.org/app-autoscaler/src/autoscaler/helpers"
"code.cloudfoundry.org/app-autoscaler/src/autoscaler/metricsforwarder/config"
"code.cloudfoundry.org/app-autoscaler/src/autoscaler/models"
"code.cloudfoundry.org/go-loggregator/v8"
"code.cloudfoundry.org/lager"
)
type MetricForwarder interface {
EmitMetric(*models.CustomMetric)
}
type metricForwarder struct {
client *loggregator.IngressClient
logger lager.Logger
}
const METRICS_FORWARDER_ORIGIN = "autoscaler_metrics_forwarder"
func NewMetricForwarder(logger lager.Logger, conf *config.Config) (MetricForwarder, error) {
tlsConfig, err := loggregator.NewIngressTLSConfig(
conf.LoggregatorConfig.TLS.CACertFile,
conf.LoggregatorConfig.TLS.CertFile,
conf.LoggregatorConfig.TLS.KeyFile,
)
if err != nil {
logger.Error("could-not-create-TLS-config", err, lager.Data{"config": conf})
return &metricForwarder{}, err
}
client, err := loggregator.NewIngressClient(
tlsConfig,
loggregator.WithAddr(conf.LoggregatorConfig.MetronAddress),
loggregator.WithTag("origin", METRICS_FORWARDER_ORIGIN),
loggregator.WithLogger(helpers.NewLoggregatorGRPCLogger(logger.Session("metric_forwarder"))),
)
if err != nil {
logger.Error("could-not-create-loggregator-client", err, lager.Data{"config": conf})
return &metricForwarder{}, err
}
return &metricForwarder{
client: client,
logger: logger,
}, nil
}
func (mf *metricForwarder) EmitMetric(metric *models.CustomMetric) {
mf.logger.Debug("custom-metric-emit-request-received:", lager.Data{"metric": metric})
options := []loggregator.EmitGaugeOption{
loggregator.WithGaugeAppInfo(metric.AppGUID, int(metric.InstanceIndex)),
loggregator.WithGaugeValue(metric.Name, metric.Value, metric.Unit),
}
mf.client.EmitGauge(options...)
}