From 3ee6b58a00313e6b14b7e6964f72ec6b376c6ea6 Mon Sep 17 00:00:00 2001 From: Janne Mareike Koschinski <janne@kuschku.de> Date: Fri, 22 Apr 2022 15:49:57 +0200 Subject: [PATCH] Measure processing time more precisely Signed-off-by: Janne Mareike Koschinski <janne@kuschku.de> --- main.go | 11 ++++++++--- process.go | 10 +++++----- resize.go | 8 ++++++++ 3 files changed, 21 insertions(+), 8 deletions(-) diff --git a/main.go b/main.go index 89301ad..2472857 100644 --- a/main.go +++ b/main.go @@ -30,10 +30,15 @@ var imageCounter = promauto.NewCounterVec( var imageCounterSuccess = imageCounter.WithLabelValues("success") var imageCounterFailure = imageCounter.WithLabelValues("failure") -var imageProcessDuration = promauto.NewCounter(prometheus.CounterOpts{ +var imageProcessDuration = promauto.NewCounterVec(prometheus.CounterOpts{ Name: "imghost_process_duration", - Help: "The total amount of time spent processing images", -}) + Help: "The amount of time spent processing images", +}, []string{"task"}) +var imageProcessDurationRead = imageProcessDuration.WithLabelValues("read") +var imageProcessDurationClone = imageProcessDuration.WithLabelValues("clone") +var imageProcessDurationCrop = imageProcessDuration.WithLabelValues("crop") +var imageProcessDurationResize = imageProcessDuration.WithLabelValues("resize") +var imageProcessDurationWrite = imageProcessDuration.WithLabelValues("write") func main() { config := NewConfigFromEnv() diff --git a/process.go b/process.go index c08cf61..0db2d55 100644 --- a/process.go +++ b/process.go @@ -5,21 +5,21 @@ import ( "encoding/json" "fmt" "github.com/go-redis/redis/v8" + "github.com/prometheus/client_golang/prometheus" "os" "path/filepath" "time" ) -func trackTime(start time.Time, function func(time.Duration)) { - function(time.Now().UTC().Sub(start.UTC())) +func trackTimeSince(counter prometheus.Counter, start time.Time) time.Time { + now := time.Now().UTC() + counter.Add(float64(now.Sub(start).Milliseconds()) / 1000.0) + return now } func ProcessImage(ctx context.Context, config *Config, client *redis.Client, value string) { queueGaugeInProgress.Inc() defer queueGaugeInProgress.Dec() - defer trackTime(time.Now(), func(duration time.Duration) { - imageProcessDuration.Add(float64(duration.Milliseconds())) - }) image := Image{} if err := json.Unmarshal([]byte(value), &image); err != nil { diff --git a/resize.go b/resize.go index b2298d1..869bac3 100644 --- a/resize.go +++ b/resize.go @@ -5,6 +5,7 @@ import ( "github.com/justjanne/imgconv" "gopkg.in/gographics/imagick.v3/imagick" "path/filepath" + "time" ) func ResizeImage(config *Config, imageId string) []error { @@ -13,6 +14,7 @@ func ResizeImage(config *Config, imageId string) []error { wand := imagick.NewMagickWand() defer wand.Destroy() + startRead := time.Now().UTC() if err = wand.ReadImage(filepath.Join(config.SourceFolder, imageId)); err != nil { return []error{err} } @@ -20,20 +22,26 @@ func ResizeImage(config *Config, imageId string) []error { if originalImage, err = imgconv.NewImage(wand); err != nil { return []error{err} } + trackTimeSince(imageProcessDurationRead, startRead) return runMany(len(config.Sizes), func(index int) error { definition := config.Sizes[index] path := filepath.Join(config.TargetFolder, fmt.Sprintf("%s%s", imageId, definition.Suffix)) + startClone := time.Now().UTC() image := originalImage.CloneImage() + startCrop := trackTimeSince(imageProcessDurationClone, startClone) if err := image.Crop(definition.Size); err != nil { return err } + startResize := trackTimeSince(imageProcessDurationCrop, startCrop) if err := image.Resize(definition.Size); err != nil { return err } + startWrite := trackTimeSince(imageProcessDurationResize, startResize) if err := image.Write(config.Quality, path); err != nil { return err } + trackTimeSince(imageProcessDurationWrite, startWrite) return nil }) } -- GitLab