feat: image variants cache panel
This commit is contained in:
1 parent
951fef18ba
commit
d768668014
53 files changed
+5809
-46
No files matched your search
@@ -56,6 +56,31 @@ file never takes a slot. The pixel cap defaults to 50000000 pixels.
|
||||
- `generate_on_upload` is stored and returned only. Generating at upload time is not part of this
|
||||
release.
|
||||
|
||||
### Request tracking and the Cache screen
|
||||
|
||||
`/settings/media/cache` shows what the cache holds and purges it by scope (all, unused, one variant,
|
||||
one image). It reads `GET /v1/image-variants/cache` and writes `POST /v1/image-variants/cache/purge`
|
||||
([api.md](api.md)).
|
||||
|
||||
Two things are tracked for it, without a database write per request. `usage.Tracker`
|
||||
(`internal/infrastructure/usage`) keeps in memory, behind the `image.VariantUsageTracker` port, the
|
||||
last time each (variant, source) file was requested and a counter of rejected requests per UTC day.
|
||||
`ServeVariantUseCase` records a hit when a cached file is served, when a file is generated by the
|
||||
request and on a 304; it counts a rejection when the request answers 400 (unknown or disabled
|
||||
variant, unsupported parameter). A missing source (404), a request without `?v=` and the admin
|
||||
generation routes record nothing. The tracker flushes one batch through `image.VariantUsageRepository`
|
||||
every 30 seconds, as soon as 500 distinct files are pending, before `GET /v1/image-variants/cache`
|
||||
reads, and on graceful shutdown; only `api/dependecyInjection.go` builds it and starts the loop. A
|
||||
failed flush keeps the pending hits and counts, so nothing is lost or counted twice. The stored
|
||||
`last_requested_at` of a file never moves back, a late update for a purged file changes nothing, and
|
||||
day rows older than 7 days are deleted by the flush.
|
||||
|
||||
A file is unused when its reference time (`last_requested_at`, or `created_at` when never requested)
|
||||
is older than 30 days and its variant is enabled. A purge reads the rows in batches of 500 and keeps
|
||||
the rows whose blob cannot be deleted. Each scope records its own activity action
|
||||
(`media.variant_purge_all`, `media.variant_purge_unused`, `media.variant_purge`,
|
||||
`media.variant_purge_image`).
|
||||
|
||||
## Geometry
|
||||
|
||||
Images are never enlarged.
|
||||
|
||||
Reference in new issue
Block a user