1package obs
2
3import (
4 "sync"
5 "time"
6
7 "github.com/prometheus/client_golang/prometheus"
8)
9
10func (r *Registry) AuthzOutcomes(outcomes []string) func(outcome string) {
11 c := r.Counter("tug_authz_outcomes_total", "Forward-auth decisions on /authz, by outcome.", Label{Name: "outcome", Values: outcomes})
12 return func(outcome string) { c.Inc(outcome) }
13}
14
15func (r *Registry) LDAPBinds(results []string) func(result string) {
16 c := r.Counter("tug_ldap_binds_total", "LDAP simple binds, by result.", Label{Name: "result", Values: results})
17 refused := r.refused([]string{axisUsername, routeLDAPBind}, []string{axisAddress, routeLDAPBind})
18 return func(result string) {
19 c.Inc(result)
20 switch result {
21 case resultLocked:
22 refused.Inc(axisUsername, routeLDAPBind)
23 case resultLimited:
24 refused.Inc(axisAddress, routeLDAPBind)
25 }
26 }
27}
28
29func (r *Registry) UserbaseLastPush() func(at time.Time) {
30 if r == nil {
31 return func(time.Time) {}
32 }
33 desc := prometheus.NewDesc("tug_userbase_last_push_timestamp_seconds", "When the userbase replicator last pushed an export to its repository, in Unix seconds.", nil, nil)
34 var mu sync.Mutex
35 var last time.Time
36 r.reg.MustRegister(readCollector{descs: []*prometheus.Desc{desc}, collect: func(ch chan<- prometheus.Metric) {
37 mu.Lock()
38 at := last
39 mu.Unlock()
40 if !at.IsZero() {
41 ch <- prometheus.MustNewConstMetric(desc, prometheus.GaugeValue, float64(at.UnixNano())/1e9)
42 }
43 }})
44 return func(at time.Time) {
45 mu.Lock()
46 defer mu.Unlock()
47 last = at
48 }
49}