01 Usage & quota — desktop jasny · persona: klient (owner) · 1440×1280 · linia zgięcia 810 · nad zgięciem: 4 KPI + wykres 30 dni + pasek quoty
Szukaj widoku, rekordu, komendy… ⌘K

Usage & quota

aion-marketing · źródło hub GET /api/usage?tenant=aion-marketing&group=day · cykl wrzesień · dzień 26 z 30 · LIVE · 03:05

Eksport CSV Odśwież
cost_usd_month
37,20 / 50
74,4 % limitu 50 USD LIVE · 03:05
Prognoza końca miesiąca
42,92 USD
≥ 80 % limitu liniowa · 26/30 dni
Zdarzenia w cyklu
12 486
batch 50 · ostatni flush 03:04 LIVE · 03:05
Średnio / dzień
1,43 USD
max 2,61 (12.09) · min 0,42 (31.08)

Zużycie

ostatnie 30 dni · słupek = suma cost_usd dnia

dayserviceprovider
LIVE · 03:05
3,002,001,000
26.09 · 1,12 USD · 418 zdarzeń
28.0804.0911.0918.0926.09
cost_usd dnia dziś · 26.09max 2,61 · 12.09 · min 0,42 · 31.08

Quota · cost_usd_month

LIVE · 03:05
37,20 / 50,00 USD
80 %
Wykorzystano74,4 % · dzień 26 z 30
Prognoza końca miesiąca 42,92 USD · 85,8 %
Pozostało12,80 USD · 4 dni · ~1,43 / dzień
Alert ≥ 80 %e-mail owner · spodziewany ~28.09
Limitclients.json · limits.cost_usd_month

Pozostałe limity tenanta

llm_usd_month24,60 / 50
stock_downloads_month138 / 500
kb_requests_month3 842 / 10 000
Poproś o wyższy limit

Zdarzenia usage.event

ostatnie 7 z 12 486 w cyklu · hub GET /api/usage?tenant=aion-marketing · kolejka UsageMeter batch 50 LIVE · 03:05 Filtr CSV
request_idresourceproviderunitscost_usdtsmeta
b4d2f8a1-6c3e-4d9b-a2f7-1e8c5b9d0a34 llm.chat openai · gpt-4.1-mini 3 812 in · 912 out 0,0142 2026-09-26T03:04:12Z {article: "koszt-pozyskania-klienta-cac", step: "outline"}
7e9a1c2b-0d4f-4e6a-b8c1-3f5d7a9e2b46 images.generate openai · gpt-image-1 1 image · 1024² 0,0400 2026-09-26T02:58:47Z {tor: "C", slug: "lejek-dwustopniowy-hero"}
3c5e7a9b-1d2f-4a6c-8e0b-5d7f9a1c3e58 kb.search hub-kb 1 request · 12 hits 0,0010 2026-09-26T02:57:03Z {kb_slug: "aion-marketing", q: "cac"}
9a1c3e5f-7b8d-4c2a-9e4f-7b1d3f5a7c60 stock.download pexels · BYOK 2 downloads 0,0000 2026-09-26T02:55:40Z {byok: true, ids: [1181244, 3184418]}
5f7a9c1e-3b4d-4e8f-a0c2-9d3f5b7a9e72 webmcp.call aios-core 1 call · tier R 0,0005 2026-09-26T02:55:12Z {tool: "site-nav.list", tier: "R"}
1b3d5f7a-9c0e-4a2c-b4e6-1f3a5c7e9b84 build.run aios-core 108 s 0,0300 2026-09-26T02:55:00Z {trigger: "directus-webhook", ok: true}
8d0f2a4c-6e7b-4d9e-8a1c-3e5f7b9d1a96 llm.embed openai · text-embedding-3-small 18 240 tokens 0,0004 2026-09-26T02:54:31Z {collection: "articles", n: 4}
02 Usage & quota — desktop operator (ciemny) · persona: operator Aion · 1440×1280 · linia zgięcia 810 · grupowanie service · „Zmień limit” · rozwinięty rekord usage w tabeli
Szukaj widoku, rekordu, komendy… ⌘K

Usage & quota

aion-marketing · źródło hub GET /api/usage?tenant=aion-marketing&group=day · cykl wrzesień · dzień 26 z 30 · LIVE · 03:05

Eksport CSV Odśwież
cost_usd_month
37,20 / 50
74,4 % limitu 50 USD LIVE · 03:05
Prognoza końca miesiąca
42,92 USD
≥ 80 % limitu liniowa · 26/30 dni
Zdarzenia w cyklu
12 486
batch 50 · ostatni flush 03:04 LIVE · 03:05
Średnio / dzień
1,43 USD
max 2,61 (12.09) · min 0,42 (31.08)

Zużycie

cykl wrzesień · group=service

dayserviceprovider
LIVE · 03:05
llm · openai · anthropic24,6066 %
images · openai · tor C6,4017 %
kb · hub-kb4,1011 %
webmcp · aios-core1,203 %
build · aios-core0,902 %
stock · pexels · BYOK0,000 %
seo · lokalnie0,000 %
7 usług · suma 37,20 USD · stock i seo = 0,00 (BYOK / lokalnie)

Quota · cost_usd_month

LIVE · 03:05
37,20 / 50,00 USD
80 %
Wykorzystano74,4 % · dzień 26 z 30
Prognoza końca miesiąca 42,92 USD · 85,8 %
Pozostało12,80 USD · 4 dni · ~1,43 / dzień
Alert ≥ 80 %e-mail owner · spodziewany ~28.09
Limitclients.json · limits.cost_usd_month

Pozostałe limity tenanta

llm_usd_month24,60 / 50
stock_downloads_month138 / 500
kb_requests_month3 842 / 10 000
Zmień limit Wyślij alert teraz

Zdarzenia usage.event

ostatnie 5 z 12 486 w cyklu · hub GET /api/usage?tenant=aion-marketing · kolejka UsageMeter batch 50 LIVE · 03:05 Filtr CSV
request_idresourceproviderunitscost_usdtsmeta
b4d2f8a1-6c3e-4d9b-a2f7-1e8c5b9d0a34 llm.chat openai · gpt-4.1-mini 3 812 in · 912 out 0,0142 2026-09-26T03:04:12Z {article: "koszt-pozyskania-klienta-cac", step: "outline"}
7e9a1c2b-0d4f-4e6a-b8c1-3f5d7a9e2b46 images.generate openai · gpt-image-1 1 image · 1024² 0,0400 2026-09-26T02:58:47Z {tor: "C", slug: "lejek-dwustopniowy-hero"}
request_id
7e9a1c2b-0d4f-4e6a-b8c1-3f5d7a9e2b46
tenant · site
aion-marketing · aion-marketing.pl
service · provider
images · openai · gpt-image-1 · generate
units
{ "images": 1, "size": "1024x1024", "quality": "medium" }
cost_usd
0.0400 · cennik hub
ts · source
2026-09-26T02:58:47.312Z · aios-images · tor C · UsageMeter(aion)
hub
przyjęte · 202 LIVE · 02:58 · batch 50 · X-Aion-Tenant + Bearer ••••
meta = {
  "tor": "C",
  "slug": "lejek-dwustopniowy-hero",
  "provider_request": "img_01J8Q…",
  "prompt_hash": "sha256:4c1e…9ab0",
  "license": "generated · aion-marketing",
  "variants": [480, 960, 1440]
}
Kopiuj JSON Hub · usage_daily
3c5e7a9b-1d2f-4a6c-8e0b-5d7f9a1c3e58 kb.search hub-kb 1 request · 12 hits 0,0010 2026-09-26T02:57:03Z {kb_slug: "aion-marketing", q: "cac"}
9a1c3e5f-7b8d-4c2a-9e4f-7b1d3f5a7c60 stock.download pexels · BYOK 2 downloads 0,0000 2026-09-26T02:55:40Z {byok: true, ids: [1181244, 3184418]}
5f7a9c1e-3b4d-4e8f-a0c2-9d3f5b7a9e72 webmcp.call aios-core 1 call · tier R 0,0005 2026-09-26T02:55:12Z {tool: "site-nav.list", tier: "R"}
03 Stany — loading · empty · error · blocked · standalone · 1440 × auto · jasny · wariant standalone bez quoty hub
Loading · skeleton kart + wykresu · słupki jako skeleton--bar
Empty · brak zdarzeń w cyklu · checklist podłączenia UsageMeter

Hub nie ma jeszcze zdarzeń tego tenanta

GET /api/usage?tenant=aion-marketing zwraca pustą listę, quota = 0 / 50 USD. Najczęściej brakuje flusha po pierwszym buildzie albo klucza tenanta w env starteru.

Sprawdź ponownierunbook §7 — usage
  1. Limit w hub: clients.json.limits.cost_usd_month = 50LIVE · 03:05
  2. AION_HUB_URL i AION_TENANT_KEY w env starteruUsageMeter(aion) wymaga hubUrl — inaczej throw
  3. Pierwszy npm run buildUsageMeter.flush()batch 50 lub flush na końcu pipeline'u
  4. Odpowiedź hub 202 na POST /api/usage401 = zły klucz, 404 = nieznany tenant
Error · hub nieosiągalny · kolejka re-queue nie gubi zdarzeń
Hub /api/usage nie odpowiada 502 LIVE · 03:05

Odczyt zużycia i quoty niemożliwy — ostatni poprawny snapshot 02:40 (poniżej, oznaczony STALE). UsageMeter.flush() po błędzie wraca zdarzenia do kolejki (queue.unshift) — 37 zdarzeń czeka na kolejny flush.

POST https://hub.aionflow.pl/api/usage  X-Aion-Tenant: aion-marketing  502
UsageMeter: hub https://hub.aionflow.pl/api/usage → 502   (re-queued 37)
GET  https://hub.aionflow.pl/api/usage?tenant=aion-marketing&group=day  502  1 340 ms
Ponów Status hub snapshot 02:40 · STALE
Blocked · brak AION_TENANT_KEY · hub 401 · LOCAL-GATED
Brak klucza tenanta — hub odrzuca odczyt BLOCKED · 401

AION_TENANT_KEY nie jest ustawiony w env panelu (LOCAL-GATED). Widok nie pokaże liczb „na oko” — do czasu podania klucza quota i wykres pozostają puste. Klucz rotuje operator w Ustawieniach → Klucze.

Ustawienia → Klucze
cost_usd_month
brak dostępu do hub UNVERIFIED
Prognoza
wymaga 30 dni z hub UNVERIFIED
Wariant standalone · ta sama IA minus hub · źródło = lokalny usage_log / sink file · brak quoty, brak prognozy
standalone · bez hubUsageMeter(standalone) → localEvents[] + sinkPath ndjson · flush = dopis do pliku · ExitHarness PASS
Zdarzenia lokalne
12 486
usage_log · sink ndjson LIVE · 03:05
Koszt szacowany
37,20 USD
z meta.cost_usd · brak quoty hub LIVE · 03:05
Średnio / dzień
1,43 USD
max 2,61 · 12.09
Quota
brak w standalone UNVERIFIED

Zużycie

ostatnie 30 dni · słupek = suma cost_usd dnia

dayserviceprovider
LIVE · 03:05
3,002,001,000
26.09 · 1,12 USD · 418 zdarzeń
28.0804.0911.0918.0926.09
cost_usd dnia dziś · 26.09max 2,61 · 12.09 · min 0,42 · 31.08

Brak quoty hub — tryb standalone

Limity clients.json i alert ≥ 80 % istnieją tylko w trybie aion. W standalone koszt jest sumą meta.cost_usd z lokalnych zdarzeń — informacyjny, bez progu i bez prognozy. Chcesz limit? Ustaw własny próg w Ustawieniach → Usage (proposal).

źródło
Directus · kolekcja usage_log
sink
.aios/usage.ndjson · 12 486 linii
ostatni flush
2026-09-26T03:04:59Z
retencja
lokalna · bez limitu
Pobierz ndjson
05 Spec — decyzje · tekst · prognoza vs próg · monochromatyczne słupki · standalone · LIVE/UNVERIFIED

Decyzje projektowe — Usage & quota

  1. Alert liczony z prognozy, nie tylko z bieżącego stanu. 37,20 / 50 USD to 74 % — poniżej progu — ale liniowa prognoza na dzień 26 z 30 daje 42,92 USD (85,8 %). Dlatego StatCard „Prognoza” jest jedynym warn na planszy, a karta cost_usd_month pozostaje cicha. Ten sam próg 80 % jest zaznaczony na pasku quoty jako kreskowany marker.
  2. Słupki monochromatyczne. Kolor = stan, nie kategoria: wykres 30 dni ma jeden ton, „dziś” pełną sytością tekstu i tooltip. Grupowanie service | provider nie jest wykresem skumulowanym z paletą, lecz listą poziomych słupków z wartością i udziałem — czytelne po desaturacji.
  3. Pasek quoty jako licznik. Wypełnienie w kolorze tekstu, prognoza jako kreskowane przedłużenie w --warn (jedyny kolor stanu na pasku), marker 80 % w --muted. Pozostałe limity tenanta (llm_usd_month, stock_downloads_month, kb_requests_month) pod spodem jako hbars bez koloru — żaden nie przekracza progu.
  4. Tabela 1:1 z modelem. Kolumny request_id · resource · provider · units · cost_usd · ts · meta: pełne UUID w mono, units jako kompaktowa mapa („3 812 in · 912 out”), meta jako skrócony JSON z podświetlonymi kluczami. Pełny rekord rozwija się inline pod wierszem (02) — nie w drawerze, bo drawer zasłaniałby kartę quoty z akcją „Zmień limit”.
  5. Operator widzi grupowanie service, klient day. Ten sam widok, inna zakładka domyślna: operator szuka „kto pali budżet”, owner — „czy dziś jest normalnie”. Zakładka aktywna nie używa akcentu (akcent = tylko menu, primary CTA, focus).
  6. Standalone = ta sama IA minus hub. Karta quoty nie znika — zamienia się w kreskowany panel z wyjaśnieniem i danymi lokalnymi (usage_log, sink ndjson). StatCard „Quota” pokazuje „—” + UNVERIFIED zamiast zera, żeby nikt nie odczytał braku hub jako zerowego zużycia.
  7. Daty mocku. Snapshot ustawiony na 26.09 (dzień 26 z 30), żeby prognoza miała sens statystyczny; oś X pokazuje pięć etykiet co tydzień. Czasy statusów (03:05) to godzina snapshotu, nie generacji planszy.

Co jest badge'em, co ciszą

ElementSygnałKolor
cost_usd_month 74 %liczba mono + „74,4 % limitu”brak (cisza)
Prognoza 85,8 %StatCard warn + badge „≥ 80 % limitu”--warn (krawędź, liczba, badge)
Marker 80 %kreska + etykieta mono--muted
Prognoza na paskukreskowane przedłużenie--warn
Hub 502badge critical + log + STALE snapshot--critical / --warn (stale)
Brak kluczablocked-banner + „—” + UNVERIFIEDbrak (krawędź tekstowa)
Standalonemode-badge + panel kreskowanybrak
Zdarzenie przyjętebadge neutralny „202” w rozwiniętym rekordziebrak

Dane LIVE / UNVERIFIED w mocku

DaneŹródłoEtykieta
Limity aion-marketing: cost_usd 50, llm_usd 50, stock 500, kb 10 000aionflow-hub/data/clients.jsonLIVE
Grupowanie day | service | provider, quota ratioserver/api/usage.get.ts, usage-store.tsLIVE
Pola zdarzenia (request_id, resource, units, meta, ts), batch 50, re-queue po błędzie, sink ndjsonpackages/core/src/usage-meter.tsLIVE
Wartości dzienne, 37,20 USD, 12 486 zdarzeń, podział usług/dostawcówmock dla tenanta aion-marketingUNVERIFIED
Cennik dostawców, koszt per zdarzenieprzykładoweUNVERIFIED
Alert e-mail ~28.09ekstrapolacja prognozyproposal

Komponenty użyte (BRIEF §5)

.stat-card (4 KPI, wariant warn i unknown) · .chart-bars (30 div-ów, wysokość przez --h) · .tabs (day | service | provider) · .mode-badge (stopka + wariant standalone) · .skeleton (03, w tym skeleton--bar) · .empty-checklist (03) · .blocked-banner (03) · .kill-lock (menu) · .status-tile, .event-stream, .gate-table, .diff-panel, .conceal, .drawer — nie dotyczą tego widoku (klucz tenanta pokazany jako •••• w rozwiniętym rekordzie; drawer odrzucony — patrz decyzja 4).

Hierarchia i fold

Nad zgięciem: nagłówek, 4 StatCard (odpowiedź „czy jest problem” w 5 s) i górna część wykresu z paskiem quoty. Tabela zdarzeń poniżej — jest dowodem, nie pierwszym ekranem. Zagnieżdżenie: karta → hbars/plot; brak trzeciego poziomu.

Tokeny — role

accent-cl (01)
accent-op (02)
ok (nieużyty tu)
warn (prognoza)
critical (502)
blue (link)
text (słupki, wypełnienie)
muted

Na tej planszy --ok nie występuje: brak stanu wymaga ciszy, nie zielonego. Słupki i wypełnienia pasków używają --text z domieszką --card przez color-mix — bez tokenów tintowych.