Raw
 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}