diff --git a/automod/visual/abyss_client.go b/automod/visual/abyss_client.go index 7a304978..18c003ea 100644 --- a/automod/visual/abyss_client.go +++ b/automod/visual/abyss_client.go @@ -8,6 +8,7 @@ import ( "io" "log/slog" "net/http" + "time" lexutil "github.com/bluesky-social/indigo/lex/util" "github.com/bluesky-social/indigo/util" @@ -56,12 +57,20 @@ func (ac *AbyssClient) ScanBlob(ctx context.Context, blob lexutil.LexBlob, blobB req.Header.Set("x-ratelimit-bypass", ac.RatelimitBypass) } + start := time.Now() + defer func() { + duration := time.Since(start) + abyssAPIDuration.Observe(duration.Seconds()) + }() + req = req.WithContext(ctx) res, err := ac.Client.Do(req) if err != nil { return nil, fmt.Errorf("abyss request failed: %v", err) } defer res.Body.Close() + + abyssAPICount.WithLabelValues(fmt.Sprint(res.StatusCode)).Inc() if res.StatusCode != 200 { return nil, fmt.Errorf("abyss request failed statusCode=%d", res.StatusCode) } diff --git a/automod/visual/hiveai_client.go b/automod/visual/hiveai_client.go index d6cbdb6a..360e836e 100644 --- a/automod/visual/hiveai_client.go +++ b/automod/visual/hiveai_client.go @@ -9,6 +9,7 @@ import ( "log/slog" "mime/multipart" "net/http" + "time" lexutil "github.com/bluesky-social/indigo/lex/util" "github.com/bluesky-social/indigo/util" @@ -182,6 +183,12 @@ func (hal *HiveAIClient) LabelBlob(ctx context.Context, blob lexutil.LexBlob, bl return nil, err } + start := time.Now() + defer func() { + duration := time.Since(start) + hiveAPIDuration.Observe(duration.Seconds()) + }() + req.Header.Set("Authorization", fmt.Sprintf("Token %s", hal.ApiToken)) req.Header.Add("Content-Type", writer.FormDataContentType()) req.Header.Set("Accept", "application/json") @@ -193,6 +200,8 @@ func (hal *HiveAIClient) LabelBlob(ctx context.Context, blob lexutil.LexBlob, bl return nil, fmt.Errorf("HiveAI request failed: %v", err) } defer res.Body.Close() + + hiveAPICount.WithLabelValues(fmt.Sprint(res.StatusCode)).Inc() if res.StatusCode != 200 { return nil, fmt.Errorf("HiveAI request failed statusCode=%d", res.StatusCode) } diff --git a/automod/visual/metrics.go b/automod/visual/metrics.go new file mode 100644 index 00000000..bca5571e --- /dev/null +++ b/automod/visual/metrics.go @@ -0,0 +1,26 @@ +package visual + +import ( + "github.com/prometheus/client_golang/prometheus" + "github.com/prometheus/client_golang/prometheus/promauto" +) + +var hiveAPIDuration = promauto.NewHistogram(prometheus.HistogramOpts{ + Name: "automod_hive_api_duration_sec", + Help: "Duration of Hive image auto-labeling API calls", +}) + +var hiveAPICount = promauto.NewCounterVec(prometheus.CounterOpts{ + Name: "automod_hive_api_count", + Help: "Number of Hive image auto-labeling API calls, by HTTP status code", +}, []string{"status"}) + +var abyssAPIDuration = promauto.NewHistogram(prometheus.HistogramOpts{ + Name: "automod_abyss_api_duration_sec", + Help: "Duration of abyss image scanning API call", +}) + +var abyssAPICount = promauto.NewCounterVec(prometheus.CounterOpts{ + Name: "automod_abyss_api_count", + Help: "Number of abyss image scanning API calls, by HTTP status code", +}, []string{"status"})