Optimize query for updating metricURLsTotalGauge

This commit is contained in:
Daan Sprenkels 2021-05-16 20:40:36 +02:00
parent c4ff0ab1b7
commit 306705cb28
1 changed files with 16 additions and 13 deletions

View File

@ -87,19 +87,22 @@ func (mh *MetricsHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
func (mh *MetricsHandler) updateMetrics() { func (mh *MetricsHandler) updateMetrics() {
// Update metricURLsTotalGauge // Update metricURLsTotalGauge
for state := db.PasteStateUndef; state <= db.PasteStateDeleted; state++ { results := make([](struct {
for ty := db.PasteTypeUndef; ty <= db.PasteTypeFileUpload; ty++ { Type db.PasteType
var count int64 State db.PasteState
query := mh.db.Unscoped().Model(&db.Paste{}).Where("type = ? AND state = ?", ty, state).Count(&count) Count float64
if err := query.Error; err != nil { }), 0)
log.Printf("error: %v", errors.Wrap(err, "fetching pastes_total metric")) query := mh.db.Unscoped().Model(&db.Paste{}).Select("type", "state", "COUNT(*) as count").Group("type, state").Find(&results)
return if err := query.Error; err != nil {
} log.Printf("error: %v", errors.Wrap(err, "fetching pastes_total metric"))
labels := map[string]string{ return
"state": state.String(), }
"type": ty.String(), metricURLsTotalGauge.Reset()
} for _, r := range results {
metricURLsTotalGauge.With(labels).Set(float64(count)) labels := map[string]string{
"type": r.Type.String(),
"state": r.State.String(),
} }
metricURLsTotalGauge.With(labels).Set(r.Count)
} }
} }