mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-19 20:32:35 +02:00
fix prometheus metrics gone after route changes
This commit is contained in:
parent
4ae3d5344c
commit
34858a1ba0
5 changed files with 24 additions and 8 deletions
|
@ -4,7 +4,6 @@ import (
|
|||
"sync/atomic"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/yusing/go-proxy/internal/common"
|
||||
"github.com/yusing/go-proxy/internal/docker/idlewatcher/types"
|
||||
E "github.com/yusing/go-proxy/internal/error"
|
||||
|
@ -86,7 +85,7 @@ func (w *Watcher) Start(routeSubTask *task.Task) E.Error {
|
|||
w.task.OnCancel("stop route and cleanup", func() {
|
||||
routeSubTask.Parent().Finish(w.task.FinishCause())
|
||||
if w.metric != nil {
|
||||
prometheus.Unregister(w.metric)
|
||||
w.metric.Reset()
|
||||
}
|
||||
})
|
||||
return nil
|
||||
|
|
|
@ -56,6 +56,14 @@ func (c *Counter) With(l Labels) *Counter {
|
|||
return &Counter{mv: c.mv, collector: c.mv.With(l.toPromLabels())}
|
||||
}
|
||||
|
||||
func (c *Counter) Delete(l Labels) {
|
||||
c.mv.Delete(l.toPromLabels())
|
||||
}
|
||||
|
||||
func (c *Counter) Reset() {
|
||||
c.mv.Reset()
|
||||
}
|
||||
|
||||
func (g *Gauge) Collect(ch chan<- prometheus.Metric) {
|
||||
g.mv.Collect(ch)
|
||||
}
|
||||
|
@ -71,3 +79,11 @@ func (g *Gauge) Set(v float64) {
|
|||
func (g *Gauge) With(l Labels) *Gauge {
|
||||
return &Gauge{mv: g.mv, collector: g.mv.With(l.toPromLabels())}
|
||||
}
|
||||
|
||||
func (g *Gauge) Delete(l Labels) {
|
||||
g.mv.Delete(l.toPromLabels())
|
||||
}
|
||||
|
||||
func (g *Gauge) Reset() {
|
||||
g.mv.Reset()
|
||||
}
|
||||
|
|
|
@ -43,10 +43,10 @@ func GetServiceMetrics() *ServiceMetrics {
|
|||
|
||||
func (rm *RouteMetrics) UnregisterService(service string) {
|
||||
lbls := &HTTPRouteMetricLabels{Service: service}
|
||||
prometheus.Unregister(rm.HTTP2xx3xx.With(lbls))
|
||||
prometheus.Unregister(rm.HTTP4xx.With(lbls))
|
||||
prometheus.Unregister(rm.HTTP5xx.With(lbls))
|
||||
prometheus.Unregister(rm.HTTPReqElapsed.With(lbls))
|
||||
rm.HTTP2xx3xx.Delete(lbls)
|
||||
rm.HTTP4xx.Delete(lbls)
|
||||
rm.HTTP5xx.Delete(lbls)
|
||||
rm.HTTPReqElapsed.Delete(lbls)
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
|
@ -86,6 +86,7 @@ func (r *HTTPRoute) Start(providerSubtask *task.Task) E.Error {
|
|||
wakerTask := providerSubtask.Parent().Subtask("waker for " + r.TargetName())
|
||||
waker, err := idlewatcher.NewHTTPWaker(wakerTask, r.ReverseProxyEntry, r.rp)
|
||||
if err != nil {
|
||||
r.task.Finish(err)
|
||||
return err
|
||||
}
|
||||
r.handler = waker
|
||||
|
@ -118,6 +119,7 @@ func (r *HTTPRoute) Start(providerSubtask *task.Task) E.Error {
|
|||
patErrs.Add(mux.HandleFunc(p, r.rp.HandlerFunc))
|
||||
}
|
||||
if err := patErrs.Error(); err != nil {
|
||||
r.task.Finish(err)
|
||||
return err
|
||||
}
|
||||
r.handler = mux
|
||||
|
|
|
@ -7,7 +7,6 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/prometheus/client_golang/prometheus"
|
||||
"github.com/yusing/go-proxy/internal/common"
|
||||
E "github.com/yusing/go-proxy/internal/error"
|
||||
"github.com/yusing/go-proxy/internal/logging"
|
||||
|
@ -82,7 +81,7 @@ func (mon *monitor) Start(routeSubtask *task.Task) E.Error {
|
|||
}
|
||||
mon.task.Finish(nil)
|
||||
if mon.metric != nil {
|
||||
prometheus.Unregister(mon.metric)
|
||||
mon.metric.Reset()
|
||||
}
|
||||
}()
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue