From f978029fd5d38e2e2835a2518ff45d8992cfc238 Mon Sep 17 00:00:00 2001
From: Travis Ralston <travpc@gmail.com>
Date: Mon, 21 Aug 2023 21:21:10 -0600
Subject: [PATCH] Update metrics for thumbnail generation

Fixes https://github.com/turt2live/matrix-media-repo/issues/443
---
 pipelines/_steps/thumbnails/generate.go | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/pipelines/_steps/thumbnails/generate.go b/pipelines/_steps/thumbnails/generate.go
index a2ffc216..1eca4026 100644
--- a/pipelines/_steps/thumbnails/generate.go
+++ b/pipelines/_steps/thumbnails/generate.go
@@ -1,12 +1,16 @@
 package thumbnails
 
 import (
+	"errors"
 	"io"
+	"strconv"
 
+	"github.com/prometheus/client_golang/prometheus"
 	"github.com/turt2live/matrix-media-repo/common"
 	"github.com/turt2live/matrix-media-repo/common/rcontext"
 	"github.com/turt2live/matrix-media-repo/database"
 	"github.com/turt2live/matrix-media-repo/datastores"
+	"github.com/turt2live/matrix-media-repo/metrics"
 	"github.com/turt2live/matrix-media-repo/pipelines/_steps/datastore_op"
 	"github.com/turt2live/matrix-media-repo/pipelines/_steps/download"
 	"github.com/turt2live/matrix-media-repo/pool"
@@ -24,6 +28,14 @@ func Generate(ctx rcontext.RequestContext, mediaRecord *database.DbMedia, width
 	ch := make(chan generateResult)
 	defer close(ch)
 	fn := func() {
+		metric := metrics.ThumbnailsGenerated.With(prometheus.Labels{
+			"width":    strconv.Itoa(width),
+			"height":   strconv.Itoa(height),
+			"method":   method,
+			"animated": strconv.FormatBool(animated),
+			"origin":   mediaRecord.Origin,
+		})
+
 		mediaStream, err := download.OpenStream(ctx, mediaRecord.Locatable, -1, -1)
 		if err != nil {
 			ch <- generateResult{err: err}
@@ -33,10 +45,14 @@ func Generate(ctx rcontext.RequestContext, mediaRecord *database.DbMedia, width
 
 		i, err := thumbnailing.GenerateThumbnail(mediaStream, fixedContentType, width, height, method, animated, ctx)
 		if err != nil {
+			if errors.Is(err, common.ErrMediaDimensionsTooSmall) {
+				metric.Inc()
+			}
 			ch <- generateResult{err: err}
 			return
 		}
 
+		metric.Inc()
 		ch <- generateResult{i: i}
 	}
 
-- 
GitLab