mirror of
https://github.com/pomerium/pomerium.git
synced 2025-04-29 18:36:30 +02:00
* zero: refactor controller * refactor zero telemetry and controller * wire with connect handler * cr
47 lines
1.2 KiB
Go
47 lines
1.2 KiB
Go
package sessions
|
|
|
|
import (
|
|
"context"
|
|
|
|
"go.opentelemetry.io/otel/metric"
|
|
|
|
"github.com/pomerium/pomerium/internal/log"
|
|
"github.com/pomerium/pomerium/pkg/grpc/databroker"
|
|
)
|
|
|
|
// Metrics returns a list of metrics to be exported
|
|
func Metrics(
|
|
clientProvider func() databroker.DataBrokerServiceClient,
|
|
) []func(m metric.Meter) error {
|
|
return []func(m metric.Meter) error{
|
|
registerMetric("dau", clientProvider),
|
|
registerMetric("mau", clientProvider),
|
|
}
|
|
}
|
|
|
|
func registerMetric(
|
|
id string,
|
|
clientProvider func() databroker.DataBrokerServiceClient,
|
|
) func(m metric.Meter) error {
|
|
return func(m metric.Meter) error {
|
|
_, err := m.Int64ObservableGauge(id,
|
|
metric.WithInt64Callback(metricCallback(id, clientProvider)),
|
|
)
|
|
return err
|
|
}
|
|
}
|
|
|
|
func metricCallback(
|
|
id string,
|
|
clientProvider func() databroker.DataBrokerServiceClient,
|
|
) metric.Int64Callback {
|
|
return func(ctx context.Context, result metric.Int64Observer) error {
|
|
state, err := LoadMetricState(ctx, clientProvider(), id)
|
|
if err != nil {
|
|
log.Ctx(ctx).Error().Err(err).Str("metric", id).Msg("error loading metric state")
|
|
return nil // returning an error would block export of other metrics according to SDK design
|
|
}
|
|
result.Observe(int64(state.Count))
|
|
return nil
|
|
}
|
|
}
|