SIGNALS Documentation
API Reference

Storage

Attachment volume and file mix, the configured storage target, and read-only upload limits.

Overview

The Storage panel answers "how much are we holding, and what is it?" for the attachment estate — total file count and bytes, broken down by the entity the files hang off, by file type, by disk, and by category — alongside the storage target and upload limits the system is actually enforcing.

Nothing on this screen is editable. Upload limits come from config/attachments.php and the environment, so they change with a deploy, not with a click.

Where it lives

Route: /admin/settings/storage (admin.settings.storage)

Open Admin → System → Storage. Requires settings.view.

Sections

  1. Headline counters — attachments, total size, thumbnails, largest file, and average file size
  2. Storage target — default disk, driver, bucket / region / root prefix where the driver exposes them, and whether unsigned download URLs are permitted
  3. By entity type — bytes per attachable entity (Account, Rental, CatalogueItem, …) as a share of the whole
  4. By file type — rolled up into families (Images, PDFs, Documents, Spreadsheets, Text & data, Archives, Video, Audio, Other), with the individual media types behind a disclosure
  5. By disk and category — per-disk totals, flagging any disk that is not the configured default, and per-category totals
  6. Upload limits — maximum file size, maximum files per entity, how many entities have reached that cap, thumbnail dimensions, the per-entity caps, and the full allowed media-type list

Notes

Attachments are not scoped to a warehouse. A file hangs off the entity it belongs to, so warehouse-level totals follow that entity rather than the file. There is no warehouse_id on the attachments table and the panel does not invent one.

Figures are cached for five minutes. Every number is a grouped aggregate query — no attachment row is ever loaded — so the page costs a fixed handful of queries no matter how large the table grows. The cache is TTL-only: uploads and deletions do not bust it, because these are reporting aggregates rather than state the UI reads back after a write, and wiring the whole file pipeline into a cache bust to save an operator five minutes of staleness is a poor trade. The panel prints the calculation timestamp, and Recalculate drops the cached payload if you need the numbers now.

The S3 warning. If the default disk uses any driver other than s3, the Storage target section says so. That is expected in local development and worth investigating in production — Signals warehouses attachments on S3 by convention, with signed, expiring download URLs.