mirror of
https://github.com/pomerium/pomerium.git
synced 2025-08-03 16:59:22 +02:00
zero/telemetry: collect limited core metrics (#5142)
This commit is contained in:
parent
71cda4628d
commit
8d206e0087
6 changed files with 102 additions and 14 deletions
56
internal/zero/telemetry/opencensus/opencensus.go
Normal file
56
internal/zero/telemetry/opencensus/opencensus.go
Normal file
|
@ -0,0 +1,56 @@
|
|||
// Package opencensus is a provider of opencensus based telemetry metrics to the zero telemetry system.
|
||||
package opencensus
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync/atomic"
|
||||
|
||||
"go.opentelemetry.io/otel/bridge/opencensus"
|
||||
"go.opentelemetry.io/otel/sdk/metric"
|
||||
"go.opentelemetry.io/otel/sdk/metric/metricdata"
|
||||
|
||||
"github.com/pomerium/pomerium/internal/sets"
|
||||
)
|
||||
|
||||
type Producer struct {
|
||||
producer metric.Producer
|
||||
filter atomic.Pointer[sets.Hash[string]]
|
||||
}
|
||||
|
||||
var _ metric.Producer = (*Producer)(nil)
|
||||
|
||||
func New() *Producer {
|
||||
p := &Producer{
|
||||
producer: opencensus.NewMetricProducer(),
|
||||
}
|
||||
p.SetFilter(nil)
|
||||
return p
|
||||
}
|
||||
|
||||
func (p *Producer) Produce(ctx context.Context) ([]metricdata.ScopeMetrics, error) {
|
||||
filter := p.filter.Load()
|
||||
metrics, err := p.producer.Produce(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
var out []metricdata.ScopeMetrics
|
||||
for _, sm := range metrics {
|
||||
var m []metricdata.Metrics
|
||||
for _, metric := range sm.Metrics {
|
||||
if filter.Has(metric.Name) {
|
||||
m = append(m, metric)
|
||||
}
|
||||
}
|
||||
if len(m) > 0 {
|
||||
out = append(out, metricdata.ScopeMetrics{
|
||||
Scope: sm.Scope,
|
||||
Metrics: m,
|
||||
})
|
||||
}
|
||||
}
|
||||
return out, nil
|
||||
}
|
||||
|
||||
func (p *Producer) SetFilter(names []string) {
|
||||
p.filter.Store(sets.NewHash(names...))
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue