Files
CrimsonandGitHub 538a2d0de2 chore: Refactor models and other shareable packages into importable pkg (#762)
* 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
2026-06-23 13:08:32 +00:00

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)
)