@@ -91,7 +91,13 @@ func newHandlerWrapper(
9191 },
9292 metricLabels ,
9393 )
94- registerer .MustRegister (requestsTotal )
94+ if err := registerer .Register (requestsTotal ); err != nil {
95+ if are , ok := err .(prometheus.AlreadyRegisteredError ); ok {
96+ requestsTotal = are .ExistingCollector .(* prometheus.CounterVec )
97+ } else {
98+ panic (err )
99+ }
100+ }
95101
96102 requestDuration := prometheus .NewHistogramVec (
97103 prometheus.HistogramOpts {
@@ -102,7 +108,13 @@ func newHandlerWrapper(
102108 },
103109 metricLabels ,
104110 )
105- registerer .MustRegister (requestDuration )
111+ if err := registerer .Register (requestDuration ); err != nil {
112+ if are , ok := err .(prometheus.AlreadyRegisteredError ); ok {
113+ requestDuration = are .ExistingCollector .(* prometheus.HistogramVec )
114+ } else {
115+ panic (err )
116+ }
117+ }
106118
107119 requestSize := prometheus .NewHistogramVec (
108120 prometheus.HistogramOpts {
@@ -113,7 +125,13 @@ func newHandlerWrapper(
113125 },
114126 metricLabels ,
115127 )
116- registerer .MustRegister (requestSize )
128+ if err := registerer .Register (requestSize ); err != nil {
129+ if are , ok := err .(prometheus.AlreadyRegisteredError ); ok {
130+ requestSize = are .ExistingCollector .(* prometheus.HistogramVec )
131+ } else {
132+ panic (err )
133+ }
134+ }
117135
118136 responseSize := prometheus .NewHistogramVec (
119137 prometheus.HistogramOpts {
@@ -124,7 +142,13 @@ func newHandlerWrapper(
124142 },
125143 metricLabels ,
126144 )
127- registerer .MustRegister (responseSize )
145+ if err := registerer .Register (responseSize ); err != nil {
146+ if are , ok := err .(prometheus.AlreadyRegisteredError ); ok {
147+ responseSize = are .ExistingCollector .(* prometheus.HistogramVec )
148+ } else {
149+ panic (err )
150+ }
151+ }
128152
129153 return & handlerWrapper {
130154 next : next ,
0 commit comments