mirror of
https://github.com/coder/coder.git
synced 2025-07-06 15:41:45 +00:00
54 lines
1.6 KiB
Go
54 lines
1.6 KiB
Go
package license
|
|
|
|
import (
|
|
"sync/atomic"
|
|
|
|
"github.com/prometheus/client_golang/prometheus"
|
|
|
|
"github.com/coder/coder/v2/codersdk"
|
|
)
|
|
|
|
var (
|
|
activeUsersDesc = prometheus.NewDesc("coderd_license_active_users", "The number of active users.", nil, nil)
|
|
limitUsersDesc = prometheus.NewDesc("coderd_license_limit_users", "The user seats limit based on the active Coder license.", nil, nil)
|
|
userLimitEnabledDesc = prometheus.NewDesc("coderd_license_user_limit_enabled", "Returns 1 if the current license enforces the user limit.", nil, nil)
|
|
)
|
|
|
|
type MetricsCollector struct {
|
|
Entitlements atomic.Pointer[codersdk.Entitlements]
|
|
}
|
|
|
|
var _ prometheus.Collector = new(MetricsCollector)
|
|
|
|
func (*MetricsCollector) Describe(descCh chan<- *prometheus.Desc) {
|
|
descCh <- activeUsersDesc
|
|
descCh <- limitUsersDesc
|
|
descCh <- userLimitEnabledDesc
|
|
}
|
|
|
|
func (mc *MetricsCollector) Collect(metricsCh chan<- prometheus.Metric) {
|
|
entitlements := mc.Entitlements.Load()
|
|
if entitlements == nil || entitlements.Features == nil {
|
|
return
|
|
}
|
|
|
|
userLimitEntitlement, ok := entitlements.Features[codersdk.FeatureUserLimit]
|
|
if !ok {
|
|
return
|
|
}
|
|
|
|
var enabled float64
|
|
if userLimitEntitlement.Enabled {
|
|
enabled = 1
|
|
}
|
|
metricsCh <- prometheus.MustNewConstMetric(userLimitEnabledDesc, prometheus.GaugeValue, enabled)
|
|
|
|
if userLimitEntitlement.Actual != nil {
|
|
metricsCh <- prometheus.MustNewConstMetric(activeUsersDesc, prometheus.GaugeValue, float64(*userLimitEntitlement.Actual))
|
|
}
|
|
|
|
if userLimitEntitlement.Limit != nil {
|
|
metricsCh <- prometheus.MustNewConstMetric(limitUsersDesc, prometheus.GaugeValue, float64(*userLimitEntitlement.Limit))
|
|
}
|
|
}
|