diff --git a/lib/interface.go b/lib/interface.go index 9061ab0..e891ead 100644 --- a/lib/interface.go +++ b/lib/interface.go @@ -41,7 +41,7 @@ func (state *State) ChallengeFailed(r *http.Request, reg *challenge.Registration } logger.Warn("challenge failed", "challenge", reg.Name, "err", err, "redirect", redirect) - state.metrics.Challenge(reg.Name, "fail") + metrics.Challenge(reg.Name, "fail") } func (state *State) ChallengePassed(r *http.Request, reg *challenge.Registration, redirect string, logger *slog.Logger) { @@ -50,7 +50,7 @@ func (state *State) ChallengePassed(r *http.Request, reg *challenge.Registration } logger.Warn("challenge passed", "challenge", reg.Name, "redirect", redirect) - state.metrics.Challenge(reg.Name, "pass") + metrics.Challenge(reg.Name, "pass") } func (state *State) ChallengeIssued(r *http.Request, reg *challenge.Registration, redirect string, logger *slog.Logger) { @@ -59,23 +59,23 @@ func (state *State) ChallengeIssued(r *http.Request, reg *challenge.Registration } logger.Info("challenge issued", "challenge", reg.Name, "redirect", redirect) - state.metrics.Challenge(reg.Name, "issue") + metrics.Challenge(reg.Name, "issue") } func (state *State) ChallengeChecked(r *http.Request, reg *challenge.Registration, redirect string, logger *slog.Logger) { - state.metrics.Challenge(reg.Name, "check") + metrics.Challenge(reg.Name, "check") } func (state *State) RuleHit(r *http.Request, name string, logger *slog.Logger) { - state.metrics.Rule(name, "hit") + metrics.Rule(name, "hit") } func (state *State) RuleMiss(r *http.Request, name string, logger *slog.Logger) { - state.metrics.Rule(name, "miss") + metrics.Rule(name, "miss") } func (state *State) ActionHit(r *http.Request, name policy.RuleAction, logger *slog.Logger) { - state.metrics.Action(name) + metrics.Action(name) } func (state *State) Logger(r *http.Request) *slog.Logger { diff --git a/lib/metrics.go b/lib/metrics.go index 02c1b1c..0897e6f 100644 --- a/lib/metrics.go +++ b/lib/metrics.go @@ -40,3 +40,11 @@ func (metrics *stateMetrics) Action(action policy.RuleAction) { func (metrics *stateMetrics) Challenge(name, result string) { metrics.challenges.With(prometheus.Labels{"challenge": name, "action": result}).Inc() } + +func (metrics *stateMetrics) Reset() { + metrics.rules.Reset() + metrics.actions.Reset() + metrics.challenges.Reset() +} + +var metrics = newMetrics() diff --git a/lib/state.go b/lib/state.go index 2a1ae65..99678ca 100644 --- a/lib/state.go +++ b/lib/state.go @@ -44,8 +44,6 @@ type State struct { close chan struct{} Mux *http.ServeMux - - metrics *stateMetrics } func NewState(p policy.Policy, opt settings.Settings, settings policy.StateSettings) (handler http.Handler, err error) { @@ -53,7 +51,7 @@ func NewState(p policy.Policy, opt settings.Settings, settings policy.StateSetti state.close = make(chan struct{}) state.settings = settings state.opt = opt - state.metrics = newMetrics() + metrics.Reset() state.client = &http.Client{ CheckRedirect: func(req *http.Request, via []*http.Request) error { return http.ErrUseLastResponse