49 lines
1.5 KiB
Go
49 lines
1.5 KiB
Go
package metrics
|
|
|
|
import (
|
|
"cybertron/models/instrumentation"
|
|
"strconv"
|
|
)
|
|
|
|
type Publisher interface {
|
|
PublishMetrics(metricAttributes map[string]interface{}, metricType instrumentation.MetricType)
|
|
}
|
|
|
|
type PublisherImpl struct {
|
|
}
|
|
|
|
func NewMetricPublisher() *PublisherImpl {
|
|
return &PublisherImpl{}
|
|
}
|
|
|
|
func (amp *PublisherImpl) PublishMetrics(metricAttributes instrumentation.MetricAttributes, metricType instrumentation.MetricType) {
|
|
switch metricType {
|
|
case instrumentation.API_METRICS:
|
|
publishApiMetric(metricAttributes.ApiMetric)
|
|
return
|
|
case instrumentation.CLIENT_HTTP_CALL_METRICS:
|
|
publishClientHttpCallMetric(metricAttributes.ClientHttpCallMetric)
|
|
return
|
|
default:
|
|
return
|
|
}
|
|
}
|
|
|
|
func publishApiMetric(apiMetrics instrumentation.ApiMetric) {
|
|
status := strconv.Itoa(apiMetrics.ResponseCode)
|
|
duration := float64(apiMetrics.DurationInMs)
|
|
ApiRequestCounter.WithLabelValues(apiMetrics.Url, status).Inc()
|
|
ApiRequestLatencyHistogram.WithLabelValues(apiMetrics.Url, status).Observe(duration)
|
|
}
|
|
|
|
func PublishErrorConsumptionMetric(errorConsumptionMetrics instrumentation.ErrorConsumptionMetric) {
|
|
ErrorConsumerCounter.WithLabelValues(errorConsumptionMetrics.ProjectId).Inc()
|
|
}
|
|
|
|
func publishClientHttpCallMetric(clientHttpCallMetric instrumentation.ClientHttpCallMetric) {
|
|
status := strconv.Itoa(clientHttpCallMetric.ResponseCode)
|
|
duration := float64(clientHttpCallMetric.DurationInMs)
|
|
HttpCallRequestCounter.WithLabelValues(clientHttpCallMetric.Url, status).Inc()
|
|
HttpCallRequestLatencyHistogram.WithLabelValues(clientHttpCallMetric.Url, status).Observe(duration)
|
|
}
|