Files
coder/coderd/prometheusmetrics/metricalias.go
T
Paweł Banaszewski f1ce1013c4 chore: export AI Gateway metrics under new branding + keep old as alias (#26413)
> AI Tools where used in this request.

Registers `coder_aibridged_*` and `coder_aibridgeproxyd_*` metrics under
new prefixes: `coder_ai_gateway_*` and `coder_ai_gateway_proxy_*`.
Old prefix is still exported. Will be removed in later release.

Also updated the `metricsdocgen` static fixture. Added 4
previously-undocumented metrics `key_pool_state`,
`key_pool_state_transitions_total`, `key_pool_exhaustions_total`,
`key_pool_failover_attempts` added the `client` label to the existing
interception, prompt, and token counter samples.

Updated AI Gateway documentation.
2026-06-17 13:10:53 +02:00

53 lines
1.7 KiB
Go

package prometheusmetrics
import "github.com/prometheus/client_golang/prometheus"
// metricAliasRegisterer exposes each collector under multiple prefixes.
type metricAliasRegisterer struct {
registerers []prometheus.Registerer
}
// NewMetricAliasRegisterer exposes collectors under canonicalPrefix and each
// alias prefix. Every exported name reads from the same collector. Alias
// prefixes are typically deprecated names scheduled for removal; see each
// call site for the specific deprecation ticket.
func NewMetricAliasRegisterer(base prometheus.Registerer, canonicalPrefix string, aliasPrefixes ...string) prometheus.Registerer {
prefixes := append([]string{canonicalPrefix}, aliasPrefixes...)
registerers := make([]prometheus.Registerer, 0, len(prefixes))
for _, prefix := range prefixes {
registerers = append(registerers, prometheus.WrapRegistererWithPrefix(prefix, base))
}
return &metricAliasRegisterer{registerers: registerers}
}
// Register registers c under each prefix and rolls back on failure.
func (m *metricAliasRegisterer) Register(c prometheus.Collector) error {
for i, registerer := range m.registerers {
if err := registerer.Register(c); err != nil {
for _, registered := range m.registerers[:i] {
registered.Unregister(c)
}
return err
}
}
return nil
}
// MustRegister registers collectors and panics on the first failure.
func (m *metricAliasRegisterer) MustRegister(cs ...prometheus.Collector) {
for _, c := range cs {
if err := m.Register(c); err != nil {
panic(err)
}
}
}
// Unregister removes c from every prefix.
func (m *metricAliasRegisterer) Unregister(c prometheus.Collector) bool {
ok := true
for _, registerer := range m.registerers {
ok = registerer.Unregister(c) && ok
}
return ok
}