Skip to content

Commit af70ea5

Browse files
committed
Fix panic when start more than one httpserver
Signed-off-by: Bryan Frimin <bryan@getprobo.com>
1 parent 45b4f69 commit af70ea5

1 file changed

Lines changed: 28 additions & 4 deletions

File tree

httpserver/handler_wrapper.go

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)