From bfeeef78190d003cbe3e3e81f2c67f0246c7d628 Mon Sep 17 00:00:00 2001 From: Till JS Date: Wed, 8 Apr 2026 16:47:54 +0200 Subject: [PATCH] chore(matrix): final scrub of stale matrix references A grep audit after the previous matrix removal commits found a handful of stragglers in non-runtime files that the earlier sweeps missed: - services/mana-llm/CLAUDE.md: removed matrix-ollama-bot from the consumer-apps diagram and from the related-services table - services/mana-video-gen/CLAUDE.md: removed "Matrix Bots" integration bullet - packages/notify-client/README.md: removed sendMatrix() doc entry (the method itself was already gone in the prior cleanup) - docker/grafana/dashboards/logs-explorer.json: dropped the "Matrix Stack" log row that queried tier="matrix" (would show no data forever) - docker/grafana/dashboards/master-overview.json: dropped the "Matrix Bots" stat panel that counted up{job=~"matrix-.*-bot"} - apps/mana/apps/landing/src/data/ecosystem-health.json: regenerated via scripts/ecosystem-audit.mjs to drop matrix from the app list, icon counts, file analytics, top offenders and authGuard missing list - .gitignore: removed services/matrix-stt-bot/data/ pattern (the service itself was deleted long ago) Production-side stragglers also addressed (not in this commit): - DROP USER synapse on prod Postgres (the parallel cleanup commit 2514831a3 dropped DATABASE matrix + DATABASE synapse but left the role behind) Co-Authored-By: Claude Opus 4.6 (1M context) --- .gitignore | 1 - .../landing/src/data/ecosystem-health.json | 547 +++----- docker/grafana/dashboards/logs-explorer.json | 306 +++-- .../grafana/dashboards/master-overview.json | 1133 +++++++++++++---- packages/notify-client/README.md | 1 - services/mana-llm/CLAUDE.md | 4 +- services/mana-video-gen/CLAUDE.md | 1 - 7 files changed, 1259 insertions(+), 734 deletions(-) diff --git a/.gitignore b/.gitignore index 1b07b35a8..1101cf51a 100644 --- a/.gitignore +++ b/.gitignore @@ -129,5 +129,4 @@ pip-delete-this-directory.txt # ML Models (large files, downloaded on demand) mlx_models/ -services/matrix-stt-bot/data/ services/mana-sync/server diff --git a/apps/mana/apps/landing/src/data/ecosystem-health.json b/apps/mana/apps/landing/src/data/ecosystem-health.json index 928238691..73b9d0d25 100644 --- a/apps/mana/apps/landing/src/data/ecosystem-health.json +++ b/apps/mana/apps/landing/src/data/ecosystem-health.json @@ -1,30 +1,30 @@ { - "generatedAt": "2026-03-31T14:32:40.747Z", - "overallScore": 72, + "generatedAt": "2026-04-08T14:46:05.166Z", + "overallScore": 67, "scores": { - "sharedPackages": 90, - "iconConsistency": 78, + "sharedPackages": 92, + "iconConsistency": 86, "modalConsistency": 19, - "errorHandling": 16, - "i18nCoverage": 87, - "localFirst": 93, - "styleConsistency": 87, - "errorBoundaries": 52, + "errorHandling": 0, + "i18nCoverage": 50, + "localFirst": 100, + "styleConsistency": 75, + "errorBoundaries": 50, "typescriptStrict": 100, - "testCoverage": 73, - "pwaSupport": 4, - "maintainability": 0, - "securityHeaders": 73, - "skeletonLoading": 77, + "testCoverage": 50, + "pwaSupport": 0, + "maintainability": 79, + "securityHeaders": 50, + "skeletonLoading": 50, "toastConsistency": 100, - "storePattern": 94, - "sharedTypes": 53, - "depFreshness": 80, + "storePattern": 100, + "sharedTypes": 5, + "depFreshness": 60, "bundleConfig": 100, - "gitActivity": 97, - "a11yIndicators": 36, - "authGuardCoverage": 83, - "dockerReadiness": 80 + "gitActivity": 100, + "a11yIndicators": 33, + "authGuardCoverage": 50, + "dockerReadiness": 100 }, "weights": { "sharedPackages": 20, @@ -53,496 +53,235 @@ }, "details": { "icons": { - "adoption": 78, - "phosphorFiles": 347, - "inlineSvgFiles": 98, + "adoption": 86, + "phosphorFiles": 228, + "inlineSvgFiles": 38, "perApp": { - "calc": { - "phosphor": 1, - "inlineSvg": 0 - }, - "calendar": { - "phosphor": 28, - "inlineSvg": 0 - }, - "chat": { - "phosphor": 18, - "inlineSvg": 0 - }, - "citycorners": { - "phosphor": 9, - "inlineSvg": 0 - }, - "clock": { - "phosphor": 3, - "inlineSvg": 7 - }, - "contacts": { - "phosphor": 27, - "inlineSvg": 4 - }, - "context": { - "phosphor": 13, - "inlineSvg": 0 - }, - "inventar": { - "phosphor": 12, - "inlineSvg": 1 - }, "mana": { - "phosphor": 34, - "inlineSvg": 25 - }, - "cards": { - "phosphor": 2, - "inlineSvg": 1 + "phosphor": 228, + "inlineSvg": 38 }, "manavoxel": { "phosphor": 0, "inlineSvg": 0 - }, - "matrix": { - "phosphor": 26, - "inlineSvg": 0 - }, - "memoro": { - "phosphor": 0, - "inlineSvg": 53 - }, - "moodlit": { - "phosphor": 5, - "inlineSvg": 0 - }, - "mukke": { - "phosphor": 21, - "inlineSvg": 0 - }, - "news": { - "phosphor": 1, - "inlineSvg": 0 - }, - "nutriphi": { - "phosphor": 6, - "inlineSvg": 1 - }, - "photos": { - "phosphor": 11, - "inlineSvg": 3 - }, - "picture": { - "phosphor": 27, - "inlineSvg": 0 - }, - "planta": { - "phosphor": 0, - "inlineSvg": 0 - }, - "playground": { - "phosphor": 4, - "inlineSvg": 1 - }, - "presi": { - "phosphor": 6, - "inlineSvg": 0 - }, - "questions": { - "phosphor": 7, - "inlineSvg": 0 - }, - "skilltree": { - "phosphor": 12, - "inlineSvg": 1 - }, - "storage": { - "phosphor": 25, - "inlineSvg": 1 - }, - "times": { - "phosphor": 13, - "inlineSvg": 0 - }, - "todo": { - "phosphor": 22, - "inlineSvg": 0 - }, - "uload": { - "phosphor": 3, - "inlineSvg": 0 - }, - "wisekeep": { - "phosphor": 2, - "inlineSvg": 0 - }, - "zitare": { - "phosphor": 9, - "inlineSvg": 0 } } }, "modals": { "adoption": 19, - "total": 63, - "sharedUsage": 12, - "focusTrapUsage": 6 + "total": 21, + "sharedUsage": 4, + "focusTrapUsage": 0 }, "packages": { - "coreAdoption": 90, - "totalApps": 30, + "coreAdoption": 92, + "totalApps": 2, "perPackage": { "Auth": { - "count": 30, - "total": 30, + "count": 2, + "total": 2, "adoption": 100 }, "UI": { - "count": 29, - "total": 30, - "adoption": 97 + "count": 2, + "total": 2, + "adoption": 100 }, "Theme": { - "count": 25, - "total": 30, - "adoption": 83 + "count": 2, + "total": 2, + "adoption": 100 }, "Branding": { - "count": 29, - "total": 30, - "adoption": 97 + "count": 1, + "total": 2, + "adoption": 50 }, "i18n": { - "count": 24, - "total": 30, - "adoption": 80 + "count": 2, + "total": 2, + "adoption": 100 }, "Error Tracking": { - "count": 25, - "total": 30, - "adoption": 83 + "count": 2, + "total": 2, + "adoption": 100 }, "Icons": { - "count": 26, - "total": 30, - "adoption": 87 + "count": 2, + "total": 2, + "adoption": 100 }, "Local Store": { - "count": 28, - "total": 30, - "adoption": 93 + "count": 2, + "total": 2, + "adoption": 100 } } }, "errors": { - "adoption": 16, - "inline": 217, - "shared": 40 + "adoption": 0, + "inline": 103, + "shared": 0 }, "i18n": { - "adoption": 87, - "withI18n": 26, - "without": 4 + "adoption": 50, + "withI18n": 1, + "without": 1 }, "localFirst": { - "adoption": 93, - "count": 28 + "adoption": 100, + "count": 2 }, "styles": { - "themeAdoption": 83, - "tailwindAdoption": 90 + "themeAdoption": 50, + "tailwindAdoption": 100 }, "errorBoundaries": { - "adoption": 52, - "errorAdoption": 27, - "offlineAdoption": 77, - "appsWithErrorPage": 8, - "appsWithOfflinePage": 23, + "adoption": 50, + "errorAdoption": 50, + "offlineAdoption": 50, + "appsWithErrorPage": 1, + "appsWithOfflinePage": 1, "missing": { - "error": [ - "calc", - "chat", - "citycorners", - "clock", - "context", - "cards", - "manavoxel", - "memoro", - "moodlit", - "mukke", - "news", - "nutriphi", - "photos", - "picture", - "planta", - "playground", - "questions", - "skilltree", - "storage", - "uload", - "wisekeep", - "zitare" - ], - "offline": ["manavoxel", "memoro", "moodlit", "news", "playground", "uload", "wisekeep"] + "error": ["manavoxel"], + "offline": ["manavoxel"] } }, "typescript": { "adoption": 100, - "strictApps": 30, + "strictApps": 2, "nonStrict": [] }, "tests": { - "adoption": 73, - "e2eAdoption": 13, - "appsWithTests": 22, - "appsWithE2e": 4, - "totalTestFiles": 122, - "noTests": [ - "calc", - "inventar", - "manavoxel", - "moodlit", - "news", - "playground", - "uload", - "wisekeep" - ] + "adoption": 50, + "e2eAdoption": 50, + "appsWithTests": 1, + "appsWithE2e": 1, + "totalTestFiles": 27, + "noTests": ["manavoxel"] }, "pwa": { - "adoption": 4, - "manifestAdoption": 7, + "adoption": 0, + "manifestAdoption": 0, "swAdoption": 0, - "appsWithManifest": 2, + "appsWithManifest": 0, "appsWithServiceWorker": 0, - "noPwa": [ - "calc", - "calendar", - "chat", - "citycorners", - "clock", - "contacts", - "context", - "inventar", - "mana", - "cards", - "manavoxel", - "matrix", - "moodlit", - "mukke", - "news", - "nutriphi", - "photos", - "picture", - "planta", - "playground", - "presi", - "questions", - "skilltree", - "storage", - "times", - "todo", - "wisekeep", - "zitare" - ] + "noPwa": ["mana", "manavoxel"] }, "fileSizes": { - "adoption": 0, - "totalLargeFiles": 42, + "adoption": 79, + "totalLargeFiles": 7, "largestFile": { - "path": "matrix: lib/matrix/store.svelte.ts", - "lines": 2019 + "path": "mana: routes/(app)/llm-test/+page.svelte", + "lines": 1138 }, "topOffenders": [ { - "app": "matrix", - "file": "lib/matrix/store.svelte.ts", - "lines": 2019 + "app": "mana", + "file": "routes/(app)/llm-test/+page.svelte", + "lines": 1138 }, { - "app": "calendar", - "file": "lib/components/event/QuickEventOverlay.svelte", - "lines": 1816 + "app": "mana", + "file": "lib/modules/dreams/ListView.svelte", + "lines": 1070 }, { - "app": "contacts", - "file": "lib/components/ContactDetailModal.svelte", - "lines": 1502 + "app": "mana", + "file": "lib/data/sync.ts", + "lines": 1001 }, { - "app": "todo", - "file": "lib/components/TaskItem.svelte", - "lines": 1194 + "app": "mana", + "file": "routes/(app)/zitare/lists/[id]/+page.svelte", + "lines": 951 }, { - "app": "todo", - "file": "lib/components/board-views/ViewEditorModal.svelte", - "lines": 1187 + "app": "manavoxel", + "file": "lib/engine/game.ts", + "lines": 757 }, { - "app": "contacts", - "file": "lib/components/NewContactModal.svelte", - "lines": 1130 + "app": "manavoxel", + "file": "routes/+page.svelte", + "lines": 704 }, { - "app": "zitare", - "file": "routes/(app)/lists/[id]/+page.svelte", - "lines": 958 - }, - { - "app": "calendar", - "file": "lib/components/calendar/WeekView.svelte", - "lines": 946 - }, - { - "app": "calendar", - "file": "routes/(app)/settings/sync/+page.svelte", - "lines": 898 - }, - { - "app": "matrix", - "file": "routes/(auth)/login/+page.svelte", - "lines": 849 + "app": "manavoxel", + "file": "lib/editor/sprite-editor.svelte", + "lines": 538 } ] }, "todos": { - "totalCount": 33, + "totalCount": 7, "perApp": { - "mana": 13, - "memoro": 11, - "contacts": 5, - "todo": 2, - "chat": 1, - "picture": 1 + "mana": 7 } }, "securityHeaders": { - "adoption": 73, - "appsWithHeaders": 22, - "missing": [ - "manavoxel", - "memoro", - "moodlit", - "news", - "playground", - "times", - "uload", - "wisekeep" - ] + "adoption": 50, + "appsWithHeaders": 1, + "missing": ["manavoxel"] }, "skeletons": { - "adoption": 77, - "appsWithSkeletons": 23, - "missing": ["citycorners", "cards", "manavoxel", "planta", "presi", "times", "zitare"] + "adoption": 50, + "appsWithSkeletons": 1, + "missing": ["manavoxel"] }, "toasts": { "adoption": 100, - "sharedToast": 204, + "sharedToast": 36, "customToast": 0 }, "storePattern": { - "adoption": 94, - "totalRunesStores": 177, - "totalOldStores": 12, - "appsWithRunesStores": 24, - "appsWithOldStores": 5 + "adoption": 100, + "totalRunesStores": 9, + "totalOldStores": 0, + "appsWithRunesStores": 1, + "appsWithOldStores": 0 }, "sharedTypes": { - "adoption": 53, - "sharedTypeImports": 8, - "localTypeFiles": 7 + "adoption": 5, + "sharedTypeImports": 2, + "localTypeFiles": 40 }, "depFreshness": { - "adoption": 80, - "totalDeps": 1106, - "avgDepsPerApp": 37 + "adoption": 60, + "totalDeps": 96, + "avgDepsPerApp": 48 }, "bundleSize": { "adoption": 100, - "appsWithBundleConfig": 30 + "appsWithBundleConfig": 2 }, "gitActivity": { - "adoption": 97, - "activeApps": 29, + "adoption": 100, + "activeApps": 2, "perApp": { - "mana": 166, - "todo": 135, - "calendar": 125, - "contacts": 95, - "mukke": 90, - "storage": 87, - "zitare": 80, - "chat": 73, - "picture": 70, - "presi": 68, - "clock": 64, - "cards": 63, - "citycorners": 61, - "nutriphi": 56, - "photos": 56, - "planta": 55, - "context": 48, - "matrix": 48, - "skilltree": 46, - "questions": 39, - "inventar": 19, - "playground": 18, - "manavoxel": 11, - "uload": 10, - "calc": 6, - "moodlit": 5, - "times": 5, - "news": 4, - "wisekeep": 4, - "memoro": 0 + "mana": 94, + "manavoxel": 16 } }, "a11y": { - "adoption": 36, + "adoption": 33, "altAdoption": 100, "dialogAdoption": 0, - "trapAdoption": 7, - "totalImgFiles": 21, - "totalImgWithAlt": 21 + "trapAdoption": 0, + "totalImgFiles": 7, + "totalImgWithAlt": 7 }, "authGuard": { - "adoption": 83, - "appsWithAuthGuard": 25, - "missing": ["mana", "manavoxel", "matrix", "memoro", "playground"] + "adoption": 50, + "appsWithAuthGuard": 1, + "missing": ["manavoxel"] }, "docker": { - "adoption": 80, - "appsWithDockerfile": 24, - "missing": ["context", "moodlit", "news", "planta", "questions", "wisekeep"] + "adoption": 100, + "appsWithDockerfile": 2, + "missing": [] } }, - "apps": [ - "calc", - "calendar", - "chat", - "citycorners", - "clock", - "contacts", - "context", - "inventar", - "mana", - "cards", - "manavoxel", - "matrix", - "memoro", - "moodlit", - "mukke", - "news", - "nutriphi", - "photos", - "picture", - "planta", - "playground", - "presi", - "questions", - "skilltree", - "storage", - "times", - "todo", - "uload", - "wisekeep", - "zitare" - ] + "apps": ["mana", "manavoxel"] } diff --git a/docker/grafana/dashboards/logs-explorer.json b/docker/grafana/dashboards/logs-explorer.json index 4b4eed447..1ab6a7237 100644 --- a/docker/grafana/dashboards/logs-explorer.json +++ b/docker/grafana/dashboards/logs-explorer.json @@ -1,5 +1,7 @@ { - "annotations": { "list": [] }, + "annotations": { + "list": [] + }, "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 1, @@ -8,17 +10,27 @@ "panels": [ { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, "id": 1, "panels": [], "title": "Overview", "type": "row" }, { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, @@ -26,68 +38,115 @@ "barAlignment": 0, "drawStyle": "bars", "fillOpacity": 80, - "stacking": { "group": "A", "mode": "normal" } + "stacking": { + "group": "A", + "mode": "normal" + } } } }, - "gridPos": { "h": 6, "w": 12, "x": 0, "y": 1 }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 1 + }, "id": 2, "title": "Log Volume by Tier", "type": "timeseries", "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "sum by (tier) (count_over_time({tier=~\".+\"} [$__interval]))", "refId": "A" } ] }, { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "drawStyle": "bars", "fillOpacity": 80, - "stacking": { "group": "A", "mode": "normal" } + "stacking": { + "group": "A", + "mode": "normal" + } } } }, - "gridPos": { "h": 6, "w": 12, "x": 12, "y": 1 }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 1 + }, "id": 3, "title": "Errors & Warnings", "type": "timeseries", "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "sum by (level) (count_over_time({tier=~\".+\"} |~ \"(?i)(error|warn|fatal|panic)\" [$__interval]))", "refId": "A" } ] }, { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "fieldConfig": { "defaults": { "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "green", "value": null }, - { "color": "yellow", "value": 50 }, - { "color": "red", "value": 200 } + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "red", + "value": 200 + } ] } } }, - "gridPos": { "h": 6, "w": 6, "x": 0, "y": 7 }, + "gridPos": { + "h": 6, + "w": 6, + "x": 0, + "y": 7 + }, "id": 4, "title": "Errors (last 1h)", "type": "stat", "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "sum(count_over_time({tier=~\".+\"} |~ \"(?i)(error|fatal|panic)\" [1h]))", "refId": "A", "instant": true @@ -95,27 +154,47 @@ ] }, { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "fieldConfig": { "defaults": { "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "green", "value": null }, - { "color": "yellow", "value": 100 }, - { "color": "red", "value": 500 } + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 100 + }, + { + "color": "red", + "value": 500 + } ] } } }, - "gridPos": { "h": 6, "w": 6, "x": 6, "y": 7 }, + "gridPos": { + "h": 6, + "w": 6, + "x": 6, + "y": 7 + }, "id": 5, "title": "Warnings (last 1h)", "type": "stat", "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "sum(count_over_time({tier=~\".+\"} |~ \"(?i)warn\" [1h]))", "refId": "A", "instant": true @@ -123,20 +202,36 @@ ] }, { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { "displayMode": "gradient", "showValue": "auto" } + "color": { + "mode": "palette-classic" + }, + "custom": { + "displayMode": "gradient", + "showValue": "auto" + } } }, - "gridPos": { "h": 6, "w": 12, "x": 12, "y": 7 }, + "gridPos": { + "h": 6, + "w": 12, + "x": 12, + "y": 7 + }, "id": 6, "title": "Top 10 Noisiest Services", "type": "barchart", "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "topk(10, sum by (service) (count_over_time({tier=~\".+\"} [1h])))", "refId": "A", "instant": true @@ -145,15 +240,28 @@ }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 13 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 13 + }, "id": 10, "panels": [], "title": "Error Logs", "type": "row" }, { - "datasource": { "type": "loki", "uid": "loki" }, - "gridPos": { "h": 10, "w": 24, "x": 0, "y": 14 }, + "datasource": { + "type": "loki", + "uid": "loki" + }, + "gridPos": { + "h": 10, + "w": 24, + "x": 0, + "y": 14 + }, "id": 11, "title": "Errors across all services", "type": "logs", @@ -169,7 +277,10 @@ }, "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "{tier=~\".+\"} |~ \"(?i)(error|fatal|panic)\"", "refId": "A" } @@ -177,12 +288,25 @@ }, { "collapsed": true, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 24 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 24 + }, "id": 20, "panels": [ { - "datasource": { "type": "loki", "uid": "loki" }, - "gridPos": { "h": 12, "w": 24, "x": 0, "y": 25 }, + "datasource": { + "type": "loki", + "uid": "loki" + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 25 + }, "id": 21, "title": "Auth Service Logs", "type": "logs", @@ -195,7 +319,10 @@ }, "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "{tier=\"auth\"}", "refId": "A" } @@ -207,12 +334,25 @@ }, { "collapsed": true, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 25 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 25 + }, "id": 30, "panels": [ { - "datasource": { "type": "loki", "uid": "loki" }, - "gridPos": { "h": 12, "w": 24, "x": 0, "y": 26 }, + "datasource": { + "type": "loki", + "uid": "loki" + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 26 + }, "id": 31, "title": "Core Service Logs", "type": "logs", @@ -225,7 +365,10 @@ }, "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "{tier=\"core\"}", "refId": "A" } @@ -237,12 +380,25 @@ }, { "collapsed": true, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 26 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, "id": 40, "panels": [ { - "datasource": { "type": "loki", "uid": "loki" }, - "gridPos": { "h": 12, "w": 24, "x": 0, "y": 27 }, + "datasource": { + "type": "loki", + "uid": "loki" + }, + "gridPos": { + "h": 12, + "w": 24, + "x": 0, + "y": 27 + }, "id": 41, "title": "Web App Logs", "type": "logs", @@ -255,7 +411,10 @@ }, "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "{tier=\"app\"} | service =~ \"$service\"", "refId": "A" } @@ -264,36 +423,6 @@ ], "title": "Web Apps", "type": "row" - }, - { - "collapsed": true, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 27 }, - "id": 50, - "panels": [ - { - "datasource": { "type": "loki", "uid": "loki" }, - "gridPos": { "h": 12, "w": 24, "x": 0, "y": 28 }, - "id": 51, - "title": "Matrix Stack Logs", - "type": "logs", - "options": { - "showTime": true, - "showLabels": true, - "wrapLogMessage": true, - "enableLogDetails": true, - "sortOrder": "Descending" - }, - "targets": [ - { - "datasource": { "type": "loki", "uid": "loki" }, - "expr": "{tier=\"matrix\"}", - "refId": "A" - } - ] - } - ], - "title": "Matrix Stack", - "type": "row" } ], "refresh": "30s", @@ -302,8 +431,15 @@ "templating": { "list": [ { - "current": { "selected": false, "text": "All", "value": "$__all" }, - "datasource": { "type": "loki", "uid": "loki" }, + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "definition": "label_values(service)", "includeAll": true, "multi": true, @@ -313,8 +449,15 @@ "type": "query" }, { - "current": { "selected": false, "text": "All", "value": "$__all" }, - "datasource": { "type": "loki", "uid": "loki" }, + "current": { + "selected": false, + "text": "All", + "value": "$__all" + }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "definition": "label_values(tier)", "includeAll": true, "multi": true, @@ -325,7 +468,10 @@ } ] }, - "time": { "from": "now-1h", "to": "now" }, + "time": { + "from": "now-1h", + "to": "now" + }, "timepicker": {}, "timezone": "browser", "title": "Logs Explorer", diff --git a/docker/grafana/dashboards/master-overview.json b/docker/grafana/dashboards/master-overview.json index 0d51bb3ca..335471d55 100644 --- a/docker/grafana/dashboards/master-overview.json +++ b/docker/grafana/dashboards/master-overview.json @@ -21,31 +21,55 @@ "panels": [ { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 0 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, "id": 100, "panels": [], "title": "Key Metrics", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "red", "value": null }, - { "color": "yellow", "value": 0.8 }, - { "color": "green", "value": 1 } + { + "color": "red", + "value": null + }, + { + "color": "yellow", + "value": 0.8 + }, + { + "color": "green", + "value": 1 + } ] }, "unit": "percentunit" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 3, "x": 0, "y": 1 }, + "gridPos": { + "h": 4, + "w": 3, + "x": 0, + "y": 1 + }, "id": 101, "options": { "colorMode": "background", @@ -62,7 +86,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "sum(up{job=~\".*-backend|mana-auth\"}) / count(up{job=~\".*-backend|mana-auth\"})", "legendFormat": "Services Healthy", "refId": "A" @@ -72,20 +99,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "blue", "value": null }] + "steps": [ + { + "color": "blue", + "value": null + } + ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 3, "x": 3, "y": 1 }, + "gridPos": { + "h": 4, + "w": 3, + "x": 3, + "y": 1 + }, "id": 102, "options": { "colorMode": "background", @@ -102,7 +144,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "count(up{job=~\".*-backend\"})", "legendFormat": "Backend Apps", "refId": "A" @@ -112,61 +157,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], - "noValue": "0", "thresholds": { "mode": "absolute", - "steps": [{ "color": "purple", "value": null }] + "steps": [ + { + "color": "super-light-blue", + "value": null + } + ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 3, "x": 6, "y": 1 }, - "id": 103, - "options": { - "colorMode": "background", - "graphMode": "none", - "justifyMode": "center", - "orientation": "auto", - "reduceOptions": { - "calcs": ["lastNotNull"], - "fields": "", - "values": false - }, - "textMode": "value_and_name" + "gridPos": { + "h": 4, + "w": 3, + "x": 9, + "y": 1 }, - "pluginVersion": "10.0.0", - "targets": [ - { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "expr": "count(up{job=~\"matrix-.*-bot\"})", - "legendFormat": "Matrix Bots", - "refId": "A" - } - ], - "title": "Matrix Bots", - "type": "stat" - }, - { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "fieldConfig": { - "defaults": { - "color": { "mode": "thresholds" }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [{ "color": "super-light-blue", "value": null }] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { "h": 4, "w": 3, "x": 9, "y": 1 }, "id": 7, "options": { "colorMode": "background", @@ -183,7 +202,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "auth_users_total", "legendFormat": "Users", "refId": "A" @@ -193,20 +215,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "orange", "value": null }] + "steps": [ + { + "color": "orange", + "value": null + } + ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 3, "x": 12, "y": 1 }, + "gridPos": { + "h": 4, + "w": 3, + "x": 12, + "y": 1 + }, "id": 106, "options": { "colorMode": "background", @@ -223,7 +260,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "sum(http_requests_total)", "legendFormat": "Total", "refId": "A" @@ -233,20 +273,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "semi-dark-yellow", "value": null }] + "steps": [ + { + "color": "semi-dark-yellow", + "value": null + } + ] }, "unit": "reqps" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 3, "x": 15, "y": 1 }, + "gridPos": { + "h": 4, + "w": 3, + "x": 15, + "y": 1 + }, "id": 107, "options": { "colorMode": "background", @@ -263,7 +318,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "sum(rate(http_requests_total[5m]))", "legendFormat": "Req/s", "refId": "A" @@ -273,24 +331,43 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "green", "value": null }, - { "color": "yellow", "value": 0.2 }, - { "color": "red", "value": 0.5 } + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 0.2 + }, + { + "color": "red", + "value": 0.5 + } ] }, "unit": "s" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 3, "x": 18, "y": 1 }, + "gridPos": { + "h": 4, + "w": 3, + "x": 18, + "y": 1 + }, "id": 104, "options": { "colorMode": "background", @@ -307,7 +384,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "avg(rate(http_request_duration_seconds_sum[5m]) / rate(http_request_duration_seconds_count[5m]))", "legendFormat": "Avg Response", "refId": "A" @@ -317,24 +397,43 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "green", "value": null }, - { "color": "yellow", "value": 0.01 }, - { "color": "red", "value": 0.05 } + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 0.01 + }, + { + "color": "red", + "value": 0.05 + } ] }, "unit": "percentunit" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 3, "x": 21, "y": 1 }, + "gridPos": { + "h": 4, + "w": 3, + "x": 21, + "y": 1 + }, "id": 9, "options": { "colorMode": "background", @@ -351,7 +450,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "sum(rate(http_requests_total{status=~\"5..\"}[5m])) / sum(rate(http_requests_total[5m]))", "legendFormat": "Error Rate", "refId": "A" @@ -362,22 +464,40 @@ }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 5 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 5 + }, "id": 1, "panels": [], "title": "Service Health", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [ { "options": { - "0": { "color": "red", "index": 1, "text": "DOWN" }, - "1": { "color": "green", "index": 0, "text": "UP" } + "0": { + "color": "red", + "index": 1, + "text": "DOWN" + }, + "1": { + "color": "green", + "index": 0, + "text": "UP" + } }, "type": "value" } @@ -385,14 +505,25 @@ "thresholds": { "mode": "absolute", "steps": [ - { "color": "red", "value": null }, - { "color": "green", "value": 1 } + { + "color": "red", + "value": null + }, + { + "color": "green", + "value": 1 + } ] } }, "overrides": [] }, - "gridPos": { "h": 3, "w": 24, "x": 0, "y": 6 }, + "gridPos": { + "h": 3, + "w": 24, + "x": 0, + "y": 6 + }, "id": 2, "options": { "colorMode": "background", @@ -409,115 +540,172 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"mana-auth\"}", "legendFormat": "Auth", "refId": "A" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"chat-backend\"}", "legendFormat": "Chat", "refId": "B" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"todo-backend\"}", "legendFormat": "Todo", "refId": "C" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"calendar-backend\"}", "legendFormat": "Calendar", "refId": "D" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"clock-backend\"}", "legendFormat": "Clock", "refId": "E" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"contacts-backend\"}", "legendFormat": "Contacts", "refId": "F" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"storage-backend\"}", "legendFormat": "Storage", "refId": "J" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"presi-backend\"}", "legendFormat": "Presi", "refId": "K" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"nutriphi-backend\"}", "legendFormat": "NutriPhi", "refId": "L" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"skilltree-backend\"}", "legendFormat": "SkillTree", "refId": "M" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"photos-backend\"}", "legendFormat": "Photos", "refId": "N" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"zitare-backend\"}", "legendFormat": "Zitare", "refId": "O" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"music-backend\"}", "legendFormat": "Music", "refId": "P" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"planta-backend\"}", "legendFormat": "Planta", "refId": "Q" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"picture-backend\"}", "legendFormat": "Picture", "refId": "R" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"mana-search\"}", "legendFormat": "Search", "refId": "S" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "up{job=\"mana-media\"}", "legendFormat": "Media", "refId": "T" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "pg_up", "legendFormat": "PostgreSQL", "refId": "G" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "redis_up", "legendFormat": "Redis", "refId": "H" @@ -528,17 +716,27 @@ }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 9 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 9 + }, "id": 10, "panels": [], "title": "Traffic & Performance", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, @@ -549,27 +747,48 @@ "drawStyle": "line", "fillOpacity": 20, "gradientMode": "opacity", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "insertNulls": false, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "never", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "reqps" }, "overrides": [] }, - "gridPos": { "h": 8, "w": 8, "x": 0, "y": 10 }, + "gridPos": { + "h": 8, + "w": 8, + "x": 0, + "y": 10 + }, "id": 11, "options": { "legend": { @@ -578,11 +797,17 @@ "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "multi", "sort": "desc" } + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "sum(rate(http_requests_total[5m])) by (job)", "legendFormat": "{{job}}", "refId": "A" @@ -592,10 +817,15 @@ "type": "timeseries" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, @@ -606,27 +836,48 @@ "drawStyle": "line", "fillOpacity": 20, "gradientMode": "opacity", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "insertNulls": false, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "never", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "s" }, "overrides": [] }, - "gridPos": { "h": 8, "w": 8, "x": 8, "y": 10 }, + "gridPos": { + "h": 8, + "w": 8, + "x": 8, + "y": 10 + }, "id": 12, "options": { "legend": { @@ -635,11 +886,17 @@ "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "multi", "sort": "desc" } + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket[5m])) by (le, job))", "legendFormat": "p95 {{job}}", "refId": "A" @@ -649,10 +906,15 @@ "type": "timeseries" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, @@ -663,32 +925,64 @@ "drawStyle": "line", "fillOpacity": 20, "gradientMode": "opacity", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "insertNulls": false, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "never", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "percentunit" }, "overrides": [ { - "matcher": { "id": "byRegexp", "options": ".*" }, - "properties": [{ "id": "color", "value": { "fixedColor": "red", "mode": "fixed" } }] + "matcher": { + "id": "byRegexp", + "options": ".*" + }, + "properties": [ + { + "id": "color", + "value": { + "fixedColor": "red", + "mode": "fixed" + } + } + ] } ] }, - "gridPos": { "h": 8, "w": 8, "x": 16, "y": 10 }, + "gridPos": { + "h": 8, + "w": 8, + "x": 16, + "y": 10 + }, "id": 13, "options": { "legend": { @@ -697,11 +991,17 @@ "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "multi", "sort": "desc" } + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "sum(rate(http_requests_total{status=~\"5..\"}[5m])) by (job) / sum(rate(http_requests_total[5m])) by (job)", "legendFormat": "{{job}}", "refId": "A" @@ -712,17 +1012,27 @@ }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 18 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 18 + }, "id": 14, "panels": [], "title": "Infrastructure", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, @@ -733,27 +1043,48 @@ "drawStyle": "line", "fillOpacity": 20, "gradientMode": "opacity", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "insertNulls": false, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "never", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "decbytes" }, "overrides": [] }, - "gridPos": { "h": 7, "w": 12, "x": 0, "y": 19 }, + "gridPos": { + "h": 7, + "w": 12, + "x": 0, + "y": 19 + }, "id": 16, "options": { "legend": { @@ -762,11 +1093,17 @@ "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "multi", "sort": "desc" } + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "pg_database_size_bytes{datname!~\"template.*|postgres\"}", "legendFormat": "{{datname}}", "refId": "A" @@ -776,10 +1113,15 @@ "type": "timeseries" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, @@ -790,27 +1132,48 @@ "drawStyle": "line", "fillOpacity": 20, "gradientMode": "opacity", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "insertNulls": false, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "never", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "decbytes" }, "overrides": [] }, - "gridPos": { "h": 7, "w": 12, "x": 12, "y": 19 }, + "gridPos": { + "h": 7, + "w": 12, + "x": 12, + "y": 19 + }, "id": 105, "options": { "legend": { @@ -819,17 +1182,26 @@ "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "multi", "sort": "desc" } + "tooltip": { + "mode": "multi", + "sort": "desc" + } }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "redis_memory_used_bytes", "legendFormat": "Redis Used", "refId": "A" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "redis_memory_max_bytes", "legendFormat": "Redis Max", "refId": "B" @@ -840,31 +1212,55 @@ }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 26 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 26 + }, "id": 17, "panels": [], "title": "Database & Cache", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "red", "value": null }, - { "color": "yellow", "value": 90 }, - { "color": "green", "value": 95 } + { + "color": "red", + "value": null + }, + { + "color": "yellow", + "value": 90 + }, + { + "color": "green", + "value": 95 + } ] }, "unit": "percent" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 4, "x": 0, "y": 27 }, + "gridPos": { + "h": 4, + "w": 4, + "x": 0, + "y": 27 + }, "id": 18, "options": { "colorMode": "value", @@ -880,7 +1276,10 @@ }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "avg(pg_stat_database_blks_hit{datname!~\"template.*|postgres\"} / (pg_stat_database_blks_hit{datname!~\"template.*|postgres\"} + pg_stat_database_blks_read{datname!~\"template.*|postgres\"} + 0.0001)) * 100", "refId": "A" } @@ -889,24 +1288,43 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "green", "value": null }, - { "color": "yellow", "value": 50 }, - { "color": "red", "value": 80 } + { + "color": "green", + "value": null + }, + { + "color": "yellow", + "value": 50 + }, + { + "color": "red", + "value": 80 + } ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 4, "x": 4, "y": 27 }, + "gridPos": { + "h": 4, + "w": 4, + "x": 4, + "y": 27 + }, "id": 19, "options": { "colorMode": "value", @@ -922,7 +1340,10 @@ }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "sum(pg_stat_activity_count)", "refId": "A" } @@ -931,24 +1352,43 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ - { "color": "red", "value": null }, - { "color": "yellow", "value": 90 }, - { "color": "green", "value": 95 } + { + "color": "red", + "value": null + }, + { + "color": "yellow", + "value": 90 + }, + { + "color": "green", + "value": 95 + } ] }, "unit": "percent" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 4, "x": 8, "y": 27 }, + "gridPos": { + "h": 4, + "w": 4, + "x": 8, + "y": 27 + }, "id": 20, "options": { "colorMode": "value", @@ -964,7 +1404,10 @@ }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "redis_keyspace_hits_total / (redis_keyspace_hits_total + redis_keyspace_misses_total) * 100", "refId": "A" } @@ -973,20 +1416,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "decbytes" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 4, "x": 12, "y": 27 }, + "gridPos": { + "h": 4, + "w": 4, + "x": 12, + "y": 27 + }, "id": 21, "options": { "colorMode": "value", @@ -1002,7 +1460,10 @@ }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "redis_memory_used_bytes", "refId": "A" } @@ -1011,20 +1472,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 4, "x": 16, "y": 27 }, + "gridPos": { + "h": 4, + "w": 4, + "x": 16, + "y": 27 + }, "id": 22, "options": { "colorMode": "value", @@ -1040,7 +1516,10 @@ }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "redis_db_keys", "refId": "A" } @@ -1049,20 +1528,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "decbytes" }, "overrides": [] }, - "gridPos": { "h": 4, "w": 4, "x": 20, "y": 27 }, + "gridPos": { + "h": 4, + "w": 4, + "x": 20, + "y": 27 + }, "id": 23, "options": { "colorMode": "value", @@ -1078,7 +1572,10 @@ }, "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "sum(pg_database_size_bytes{datname!~\"template.*|postgres\"})", "refId": "A" } @@ -1088,17 +1585,27 @@ }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 31 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 31 + }, "id": 24, "panels": [], "title": "User Growth", "type": "row" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "axisBorderShow": false, "axisCenteredZero": false, @@ -1109,27 +1616,48 @@ "drawStyle": "line", "fillOpacity": 20, "gradientMode": "opacity", - "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, "insertNulls": false, "lineInterpolation": "smooth", "lineWidth": 2, "pointSize": 5, - "scaleDistribution": { "type": "linear" }, + "scaleDistribution": { + "type": "linear" + }, "showPoints": "auto", "spanNulls": false, - "stacking": { "group": "A", "mode": "none" }, - "thresholdsStyle": { "mode": "off" } + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "green", "value": null }] + "steps": [ + { + "color": "green", + "value": null + } + ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 6, "w": 12, "x": 0, "y": 32 }, + "gridPos": { + "h": 6, + "w": 12, + "x": 0, + "y": 32 + }, "id": 25, "options": { "legend": { @@ -1138,12 +1666,18 @@ "placement": "bottom", "showLegend": true }, - "tooltip": { "mode": "single", "sort": "none" } + "tooltip": { + "mode": "single", + "sort": "none" + } }, "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "auth_users_total", "legendFormat": "Total Users", "refId": "A" @@ -1153,20 +1687,35 @@ "type": "timeseries" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "orange", "value": null }] + "steps": [ + { + "color": "orange", + "value": null + } + ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 6, "w": 4, "x": 12, "y": 32 }, + "gridPos": { + "h": 6, + "w": 4, + "x": 12, + "y": 32 + }, "id": 26, "options": { "colorMode": "value", @@ -1183,7 +1732,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "auth_users_created_today", "legendFormat": "Today", "refId": "A" @@ -1193,20 +1745,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "blue", "value": null }] + "steps": [ + { + "color": "blue", + "value": null + } + ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 6, "w": 4, "x": 16, "y": 32 }, + "gridPos": { + "h": 6, + "w": 4, + "x": 16, + "y": 32 + }, "id": 27, "options": { "colorMode": "value", @@ -1223,7 +1790,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "auth_users_created_this_week", "legendFormat": "This Week", "refId": "A" @@ -1233,20 +1803,35 @@ "type": "stat" }, { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "fieldConfig": { "defaults": { - "color": { "mode": "thresholds" }, + "color": { + "mode": "thresholds" + }, "mappings": [], "thresholds": { "mode": "absolute", - "steps": [{ "color": "purple", "value": null }] + "steps": [ + { + "color": "purple", + "value": null + } + ] }, "unit": "short" }, "overrides": [] }, - "gridPos": { "h": 6, "w": 4, "x": 20, "y": 32 }, + "gridPos": { + "h": 6, + "w": 4, + "x": 20, + "y": 32 + }, "id": 28, "options": { "colorMode": "value", @@ -1263,7 +1848,10 @@ "pluginVersion": "10.0.0", "targets": [ { - "datasource": { "type": "prometheus", "uid": "${datasource}" }, + "datasource": { + "type": "prometheus", + "uid": "${datasource}" + }, "expr": "auth_users_created_this_month", "legendFormat": "This Month", "refId": "A" @@ -1274,15 +1862,28 @@ }, { "collapsed": false, - "gridPos": { "h": 1, "w": 24, "x": 0, "y": 99 }, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 99 + }, "id": 900, "panels": [], "title": "Recent Errors (Loki)", "type": "row" }, { - "datasource": { "type": "loki", "uid": "loki" }, - "gridPos": { "h": 8, "w": 24, "x": 0, "y": 100 }, + "datasource": { + "type": "loki", + "uid": "loki" + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 100 + }, "id": 901, "title": "Errors across all services (last 30 min)", "type": "logs", @@ -1298,7 +1899,10 @@ }, "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "{tier=~\".+\"} |~ \"(?i)(error|fatal|panic)\" | tier != \"other\"", "refId": "A" } @@ -1312,45 +1916,79 @@ ] }, { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, + "color": { + "mode": "palette-classic" + }, "custom": { "drawStyle": "bars", "fillOpacity": 70, - "stacking": { "group": "A", "mode": "normal" } + "stacking": { + "group": "A", + "mode": "normal" + } } } }, - "gridPos": { "h": 5, "w": 12, "x": 0, "y": 108 }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 108 + }, "id": 902, "title": "Error Rate by Service (last 1h)", "type": "timeseries", "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "sum by (service) (count_over_time({tier=~\".+\"} |~ \"(?i)(error|fatal|panic)\" [$__interval]))", "refId": "A" } ] }, { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "fieldConfig": { "defaults": { - "color": { "mode": "palette-classic" }, - "custom": { "displayMode": "gradient", "showValue": "auto" } + "color": { + "mode": "palette-classic" + }, + "custom": { + "displayMode": "gradient", + "showValue": "auto" + } } }, - "gridPos": { "h": 5, "w": 12, "x": 12, "y": 108 }, + "gridPos": { + "h": 5, + "w": 12, + "x": 12, + "y": 108 + }, "id": 903, "title": "Top Error Sources (last 1h)", "type": "barchart", - "options": { "xTickLabelRotation": -45 }, + "options": { + "xTickLabelRotation": -45 + }, "targets": [ { - "datasource": { "type": "loki", "uid": "loki" }, + "datasource": { + "type": "loki", + "uid": "loki" + }, "expr": "topk(8, sum by (service) (count_over_time({tier=~\".+\"} |~ \"(?i)(error|fatal|panic)\" [1h])))", "refId": "A", "instant": true @@ -1364,7 +2002,11 @@ "templating": { "list": [ { - "current": { "selected": false, "text": "Prometheus", "value": "Prometheus" }, + "current": { + "selected": false, + "text": "Prometheus", + "value": "Prometheus" + }, "hide": 0, "includeAll": false, "multi": false, @@ -1378,7 +2020,10 @@ } ] }, - "time": { "from": "now-6h", "to": "now" }, + "time": { + "from": "now-6h", + "to": "now" + }, "timepicker": {}, "timezone": "browser", "title": "Mana Master Overview", diff --git a/packages/notify-client/README.md b/packages/notify-client/README.md index 480e80c11..60a2fa15c 100644 --- a/packages/notify-client/README.md +++ b/packages/notify-client/README.md @@ -125,7 +125,6 @@ new NotifyClient({ ##### Other Channels -- `sendMatrix(options)` - Send a Matrix message - `sendWebhook(options)` - Send a webhook ##### Batch & Management diff --git a/services/mana-llm/CLAUDE.md b/services/mana-llm/CLAUDE.md index 436bc036a..a4cbb5b05 100644 --- a/services/mana-llm/CLAUDE.md +++ b/services/mana-llm/CLAUDE.md @@ -17,7 +17,7 @@ mana-llm acts as a central gateway for all LLM requests in the monorepo, providi ``` ┌─────────────────────────────────────────────────────────────────────┐ │ Consumer Apps │ -│ matrix-ollama-bot │ telegram-ollama-bot │ chat-backend │ etc. │ +│ chat-backend │ mana web │ todo (LLM enrich) │ etc. │ └────────────────────────────────┬────────────────────────────────────┘ │ HTTP/SSE ▼ @@ -288,5 +288,3 @@ while (true) { | mana-tts | 3022 | Text-to-speech service | | mana-stt | 3023 | Speech-to-text service | | mana-search | 3021 | Web search & extraction | -| matrix-ollama-bot | - | Matrix bot (consumer) | -| telegram-ollama-bot | - | Telegram bot (consumer) | diff --git a/services/mana-video-gen/CLAUDE.md b/services/mana-video-gen/CLAUDE.md index 473bd809f..78e64c628 100644 --- a/services/mana-video-gen/CLAUDE.md +++ b/services/mana-video-gen/CLAUDE.md @@ -151,7 +151,6 @@ The GPU server runs multiple AI services. LTX-Video uses ~10 GB VRAM: Used by: - **Picture App** — video generation alongside images - **Chat App** — inline video generation -- **Matrix Bots** — video generation via chat commands ### Example (TypeScript)