mirror of
https://github.com/hanzo-fi/payments.git
synced 2026-10-30 20:31:20 +00:00
* Move models and other shareable code to pkg/domain and add own go.mod * Update all references to use pkg/domain paths * Fix generated file * Ensure pkg/domain tests are run by just tests * Use new models path in connector templates * Copy local pkg/domain in dockerfile * Ensure pkg/domain is subject to go generate
103 lines
2.4 KiB
Go
103 lines
2.4 KiB
Go
package metrics
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"go.opentelemetry.io/otel/metric"
|
|
"go.opentelemetry.io/otel/metric/noop"
|
|
)
|
|
|
|
var (
|
|
registry MetricsRegistry
|
|
registryMu sync.RWMutex
|
|
)
|
|
|
|
func GetMetricsRegistry() MetricsRegistry {
|
|
registryMu.RLock()
|
|
currentRegistry := registry
|
|
registryMu.RUnlock()
|
|
if currentRegistry != nil {
|
|
return currentRegistry
|
|
}
|
|
|
|
registryMu.Lock()
|
|
defer registryMu.Unlock()
|
|
if registry == nil {
|
|
registry = NewNoOpMetricsRegistry()
|
|
}
|
|
|
|
return registry
|
|
}
|
|
|
|
type MetricsRegistry interface {
|
|
ConnectorPSPCalls() metric.Int64Counter
|
|
ConnectorPSPCallLatencies() metric.Int64Histogram
|
|
}
|
|
|
|
type metricsRegistry struct {
|
|
connectorPSPCalls metric.Int64Counter
|
|
connectorPSPCallLatencies metric.Int64Histogram
|
|
}
|
|
|
|
func RegisterMetricsRegistry(meterProvider metric.MeterProvider) (MetricsRegistry, error) {
|
|
meter := meterProvider.Meter("payments")
|
|
|
|
connectorPSPCalls, err := meter.Int64Counter(
|
|
"payments_connectors_psp_calls",
|
|
metric.WithUnit("1"),
|
|
metric.WithDescription("payments connectors psp calls"),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
connectorPSPCallLatencies, err := meter.Int64Histogram(
|
|
"payments_connectors_psp_calls_latencies",
|
|
metric.WithUnit("ms"),
|
|
metric.WithDescription("payments connectors psp calls latencies"),
|
|
)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
currentRegistry := &metricsRegistry{
|
|
connectorPSPCalls: connectorPSPCalls,
|
|
connectorPSPCallLatencies: connectorPSPCallLatencies,
|
|
}
|
|
|
|
registryMu.Lock()
|
|
registry = currentRegistry
|
|
registryMu.Unlock()
|
|
|
|
return currentRegistry, nil
|
|
}
|
|
|
|
func (m *metricsRegistry) ConnectorPSPCalls() metric.Int64Counter {
|
|
return m.connectorPSPCalls
|
|
}
|
|
|
|
func (m *metricsRegistry) ConnectorPSPCallLatencies() metric.Int64Histogram {
|
|
return m.connectorPSPCallLatencies
|
|
}
|
|
|
|
type NoopMetricsRegistry struct{}
|
|
|
|
func NewNoOpMetricsRegistry() *NoopMetricsRegistry {
|
|
return &NoopMetricsRegistry{}
|
|
}
|
|
|
|
func (m *NoopMetricsRegistry) ConnectorPSPCalls() metric.Int64Counter {
|
|
counter, _ := noop.NewMeterProvider().Meter("payments").Int64Counter("payments_connectors_psp_calls")
|
|
return counter
|
|
}
|
|
|
|
func (m *NoopMetricsRegistry) ConnectorPSPCallLatencies() metric.Int64Histogram {
|
|
histogram, _ := noop.NewMeterProvider().Meter("payments").Int64Histogram("payments_connectors_psp_calls_latencies")
|
|
return histogram
|
|
}
|
|
|
|
var (
|
|
_ MetricsRegistry = (*metricsRegistry)(nil)
|
|
_ MetricsRegistry = (*NoopMetricsRegistry)(nil)
|
|
)
|