package main
import (
"context"
"encoding/json"
"fmt"
"github.com/go-redis/redis/v8"
"os"
"path/filepath"
"time"
)
func trackTime(start time.Time, function func(time.Duration)) {
function(time.Now().UTC().Sub(start.UTC()))
}
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 {
fmt.Printf("Could not unmarshal task %s\n", value)
return
}
errors := ResizeImage(config, image.Id)
_ = os.Remove(filepath.Join(config.SourceFolder, image.Id))
errorMessages := make([]string, len(errors))
for i, err := range errors {
errorMessages[i] = err.Error()
}
if len(errors) != 0 {
imageCounterFailure.Inc()
returnResult(ctx, config, client, Result{
Id: image.Id,
Success: false,
Errors: errorMessages,
})
} else {
imageCounterSuccess.Inc()
returnResult(ctx, config, client, Result{
Id: image.Id,
Success: true,
})
}
}