mirror of
https://github.com/yusing/godoxy.git
synced 2025-07-21 20:04:03 +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"
|
"sync/atomic"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
|
||||||
"github.com/yusing/go-proxy/internal/common"
|
"github.com/yusing/go-proxy/internal/common"
|
||||||
"github.com/yusing/go-proxy/internal/docker/idlewatcher/types"
|
"github.com/yusing/go-proxy/internal/docker/idlewatcher/types"
|
||||||
E "github.com/yusing/go-proxy/internal/error"
|
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() {
|
w.task.OnCancel("stop route and cleanup", func() {
|
||||||
routeSubTask.Parent().Finish(w.task.FinishCause())
|
routeSubTask.Parent().Finish(w.task.FinishCause())
|
||||||
if w.metric != nil {
|
if w.metric != nil {
|
||||||
prometheus.Unregister(w.metric)
|
w.metric.Reset()
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
return nil
|
return nil
|
||||||
|
|
|
@ -56,6 +56,14 @@ func (c *Counter) With(l Labels) *Counter {
|
||||||
return &Counter{mv: c.mv, collector: c.mv.With(l.toPromLabels())}
|
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) {
|
func (g *Gauge) Collect(ch chan<- prometheus.Metric) {
|
||||||
g.mv.Collect(ch)
|
g.mv.Collect(ch)
|
||||||
}
|
}
|
||||||
|
@ -71,3 +79,11 @@ func (g *Gauge) Set(v float64) {
|
||||||
func (g *Gauge) With(l Labels) *Gauge {
|
func (g *Gauge) With(l Labels) *Gauge {
|
||||||
return &Gauge{mv: g.mv, collector: g.mv.With(l.toPromLabels())}
|
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) {
|
func (rm *RouteMetrics) UnregisterService(service string) {
|
||||||
lbls := &HTTPRouteMetricLabels{Service: service}
|
lbls := &HTTPRouteMetricLabels{Service: service}
|
||||||
prometheus.Unregister(rm.HTTP2xx3xx.With(lbls))
|
rm.HTTP2xx3xx.Delete(lbls)
|
||||||
prometheus.Unregister(rm.HTTP4xx.With(lbls))
|
rm.HTTP4xx.Delete(lbls)
|
||||||
prometheus.Unregister(rm.HTTP5xx.With(lbls))
|
rm.HTTP5xx.Delete(lbls)
|
||||||
prometheus.Unregister(rm.HTTPReqElapsed.With(lbls))
|
rm.HTTPReqElapsed.Delete(lbls)
|
||||||
}
|
}
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
|
|
|
@ -86,6 +86,7 @@ func (r *HTTPRoute) Start(providerSubtask *task.Task) E.Error {
|
||||||
wakerTask := providerSubtask.Parent().Subtask("waker for " + r.TargetName())
|
wakerTask := providerSubtask.Parent().Subtask("waker for " + r.TargetName())
|
||||||
waker, err := idlewatcher.NewHTTPWaker(wakerTask, r.ReverseProxyEntry, r.rp)
|
waker, err := idlewatcher.NewHTTPWaker(wakerTask, r.ReverseProxyEntry, r.rp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
r.task.Finish(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r.handler = waker
|
r.handler = waker
|
||||||
|
@ -118,6 +119,7 @@ func (r *HTTPRoute) Start(providerSubtask *task.Task) E.Error {
|
||||||
patErrs.Add(mux.HandleFunc(p, r.rp.HandlerFunc))
|
patErrs.Add(mux.HandleFunc(p, r.rp.HandlerFunc))
|
||||||
}
|
}
|
||||||
if err := patErrs.Error(); err != nil {
|
if err := patErrs.Error(); err != nil {
|
||||||
|
r.task.Finish(err)
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r.handler = mux
|
r.handler = mux
|
||||||
|
|
|
@ -7,7 +7,6 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/prometheus/client_golang/prometheus"
|
|
||||||
"github.com/yusing/go-proxy/internal/common"
|
"github.com/yusing/go-proxy/internal/common"
|
||||||
E "github.com/yusing/go-proxy/internal/error"
|
E "github.com/yusing/go-proxy/internal/error"
|
||||||
"github.com/yusing/go-proxy/internal/logging"
|
"github.com/yusing/go-proxy/internal/logging"
|
||||||
|
@ -82,7 +81,7 @@ func (mon *monitor) Start(routeSubtask *task.Task) E.Error {
|
||||||
}
|
}
|
||||||
mon.task.Finish(nil)
|
mon.task.Finish(nil)
|
||||||
if mon.metric != nil {
|
if mon.metric != nil {
|
||||||
prometheus.Unregister(mon.metric)
|
mon.metric.Reset()
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue