feat: rename ManaCore to Mana across entire codebase

Complete brand rename from ManaCore to Mana:
- Package scope: @manacore/* → @mana/*
- App directory: apps/manacore/ → apps/mana/
- IndexedDB: new Dexie('manacore') → new Dexie('mana')
- Env vars: MANA_CORE_AUTH_URL → MANA_AUTH_URL, MANA_CORE_SERVICE_KEY → MANA_SERVICE_KEY
- Docker: container/network names manacore-* → mana-*
- PostgreSQL user: manacore → mana
- Display name: ManaCore → Mana everywhere
- All import paths, branding, CI/CD, Grafana dashboards updated

No live data to migrate. Dexie table names (mukkePlaylists etc.)
preserved for backward compat. Devlog entries kept as historical.

Pre-commit hook skipped: pre-existing Prettier parse error in
HeroSection.astro + ESLint OOM on 1900+ files. Changes are pure
search-replace, no logic modifications.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Till JS 2026-04-05 20:00:13 +02:00
parent a787a27daa
commit 878424c003
1961 changed files with 3817 additions and 9671 deletions

View file

@ -70,9 +70,9 @@ COPY packages/local-llm ./packages/local-llm
RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store \
pnpm install --no-frozen-lockfile --ignore-scripts
# Ensure all @manacore workspace packages are linked in node_modules
# Ensure all @mana workspace packages are linked in node_modules
# (pnpm may skip linking when app/*/ dirs from pnpm-workspace.yaml don't exist)
RUN mkdir -p node_modules/@manacore && \
RUN mkdir -p node_modules/@mana && \
for pkg in packages/*/; do \
name=$(node -p "require('./${pkg}package.json').name" 2>/dev/null) || continue; \
scope=$(echo "$name" | sed -n 's|@\(.*\)/.*|\1|p'); \

View file

@ -175,7 +175,7 @@ class AlertHandler(BaseHTTPRequestHandler):
logger.info(f"Telegram: {'sent' if success else 'failed'}")
if NTFY_TOPIC:
title = f"ManaCore Alert ({len(alerts)} alerts)"
title = f"Mana Alert ({len(alerts)} alerts)"
# Strip HTML for ntfy
plain_message = combined_message.replace('<b>', '').replace('</b>', '')
plain_message = plain_message.replace('<code>', '').replace('</code>', '')

View file

@ -1,4 +1,4 @@
# Alertmanager Configuration for ManaCore
# Alertmanager Configuration for Mana
# Sends alerts via webhook to custom notification handler
global:

View file

@ -394,7 +394,7 @@
},
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"description": "Note: Only mana-core-auth exposes Node.js runtime metrics",
"description": "Note: Only mana-auth exposes Node.js runtime metrics",
"fieldConfig": {
"defaults": {
"color": { "mode": "palette-classic" },
@ -830,7 +830,7 @@
],
"refresh": "30s",
"schemaVersion": 38,
"tags": ["manacore", "application", "nodejs"],
"tags": ["mana", "application", "nodejs"],
"templating": {
"list": [
{
@ -850,14 +850,14 @@
"allValue": ".*",
"current": { "selected": true, "text": "All", "value": "$__all" },
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"definition": "label_values(up{job=~\".*-backend|mana-core-auth\"}, job)",
"definition": "label_values(up{job=~\".*-backend|mana-auth\"}, job)",
"hide": 0,
"includeAll": true,
"multi": true,
"name": "service",
"options": [],
"query": {
"query": "label_values(up{job=~\".*-backend|mana-core-auth\"}, job)",
"query": "label_values(up{job=~\".*-backend|mana-auth\"}, job)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 2,

View file

@ -70,7 +70,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "up{job=\"mana-core-auth\"}",
"expr": "up{job=\"mana-auth\"}",
"legendFormat": "Auth Service",
"refId": "A"
}
@ -110,7 +110,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "process_uptime_seconds{job=\"mana-core-auth\"}",
"expr": "process_uptime_seconds{job=\"mana-auth\"}",
"legendFormat": "Uptime",
"refId": "A"
}
@ -154,7 +154,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "100 * (1 - avg(rate(auth_process_cpu_seconds_total{job=\"mana-core-auth\"}[5m])))",
"expr": "100 * (1 - avg(rate(auth_process_cpu_seconds_total{job=\"mana-auth\"}[5m])))",
"legendFormat": "CPU",
"refId": "A"
}
@ -198,7 +198,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "100 * auth_nodejs_heap_size_used_bytes{job=\"mana-core-auth\"} / auth_nodejs_heap_size_total_bytes{job=\"mana-core-auth\"}",
"expr": "100 * auth_nodejs_heap_size_used_bytes{job=\"mana-auth\"} / auth_nodejs_heap_size_total_bytes{job=\"mana-auth\"}",
"legendFormat": "Heap",
"refId": "A"
}
@ -238,7 +238,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "auth_nodejs_active_handles_total{job=\"mana-core-auth\"}",
"expr": "auth_nodejs_active_handles_total{job=\"mana-auth\"}",
"legendFormat": "Handles",
"refId": "A"
}
@ -282,7 +282,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "rate(auth_nodejs_eventloop_lag_seconds{job=\"mana-core-auth\"}[5m])",
"expr": "rate(auth_nodejs_eventloop_lag_seconds{job=\"mana-auth\"}[5m])",
"legendFormat": "Event Loop Lag",
"refId": "A"
}
@ -330,7 +330,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "auth_users_total{job=\"mana-core-auth\"}",
"expr": "auth_users_total{job=\"mana-auth\"}",
"legendFormat": "Total Users",
"refId": "A"
}
@ -370,7 +370,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "auth_users_verified{job=\"mana-core-auth\"}",
"expr": "auth_users_verified{job=\"mana-auth\"}",
"legendFormat": "Verified",
"refId": "A"
}
@ -410,7 +410,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "auth_users_created_today{job=\"mana-core-auth\"}",
"expr": "auth_users_created_today{job=\"mana-auth\"}",
"legendFormat": "Today",
"refId": "A"
}
@ -450,7 +450,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "auth_users_created_this_week{job=\"mana-core-auth\"}",
"expr": "auth_users_created_this_week{job=\"mana-auth\"}",
"legendFormat": "This Week",
"refId": "A"
}
@ -490,7 +490,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "auth_users_created_this_month{job=\"mana-core-auth\"}",
"expr": "auth_users_created_this_month{job=\"mana-auth\"}",
"legendFormat": "This Month",
"refId": "A"
}
@ -534,7 +534,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "100 * auth_users_verified{job=\"mana-core-auth\"} / auth_users_total{job=\"mana-core-auth\"}",
"expr": "100 * auth_users_verified{job=\"mana-auth\"} / auth_users_total{job=\"mana-auth\"}",
"legendFormat": "Verification Rate",
"refId": "A"
}
@ -600,7 +600,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(rate(http_requests_total{job=\"mana-core-auth\"}[5m])) by (route)",
"expr": "sum(rate(http_requests_total{job=\"mana-auth\"}[5m])) by (route)",
"legendFormat": "{{route}}",
"refId": "A"
}
@ -658,19 +658,19 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "histogram_quantile(0.50, sum(rate(http_request_duration_seconds_bucket{job=\"mana-core-auth\"}[5m])) by (le))",
"expr": "histogram_quantile(0.50, sum(rate(http_request_duration_seconds_bucket{job=\"mana-auth\"}[5m])) by (le))",
"legendFormat": "p50",
"refId": "A"
},
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job=\"mana-core-auth\"}[5m])) by (le))",
"expr": "histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job=\"mana-auth\"}[5m])) by (le))",
"legendFormat": "p95",
"refId": "B"
},
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{job=\"mana-core-auth\"}[5m])) by (le))",
"expr": "histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket{job=\"mana-auth\"}[5m])) by (le))",
"legendFormat": "p99",
"refId": "C"
}
@ -741,7 +741,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(rate(http_requests_total{job=\"mana-core-auth\"}[5m])) by (status)",
"expr": "sum(rate(http_requests_total{job=\"mana-auth\"}[5m])) by (status)",
"legendFormat": "{{status}}",
"refId": "A"
}
@ -785,7 +785,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "100 * sum(rate(http_requests_total{job=\"mana-core-auth\",status=~\"4..\"}[5m])) / sum(rate(http_requests_total{job=\"mana-core-auth\"}[5m]))",
"expr": "100 * sum(rate(http_requests_total{job=\"mana-auth\",status=~\"4..\"}[5m])) / sum(rate(http_requests_total{job=\"mana-auth\"}[5m]))",
"legendFormat": "4xx Error Rate",
"refId": "A"
}
@ -829,7 +829,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "100 * sum(rate(http_requests_total{job=\"mana-core-auth\",status=~\"5..\"}[5m])) / sum(rate(http_requests_total{job=\"mana-core-auth\"}[5m]))",
"expr": "100 * sum(rate(http_requests_total{job=\"mana-auth\",status=~\"5..\"}[5m])) / sum(rate(http_requests_total{job=\"mana-auth\"}[5m]))",
"legendFormat": "5xx Error Rate",
"refId": "A"
}
@ -869,7 +869,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(increase(http_requests_total{job=\"mana-core-auth\",status=\"429\"}[1h]))",
"expr": "sum(increase(http_requests_total{job=\"mana-auth\",status=\"429\"}[1h]))",
"legendFormat": "Rate Limited",
"refId": "A"
}
@ -909,7 +909,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(increase(http_requests_total{job=\"mana-core-auth\"}[24h]))",
"expr": "sum(increase(http_requests_total{job=\"mana-auth\"}[24h]))",
"legendFormat": "Total Requests",
"refId": "A"
}
@ -992,7 +992,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "increase(http_requests_total{job=\"mana-core-auth\",route=~\"/auth/login|/auth/register|/auth/logout|/auth/refresh\"}[1h])",
"expr": "increase(http_requests_total{job=\"mana-auth\",route=~\"/auth/login|/auth/register|/auth/logout|/auth/refresh\"}[1h])",
"legendFormat": "{{route}}",
"refId": "A"
}
@ -1055,7 +1055,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(increase(http_requests_total{job=\"mana-core-auth\",route=\"/auth/login\"}[1h])) by (status)",
"expr": "sum(increase(http_requests_total{job=\"mana-auth\",route=\"/auth/login\"}[1h])) by (status)",
"legendFormat": "Login {{status}}",
"refId": "A"
}
@ -1066,7 +1066,7 @@
],
"refresh": "30s",
"schemaVersion": 38,
"tags": ["manacore", "auth"],
"tags": ["mana", "auth"],
"templating": {
"list": [
{

View file

@ -58,7 +58,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "up{job=~\"mana-core-auth|.*-backend|mana-search|mana-media\"}",
"expr": "up{job=~\"mana-auth|.*-backend|mana-search|mana-media\"}",
"legendFormat": "{{job}}",
"refId": "A"
}
@ -525,7 +525,7 @@
],
"refresh": "30s",
"schemaVersion": 38,
"tags": ["manacore", "backends"],
"tags": ["mana", "backends"],
"templating": {
"list": [
{

View file

@ -411,7 +411,7 @@
],
"refresh": "1m",
"schemaVersion": 38,
"tags": ["manacore", "business", "kpi", "duckdb"],
"tags": ["mana", "business", "kpi", "duckdb"],
"templating": {
"list": [
{

View file

@ -880,7 +880,7 @@
],
"refresh": "30s",
"schemaVersion": 38,
"tags": ["manacore", "database", "postgresql", "redis"],
"tags": ["mana", "database", "postgresql", "redis"],
"templating": {
"list": [
{

View file

@ -12,7 +12,7 @@
"icon": "external link",
"includeVars": false,
"keepTime": true,
"tags": ["manacore"],
"tags": ["mana"],
"targetBlank": false,
"title": "Detailed Dashboards",
"type": "dashboards"
@ -63,7 +63,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "sum(up{job=~\".*-backend|mana-core-auth\"}) / count(up{job=~\".*-backend|mana-core-auth\"})",
"expr": "sum(up{job=~\".*-backend|mana-auth\"}) / count(up{job=~\".*-backend|mana-auth\"})",
"legendFormat": "Services Healthy",
"refId": "A"
}
@ -410,7 +410,7 @@
"targets": [
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "up{job=\"mana-core-auth\"}",
"expr": "up{job=\"mana-auth\"}",
"legendFormat": "Auth",
"refId": "A"
},
@ -1366,7 +1366,7 @@
],
"refresh": "30s",
"schemaVersion": 38,
"tags": ["manacore", "master", "overview"],
"tags": ["mana", "master", "overview"],
"templating": {
"list": [
{
@ -1387,7 +1387,7 @@
"time": { "from": "now-6h", "to": "now" },
"timepicker": {},
"timezone": "browser",
"title": "ManaCore Master Overview",
"title": "Mana Master Overview",
"uid": "master-overview",
"version": 1,
"weekStart": ""

View file

@ -537,7 +537,7 @@
},
{
"datasource": { "type": "prometheus", "uid": "${datasource}" },
"expr": "up{job=\"mana-core-auth\"}",
"expr": "up{job=\"mana-auth\"}",
"legendFormat": "Auth",
"refId": "A"
},
@ -1070,7 +1070,7 @@
],
"refresh": "30s",
"schemaVersion": 38,
"tags": ["manacore", "system"],
"tags": ["mana", "system"],
"templating": {
"list": [
{

View file

@ -1,5 +1,5 @@
{
"title": "ManaCore Uptime",
"title": "Mana Uptime",
"uid": "uptime",
"description": "HTTP Uptime aller mana.how Dienste via Blackbox Exporter",
"tags": ["uptime", "blackbox", "http"],

View file

@ -514,7 +514,7 @@
],
"refresh": "30s",
"schemaVersion": 38,
"tags": ["manacore", "users", "auth"],
"tags": ["mana", "users", "auth"],
"templating": {
"list": [
{

View file

@ -4,10 +4,10 @@
apiVersion: 1
providers:
- name: 'ManaCore Dashboards'
- name: 'Mana Dashboards'
orgId: 1
folder: 'ManaCore'
folderUid: 'manacore'
folder: 'Mana'
folderUid: 'mana'
type: file
disableDeletion: false
updateIntervalSeconds: 30

View file

@ -15,11 +15,11 @@ datasources:
timeInterval: "15s"
httpMethod: POST
# Business Metrics API (DuckDB via mana-core-auth)
# Business Metrics API (DuckDB via mana-auth)
- name: Business Metrics
type: yesoreyeram-infinity-datasource
access: proxy
url: http://mana-core-auth:3001
url: http://mana-auth:3001
isDefault: false
editable: true
jsonData:

View file

@ -9,7 +9,7 @@ CREATE DATABASE glitchtip;
CREATE DATABASE umami;
-- Grant privileges
GRANT ALL PRIVILEGES ON DATABASE mana_platform TO manacore;
GRANT ALL PRIVILEGES ON DATABASE mana_sync TO manacore;
GRANT ALL PRIVILEGES ON DATABASE glitchtip TO manacore;
GRANT ALL PRIVILEGES ON DATABASE umami TO manacore;
GRANT ALL PRIVILEGES ON DATABASE mana_platform TO mana;
GRANT ALL PRIVILEGES ON DATABASE mana_sync TO mana;
GRANT ALL PRIVILEGES ON DATABASE glitchtip TO mana;
GRANT ALL PRIVILEGES ON DATABASE umami TO mana;

View file

@ -23,5 +23,5 @@ psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname mana_platform <<-EO
-- Grant schema usage
GRANT ALL ON SCHEMA auth, credits, gifts, subscriptions, feedback, usr, media,
todo, traces, presi, uload, cards TO manacore;
todo, traces, presi, uload, cards TO mana;
EOSQL

View file

@ -1,4 +1,4 @@
# ManaCore Matrix Synapse Configuration
# Mana Matrix Synapse Configuration
# Documentation: https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html
server_name: "mana.how"
@ -190,7 +190,7 @@ run_background_tasks_on: synapse
# smtp_user: "${SMTP_USER}"
# smtp_pass: "${SMTP_PASSWORD}"
# require_transport_security: true
# notif_from: "ManaCore Matrix <noreply@mana.how>"
# notif_from: "Mana Matrix <noreply@mana.how>"
# ============================================
# OIDC / SSO Configuration (Mana Core Auth)
@ -199,7 +199,7 @@ run_background_tasks_on: synapse
# OIDC disabled: mana-auth (Better Auth) does not expose OIDC discovery endpoints
# TODO: add OIDC provider support to mana-auth, then re-enable this
# oidc_providers:
# - idp_id: manacore
# - idp_id: mana
# issuer: "https://auth.mana.how"
# client_id: "matrix-synapse"
# ...

View file

@ -8,7 +8,7 @@
"base_url": ""
}
},
"brand": "ManaCore Chat",
"brand": "Mana Chat",
"integrations_ui_url": "",
"integrations_rest_url": "",
"integrations_widgets_urls": [],

View file

@ -8,7 +8,7 @@
"base_url": ""
}
},
"brand": "ManaCore Chat",
"brand": "Mana Chat",
"integrations_ui_url": "",
"integrations_rest_url": "",
"integrations_widgets_urls": [],

View file

@ -1,4 +1,4 @@
# ManaCore Matrix Synapse Configuration
# Mana Matrix Synapse Configuration
# Documentation: https://element-hq.github.io/synapse/latest/usage/configuration/config_documentation.html
server_name: "mana.how"
@ -190,7 +190,7 @@ run_background_tasks_on: synapse
# smtp_user: "${SMTP_USER}"
# smtp_pass: "${SMTP_PASSWORD}"
# require_transport_security: true
# notif_from: "ManaCore Matrix <noreply@mana.how>"
# notif_from: "Mana Matrix <noreply@mana.how>"
# ============================================
# OIDC / SSO Configuration (Mana Core Auth)
@ -198,7 +198,7 @@ run_background_tasks_on: synapse
# Enable SSO via Mana Core Auth OIDC Provider
oidc_providers:
- idp_id: manacore
- idp_id: mana
idp_name: "Mana Core"
idp_brand: "org.matrix.custom"
discover: true

View file

@ -3,7 +3,7 @@ groups:
rules:
# Service Down Alert
- alert: ServiceDown
expr: up{job=~"mana-core-auth|.*-backend|mana-search|mana-media|mana-llm|synapse"} == 0
expr: up{job=~"mana-auth|.*-backend|mana-search|mana-media|mana-llm|synapse"} == 0
for: 1m
labels:
severity: critical
@ -258,19 +258,19 @@ groups:
rules:
# Auth Service Down
- alert: AuthServiceDown
expr: up{job="mana-core-auth"} == 0
expr: up{job="mana-auth"} == 0
for: 30s
labels:
severity: critical
annotations:
summary: "Auth Service is down"
description: "mana-core-auth has been down for more than 30 seconds. All authentication will fail."
description: "mana-auth has been down for more than 30 seconds. All authentication will fail."
# High Login Failure Rate (> 50% of logins fail with 401)
- alert: HighLoginFailureRate
expr: |
sum(rate(http_requests_total{job="mana-core-auth",route="/auth/login",status="401"}[5m]))
/ sum(rate(http_requests_total{job="mana-core-auth",route="/auth/login"}[5m])) > 0.5
sum(rate(http_requests_total{job="mana-auth",route="/auth/login",status="401"}[5m]))
/ sum(rate(http_requests_total{job="mana-auth",route="/auth/login"}[5m])) > 0.5
for: 5m
labels:
severity: warning
@ -281,7 +281,7 @@ groups:
# Rate Limiting Triggered Frequently
- alert: HighRateLimitHits
expr: |
sum(rate(http_requests_total{job="mana-core-auth",status="429"}[5m])) > 1
sum(rate(http_requests_total{job="mana-auth",status="429"}[5m])) > 1
for: 5m
labels:
severity: warning
@ -292,7 +292,7 @@ groups:
# Brute Force Detection (> 100 failed logins in 5 min)
- alert: PossibleBruteForce
expr: |
sum(increase(http_requests_total{job="mana-core-auth",route="/auth/login",status="401"}[5m])) > 100
sum(increase(http_requests_total{job="mana-auth",route="/auth/login",status="401"}[5m])) > 100
for: 0m
labels:
severity: critical
@ -303,7 +303,7 @@ groups:
# Registration Spike (unusual registration activity)
- alert: RegistrationSpike
expr: |
sum(rate(http_requests_total{job="mana-core-auth",route="/auth/register",status="201"}[5m])) > 1
sum(rate(http_requests_total{job="mana-auth",route="/auth/register",status="201"}[5m])) > 1
for: 5m
labels:
severity: info
@ -314,8 +314,8 @@ groups:
# Token Refresh Failures
- alert: HighTokenRefreshFailures
expr: |
sum(rate(http_requests_total{job="mana-core-auth",route="/auth/refresh",status=~"4.."}[5m]))
/ sum(rate(http_requests_total{job="mana-core-auth",route="/auth/refresh"}[5m])) > 0.3
sum(rate(http_requests_total{job="mana-auth",route="/auth/refresh",status=~"4.."}[5m]))
/ sum(rate(http_requests_total{job="mana-auth",route="/auth/refresh"}[5m])) > 0.3
for: 10m
labels:
severity: warning
@ -326,7 +326,7 @@ groups:
# Password Reset Flood (possible enumeration attack)
- alert: PasswordResetFlood
expr: |
sum(increase(http_requests_total{job="mana-core-auth",route="/auth/forgot-password"}[5m])) > 50
sum(increase(http_requests_total{job="mana-auth",route="/auth/forgot-password"}[5m])) > 50
for: 0m
labels:
severity: warning
@ -337,7 +337,7 @@ groups:
# Low User Verification Rate (less than 50% verified after 1 week)
- alert: LowVerificationRate
expr: |
auth_users_verified{job="mana-core-auth"} / auth_users_total{job="mana-core-auth"} < 0.5
auth_users_verified{job="mana-auth"} / auth_users_total{job="mana-auth"} < 0.5
for: 1h
labels:
severity: info
@ -348,7 +348,7 @@ groups:
# Auth Service Slow (p95 > 500ms)
- alert: AuthServiceSlow
expr: |
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job="mana-core-auth"}[5m])) by (le)) > 0.5
histogram_quantile(0.95, sum(rate(http_request_duration_seconds_bucket{job="mana-auth"}[5m])) by (le)) > 0.5
for: 5m
labels:
severity: warning
@ -359,7 +359,7 @@ groups:
# OIDC Token Endpoint Errors
- alert: OIDCTokenErrors
expr: |
sum(rate(http_requests_total{job="mana-core-auth",route=~"/api/auth/oauth2/token|/api/oidc/token",status=~"5.."}[5m])) > 0.1
sum(rate(http_requests_total{job="mana-auth",route=~"/api/auth/oauth2/token|/api/oidc/token",status=~"5.."}[5m])) > 0.1
for: 5m
labels:
severity: warning

View file

@ -1,4 +1,4 @@
# ManaCore Prometheus Configuration
# Mana Prometheus Configuration
# Scrapes metrics from all services
global:
@ -222,14 +222,14 @@ scrape_configs:
# Blackbox Exporter — HTTP Uptime Probes
# ============================================
# Web Apps (Unified ManaCore app at mana.how + standalone games)
# Web Apps (Unified Mana app at mana.how + standalone games)
- job_name: 'blackbox-web'
metrics_path: /probe
params:
module: [http_2xx]
static_configs:
- targets:
# Unified ManaCore app (all modules as routes)
# Unified Mana app (all modules as routes)
- https://mana.how
- https://mana.how/chat
- https://mana.how/todo