feat(activity): one Activity page — runs, admin actions, server log and quota under one filter bar
The audit log, the server log and the admin quota view were three pages (the quota one a Stats tab),
each with its own filters, and the background runs had no list at all. Now one page ("Napló" /
"Activity") reads all four, each still its own table on the server: a shared bar (text, a period of
1 h to 90 days defaulting to 7, an account) and each tab's own filters, the whole view in the URL.
The old page ids open their tab.
Server side: the audit log and the new run list (`/api/admin/runs`) filter and page like the server
log, through one keyset helper (`routes/_keyset`) the log now shares; an audit row keeps the request
it was made in (migration 0111), so its log lines are a pivot away, as a run's are (`lrun`). The
quota breakdown takes since/until and one account. The Scheduler rows get a history button to their
job's runs.
Also fixed on the way: re-saving the value in force on the Configuration page staged its override
without committing it (the commit sat inside the audit branch), so the save was lost.
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"title": "Activity",
|
||||
"tabs": {
|
||||
"runs": "Runs",
|
||||
"admin": "Admin actions",
|
||||
"logs": "Server log",
|
||||
"quota": "Quota"
|
||||
},
|
||||
"intro": {
|
||||
"runs": "Every background run, newest first — scheduled, started by an admin, or a user's work on one channel. A row opens to what it did or why it failed, and to the lines it logged.",
|
||||
"admin": "An append-only record of admin actions — who changed what, and when. A row opens to its before and after, and to the lines its request logged.",
|
||||
"logs": "The server's stored log — lines from the API, the downloader and browsers, kept until the retention period ends. A line opens in place; its request, job or run id keeps only that one's lines."
|
||||
},
|
||||
"search": "Search…",
|
||||
"windowLabel": "Period",
|
||||
"windows": {
|
||||
"1h": "1 hour",
|
||||
"24h": "24 hours",
|
||||
"7d": "7 days",
|
||||
"30d": "30 days",
|
||||
"90d": "90 days"
|
||||
},
|
||||
"account": "Account",
|
||||
"any": "Any",
|
||||
"noAccount": "No account (background)",
|
||||
"older": "Load older",
|
||||
"stale": "Couldn't refresh — what you see may be out of date",
|
||||
"olderFailed": "Couldn't load the older rows",
|
||||
"countsFailed": "Couldn't load the filter counts",
|
||||
"runs": {
|
||||
"job": "Job",
|
||||
"statusLabel": "Filter by status",
|
||||
"status": {
|
||||
"error": "Failed",
|
||||
"interrupted": "Interrupted",
|
||||
"skipped": "Skipped",
|
||||
"running": "Running",
|
||||
"ok": "OK"
|
||||
},
|
||||
"empty": "No runs match the filters.",
|
||||
"count_one": "{{count}} run shown · newest first",
|
||||
"count_other": "{{count}} runs shown · newest first",
|
||||
"fields": {
|
||||
"started": "Started by",
|
||||
"when": "Start → end",
|
||||
"target": "Target",
|
||||
"quota": "Quota units"
|
||||
},
|
||||
"logLines_one": "Its {{count}} log line →",
|
||||
"logLines_other": "Its {{count}} log lines →",
|
||||
"jobRuns": "This job's runs →"
|
||||
},
|
||||
"audit": {
|
||||
"action": "Action",
|
||||
"target": "Target",
|
||||
"requestLines": "Its request's log lines →",
|
||||
"count_one": "{{count}} action shown · newest first",
|
||||
"count_other": "{{count}} actions shown · newest first"
|
||||
},
|
||||
"quota": {
|
||||
"total": "Spend over {{window}}: {{units}} units"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,7 @@
|
||||
{
|
||||
"title": "Server log",
|
||||
"intro": "The server's stored log — lines from the API, the downloader and browsers, kept until the retention period ends. A line opens in place; click its request or job id to keep only that request's or job's lines.",
|
||||
"search": "Search the message, code, stack…",
|
||||
"levelLabel": "Filter by level",
|
||||
"source": "Source",
|
||||
"account": "Account",
|
||||
"event": "Event",
|
||||
"window": "Period",
|
||||
"windows": {
|
||||
"1h": "1 hour",
|
||||
"24h": "24 hours",
|
||||
"7d": "7 days"
|
||||
},
|
||||
"any": "Any",
|
||||
"noAccount": "No account",
|
||||
"noEvent": "No code",
|
||||
@@ -38,6 +28,9 @@
|
||||
"account": "Account",
|
||||
"request": "Request",
|
||||
"job": "Job",
|
||||
"version": "Version"
|
||||
}
|
||||
"version": "Version",
|
||||
"run": "Run"
|
||||
},
|
||||
"pivotRun": "run {{id}}",
|
||||
"showRun": "Only this run's lines"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
{
|
||||
"title": "Audit log",
|
||||
"intro": "An append-only record of admin actions — who did what, and when. Logged at action granularity, never per item.",
|
||||
"empty": "No audit entries yet.",
|
||||
"system": "System",
|
||||
"clear": "Clear audit log",
|
||||
@@ -9,7 +7,6 @@
|
||||
"cleared_one": "Cleared {{count}} audit entry",
|
||||
"cleared_other": "Cleared {{count}} audit entries",
|
||||
"clearFailed": "Couldn't clear the audit log",
|
||||
"truncated": "Showing the {{returned}} most recent of {{total}} entries.",
|
||||
"on": "On",
|
||||
"off": "Off",
|
||||
"default": "default",
|
||||
@@ -18,7 +15,6 @@
|
||||
"cols": {
|
||||
"when": "When",
|
||||
"actor": "Who",
|
||||
"action": "Action",
|
||||
"details": "Details"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,9 +32,8 @@
|
||||
"signOut": "Sign out",
|
||||
"addAccount": "Add another account",
|
||||
"switchTo": "Switch to {{name}}",
|
||||
"audit": "Audit log",
|
||||
"logs": "Server log",
|
||||
"googleAddress": "Google account: {{email}}"
|
||||
"googleAddress": "Google account: {{email}}",
|
||||
"activity": "Activity"
|
||||
},
|
||||
"sync": {
|
||||
"yours": "yours",
|
||||
|
||||
@@ -18,9 +18,8 @@
|
||||
"scheduler": "Scheduler",
|
||||
"config": "Config",
|
||||
"users": "Users",
|
||||
"audit": "Audit",
|
||||
"admin": "Admin",
|
||||
"logs": "Logs",
|
||||
"settings": "Settings"
|
||||
"settings": "Settings",
|
||||
"activity": "Activity"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,5 +211,6 @@
|
||||
},
|
||||
"interrupted": "interrupted: the server restarted during the run",
|
||||
"adHocTitle": "Ad-hoc runs",
|
||||
"adHocStarted": "started by a user"
|
||||
"adHocStarted": "started by a user",
|
||||
"history": "This job's runs"
|
||||
}
|
||||
|
||||
@@ -1,17 +1,8 @@
|
||||
{
|
||||
"tabs": {
|
||||
"overview": "Overview",
|
||||
"system": "System"
|
||||
},
|
||||
"title": "API quota usage",
|
||||
"rangeDays": "{{d}}",
|
||||
"rangeLabel": "Time range",
|
||||
"introBefore": "YouTube Data API units attributed by who triggered the spend. ",
|
||||
"introSystem": "System",
|
||||
"introAfter": " is shared background work (scheduled backfill, enrichment, resync) that isn't tied to one person.",
|
||||
"loading": "Loading…",
|
||||
"noData": "No data.",
|
||||
"dailyTotal": "Daily total ({{d}} · {{units}} units)",
|
||||
"noUsageInRange": "No usage in this range.",
|
||||
"dailyTooltip": "{{day}}: {{units}} units",
|
||||
"system": "System (background)",
|
||||
@@ -49,10 +40,6 @@
|
||||
"syncFailed": "Couldn't sync subscriptions",
|
||||
"fullHistoryRequested_one": "Full history requested for {{count}} channel",
|
||||
"fullHistoryRequested_other": "Full history requested for {{count}} channels",
|
||||
"fullHistoryFailed": "Couldn't request full history",
|
||||
"admin": "Admin",
|
||||
"adminPauseHint": "Pause or resume the background sync for the whole app (all users).",
|
||||
"resumeBackgroundSync": "Resume background sync",
|
||||
"pauseBackgroundSync": "Pause background sync"
|
||||
"fullHistoryFailed": "Couldn't request full history"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,63 @@
|
||||
{
|
||||
"title": "Napló",
|
||||
"tabs": {
|
||||
"runs": "Futások",
|
||||
"admin": "Admin műveletek",
|
||||
"logs": "Szervernapló",
|
||||
"quota": "Kvóta"
|
||||
},
|
||||
"intro": {
|
||||
"runs": "Minden háttérfutás, a legújabbal kezdve — ütemezett, adminisztrátor indította, vagy egy felhasználó munkája egy csatornán. Egy sor kinyitva megmutatja, mit végzett vagy miért hiúsult meg, és a naplósorait.",
|
||||
"admin": "Az adminisztrátori műveletek csak bővülő nyilvántartása — ki mit változtatott és mikor. Egy sor kinyitva megmutatja az előtte–utána állapotot és a kérése naplósorait.",
|
||||
"logs": "A szerver tárolt naplója — az API, a letöltő és a böngészők sorai, amelyeket a megőrzési idő végéig tart meg. Egy sor a helyén nyílik ki; a kérés-, feladat- vagy futásazonosítójára kattintva csak az ahhoz tartozó sorok maradnak."
|
||||
},
|
||||
"search": "Keresés…",
|
||||
"windowLabel": "Időtartomány",
|
||||
"windows": {
|
||||
"1h": "1 óra",
|
||||
"24h": "24 óra",
|
||||
"7d": "7 nap",
|
||||
"30d": "30 nap",
|
||||
"90d": "90 nap"
|
||||
},
|
||||
"account": "Fiók",
|
||||
"any": "Bármelyik",
|
||||
"noAccount": "Fiók nélkül (háttér)",
|
||||
"older": "Régebbiek",
|
||||
"stale": "Nem sikerült frissíteni — amit látsz, elavult lehet",
|
||||
"olderFailed": "Nem sikerült betölteni a régebbi sorokat",
|
||||
"countsFailed": "Nem sikerült betölteni a szűrők darabszámait",
|
||||
"runs": {
|
||||
"job": "Feladat",
|
||||
"statusLabel": "Szűrés állapotra",
|
||||
"status": {
|
||||
"error": "Hibás",
|
||||
"interrupted": "Megszakadt",
|
||||
"skipped": "Kihagyva",
|
||||
"running": "Fut",
|
||||
"ok": "Rendben"
|
||||
},
|
||||
"empty": "Nincs a szűrőknek megfelelő futás.",
|
||||
"count_one": "{{count}} futás látszik · a legújabb elöl",
|
||||
"count_other": "{{count}} futás látszik · a legújabb elöl",
|
||||
"fields": {
|
||||
"started": "Indította",
|
||||
"when": "Kezdés → vége",
|
||||
"target": "Cél",
|
||||
"quota": "Kvótaegység"
|
||||
},
|
||||
"logLines_one": "A futás {{count}} naplósora →",
|
||||
"logLines_other": "A futás {{count}} naplósora →",
|
||||
"jobRuns": "Ennek a feladatnak a futásai →"
|
||||
},
|
||||
"audit": {
|
||||
"action": "Művelet",
|
||||
"target": "Cél",
|
||||
"requestLines": "A kérés naplósorai →",
|
||||
"count_one": "{{count}} művelet látszik · a legújabb elöl",
|
||||
"count_other": "{{count}} művelet látszik · a legújabb elöl"
|
||||
},
|
||||
"quota": {
|
||||
"total": "Felhasználás ({{window}}): {{units}} egység"
|
||||
}
|
||||
}
|
||||
@@ -1,17 +1,7 @@
|
||||
{
|
||||
"title": "Szervernapló",
|
||||
"intro": "A szerver tárolt naplója — az API, a letöltő és a böngészők sorai, amelyeket a megőrzési idő végéig tart meg. Egy sor a helyén nyílik ki; a kérés- vagy feladat-azonosítójára kattintva csak az ahhoz tartozó sorok maradnak.",
|
||||
"search": "Keresés az üzenetben, a kódban, a hívási veremben…",
|
||||
"levelLabel": "Szűrés szintre",
|
||||
"source": "Forrás",
|
||||
"account": "Fiók",
|
||||
"event": "Esemény",
|
||||
"window": "Időszak",
|
||||
"windows": {
|
||||
"1h": "1 óra",
|
||||
"24h": "24 óra",
|
||||
"7d": "7 nap"
|
||||
},
|
||||
"any": "Bármi",
|
||||
"noAccount": "Fiók nélkül",
|
||||
"noEvent": "Kód nélkül",
|
||||
@@ -38,6 +28,9 @@
|
||||
"account": "Fiók",
|
||||
"request": "Kérés",
|
||||
"job": "Feladat",
|
||||
"version": "Verzió"
|
||||
}
|
||||
"version": "Verzió",
|
||||
"run": "Futás"
|
||||
},
|
||||
"pivotRun": "futás: {{id}}",
|
||||
"showRun": "Csak ennek a futásnak a sorai"
|
||||
}
|
||||
|
||||
@@ -1,6 +1,4 @@
|
||||
{
|
||||
"title": "Eseménynapló",
|
||||
"intro": "Az admin-műveletek csak-hozzáfűző naplója — ki, mit, mikor. Művelet-szinten naplózva, soha nem elemenként.",
|
||||
"empty": "Még nincs naplóbejegyzés.",
|
||||
"system": "Rendszer",
|
||||
"clear": "Eseménynapló ürítése",
|
||||
@@ -9,7 +7,6 @@
|
||||
"cleared_one": "{{count}} naplóbejegyzés törölve",
|
||||
"cleared_other": "{{count}} naplóbejegyzés törölve",
|
||||
"clearFailed": "Nem sikerült üríteni az eseménynaplót",
|
||||
"truncated": "A legutóbbi {{returned}} bejegyzés látszik a(z) {{total}}-ból.",
|
||||
"on": "Be",
|
||||
"off": "Ki",
|
||||
"default": "alapérték",
|
||||
@@ -18,7 +15,6 @@
|
||||
"cols": {
|
||||
"when": "Mikor",
|
||||
"actor": "Ki",
|
||||
"action": "Művelet",
|
||||
"details": "Részletek"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,9 +32,8 @@
|
||||
"signOut": "Kijelentkezés",
|
||||
"addAccount": "Másik fiók hozzáadása",
|
||||
"switchTo": "Váltás erre: {{name}}",
|
||||
"audit": "Eseménynapló",
|
||||
"logs": "Szervernapló",
|
||||
"googleAddress": "Google-fiók: {{email}}"
|
||||
"googleAddress": "Google-fiók: {{email}}",
|
||||
"activity": "Napló"
|
||||
},
|
||||
"sync": {
|
||||
"yours": "tiéd",
|
||||
|
||||
@@ -18,9 +18,8 @@
|
||||
"scheduler": "Ütemező",
|
||||
"config": "Konfig",
|
||||
"users": "Felhasználók",
|
||||
"audit": "Eseménynapló",
|
||||
"admin": "Admin",
|
||||
"logs": "Napló",
|
||||
"settings": "Beállítások"
|
||||
"settings": "Beállítások",
|
||||
"activity": "Napló"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,5 +211,6 @@
|
||||
},
|
||||
"interrupted": "megszakadt: a futás közben újraindult a szerver",
|
||||
"adHocTitle": "Alkalmi futások",
|
||||
"adHocStarted": "felhasználó indítja"
|
||||
"adHocStarted": "felhasználó indítja",
|
||||
"history": "A feladat futásai"
|
||||
}
|
||||
|
||||
@@ -1,17 +1,8 @@
|
||||
{
|
||||
"tabs": {
|
||||
"overview": "Áttekintés",
|
||||
"system": "Rendszer"
|
||||
},
|
||||
"title": "API-kvóta használat",
|
||||
"rangeDays": "{{d}}",
|
||||
"rangeLabel": "Időtartomány",
|
||||
"introBefore": "A YouTube Data API-egységek aszerint, hogy ki váltotta ki a felhasználást. A ",
|
||||
"introSystem": "Rendszer",
|
||||
"introAfter": " a megosztott háttérmunka (ütemezett behúzás, dúsítás, újraszinkronizálás), amely nem köthető egy személyhez.",
|
||||
"loading": "Betöltés…",
|
||||
"noData": "Nincs adat.",
|
||||
"dailyTotal": "Napi összesen ({{d}} · {{units}} egység)",
|
||||
"noUsageInRange": "Nincs használat ebben az időszakban.",
|
||||
"dailyTooltip": "{{day}}: {{units}} egység",
|
||||
"system": "Rendszer (háttér)",
|
||||
@@ -49,10 +40,6 @@
|
||||
"syncFailed": "Nem sikerült szinkronizálni a feliratkozásokat",
|
||||
"fullHistoryRequested_one": "Teljes előzmény kérve {{count}} csatornához",
|
||||
"fullHistoryRequested_other": "Teljes előzmény kérve {{count}} csatornához",
|
||||
"fullHistoryFailed": "Nem sikerült teljes előzményt kérni",
|
||||
"admin": "Adminisztrátor",
|
||||
"adminPauseHint": "A háttér-szinkronizálás szüneteltetése vagy folytatása az egész alkalmazásra (minden felhasználóra).",
|
||||
"resumeBackgroundSync": "Háttér-szinkronizálás folytatása",
|
||||
"pauseBackgroundSync": "Háttér-szinkronizálás szüneteltetése"
|
||||
"fullHistoryFailed": "Nem sikerült teljes előzményt kérni"
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user