From 3d76046762eebba2b51150adb269e434c3772737 Mon Sep 17 00:00:00 2001 From: mkelvers Date: Sun, 21 Jun 2026 17:18:43 +0200 Subject: [PATCH] feat: add jikan cache stats query --- internal/db/querier.go | 1 + internal/db/queries.sql | 7 +++++++ internal/db/queries.sql.go | 21 +++++++++++++++++++++ 3 files changed, 29 insertions(+) diff --git a/internal/db/querier.go b/internal/db/querier.go index 5753c8e..745263e 100644 --- a/internal/db/querier.go +++ b/internal/db/querier.go @@ -31,6 +31,7 @@ type Querier interface { GetEpisodeAvailabilityCache(ctx context.Context, animeID int64) (EpisodeAvailabilityCache, error) GetEpisodeProviderMapping(ctx context.Context, arg GetEpisodeProviderMappingParams) (EpisodeProviderMapping, error) GetJikanCache(ctx context.Context, key string) (string, error) + GetJikanCacheStats(ctx context.Context) (GetJikanCacheStatsRow, error) GetJikanCacheStale(ctx context.Context, key string) (string, error) GetSession(ctx context.Context, id string) (Session, error) GetTrackedAiringAnimeIDsDueForEpisodeRefresh(ctx context.Context, limit int64) ([]int64, error) diff --git a/internal/db/queries.sql b/internal/db/queries.sql index f64b8b7..1d52b6e 100644 --- a/internal/db/queries.sql +++ b/internal/db/queries.sql @@ -235,6 +235,13 @@ WHERE key = ? AND datetime(expires_at) > CURRENT_TIMESTAMP LIMIT 1; SELECT data FROM jikan_cache WHERE key = ? AND datetime(expires_at) > datetime(CURRENT_TIMESTAMP, '-14 days') LIMIT 1; +-- name: GetJikanCacheStats :one +SELECT + COUNT(*) AS total_rows, + COUNT(*) FILTER (WHERE datetime(expires_at) <= CURRENT_TIMESTAMP) AS expired_rows, + COALESCE(unixepoch(MIN(expires_at)), 0) AS oldest_expires_at_seconds +FROM jikan_cache; + -- name: SetJikanCache :exec INSERT INTO jikan_cache (key, data, expires_at) VALUES (?, ?, ?) diff --git a/internal/db/queries.sql.go b/internal/db/queries.sql.go index 4134749..bbbaf96 100644 --- a/internal/db/queries.sql.go +++ b/internal/db/queries.sql.go @@ -576,6 +576,27 @@ func (q *Queries) GetJikanCache(ctx context.Context, key string) (string, error) return data, err } +const getJikanCacheStats = `-- name: GetJikanCacheStats :one +SELECT + COUNT(*) AS total_rows, + COUNT(*) FILTER (WHERE datetime(expires_at) <= CURRENT_TIMESTAMP) AS expired_rows, + COALESCE(unixepoch(MIN(expires_at)), 0) AS oldest_expires_at_seconds +FROM jikan_cache +` + +type GetJikanCacheStatsRow struct { + TotalRows int64 `json:"total_rows"` + ExpiredRows int64 `json:"expired_rows"` + OldestExpiresAtSeconds int64 `json:"oldest_expires_at_seconds"` +} + +func (q *Queries) GetJikanCacheStats(ctx context.Context) (GetJikanCacheStatsRow, error) { + row := q.db.QueryRowContext(ctx, getJikanCacheStats) + var i GetJikanCacheStatsRow + err := row.Scan(&i.TotalRows, &i.ExpiredRows, &i.OldestExpiresAtSeconds) + return i, err +} + const getJikanCacheStale = `-- name: GetJikanCacheStale :one SELECT data FROM jikan_cache WHERE key = ? AND datetime(expires_at) > datetime(CURRENT_TIMESTAMP, '-14 days') LIMIT 1