{{ t('common.loading') }}

{{ getPageTitle() }}

{{ t('dashboard.monitoredApis') }}

{{ dashboardStats.totalApis }}

{{ t('dashboard.activeAlerts') }}

{{ dashboardStats.activeAlerts }}

{{ t('dashboard.avgResponseTime') }}

{{ dashboardStats.avgResponseTime }}ms

{{ t('dashboard.uptime30d') }}

{{ dashboardStats.uptime !== null ? dashboardStats.uptime + '%' : '-' }}

{{ t('dashboard.responseTimeChart') }}

{{ t('dashboard.apiStatusOverview') }}

{{ api.name }}

{{ api.url }}

{{ api.responseTime }}ms

{{ api.lastCheck }}

{{ t('dashboard.recentAlerts') }}

{{ t('table.alarm') }} {{ t('table.api') }} {{ t('table.severity') }} {{ t('table.time') }} {{ t('table.status') }}
{{ alert.name }}
{{ alert.message }}
{{ alert.api }} {{ getSeverityLabel(alert.severity) }} {{ alert.time }} {{ getAlertStatusLabel(alert.status) }}

{{ t('apis.noApis') }}

{{ t('apis.noApisDesc') }}

{{ api.name }}

{{ api.url }}

{{ t('apis.method') }}: {{ api.method || 'GET' }}
{{ t('apis.interval') }}: {{ api.interval_minutes || 5 }} min
{{ t('apis.responseTime') }}: {{ api.last_response_time || 0 }}ms
{{ t('apis.lastCheck') }}: {{ api.last_check ? formatTime(api.last_check) : t('common.never') }}

{{ t('alerts.title') }}

{{ t('alerts.currentAlerts') }}

{{ t('alerts.noActiveAlerts') }}

{{ alert.rule_name }}

{{ alert.api_name }}

{{ alert.message }}

{{ formatTime(alert.triggered_at) }}
{{ getSeverityLabel(alert.severity) }}

{{ t('alerts.recentAlerts') }}

{{ t('alerts.noHistory') }}

{{ alert.rule_name }}

{{ alert.api_name }}

{{ getSeverityLabel(alert.severity) }} {{ getAlertStatusLabel(alert.status) }}
{{ formatTime(alert.triggered_at) }}
{{ formatDuration(alert.duration_minutes) }}

{{ t('alerts.noRules') }}

{{ t('alerts.noRulesDesc') }}

{{ t('table.name') }} {{ t('table.api') }} {{ t('table.severity') }} {{ t('table.status') }} {{ t('table.lastTriggered') }} {{ t('table.actions') }}
{{ rule.name }}
{{ getApiName(rule.api_id) }} {{ getSeverityLabel(rule.severity) }} {{ t('common.never') }}

{{ t('logs.title') }}

{{ logs.length }}

{{ t('common.total') }}

{{ logs.filter(l => l.level === 'error').length }}

{{ t('logs.errors') }}

{{ logs.filter(l => l.level === 'warning').length }}

{{ t('logs.warnings') }}

{{ logs.filter(l => l.level === 'info' || l.level === 'success').length }}

{{ t('logs.infoSuccess') }}

{{ t('table.time') }} {{ t('table.level') }} {{ t('table.source') }} {{ t('table.message') }}
{{ formatLogDate(log.created_at) }} {{ log.level }} {{ log.api_name || t('status.system') }} {{ log.message }}

{{ t('logs.noLogs') }}

{{ t('logs.tryOtherFilters') }}

{{ t('logs.noLogsYet') }}

{{ t('logs.entriesShown', {filtered: filteredLogs.length, total: logs.length}) }}

{{ t('health.title') }}

{{ t('health.loading') }}

{{ t('health.noChecks') }}

{{ check.name }}

{{ check.description }}

{{ t('health.status.' + (check.result.status || 'unknown')) }}
{{ t('health.labels.checkedAt') }}: {{ check.result.checked_at ? formatTimestamp(check.result.checked_at) : '–' }} 🗎
{{ t('health.labels.source') }}: {{ check.source }}
{{ t('health.labels.endpoint') }}: {{ check.endpoint }}

{{ t('health.labels.issues') }}:

{{ translateIssue(issue) }}

{{ t('health.labels.metrics') }}:

{{ key }}
{{ value }}
{{ t('health.labels.loadError') }}: {{ check.error }}

{{ t('health.thresholds.title') }} — {{ thresholdEditor.checkName }}

{{ t('health.thresholds.intro') }}

{{ t('health.thresholds.unitMinutes') }}
{{ t('health.thresholds.unitMinutes') }}
{{ t('health.thresholds.unitHours') }}
{{ t('health.thresholds.unitHours') }}
{{ t('health.thresholds.unitSeconds') }}

{{ t('settings.title') }}

{{ t('migrations.title') }}

{{ t('migrations.intro') }}

{{ migrations.summary.applied }}
{{ t('migrations.applied') }}
{{ migrations.summary.pending }}
{{ t('migrations.pending') }}
{{ migrations.summary.modified }}
{{ t('migrations.modified') }}
{{ migrations.summary.orphaned }}
{{ t('migrations.orphaned') }}
{{ t('migrations.filename') }} {{ t('migrations.status') }}
{{ m.filename }} {{ t('migrations.' + m.status) }}
{{ t('migrations.empty') }}
{{ t('migrations.executedTitle') }}:
  • {{ e.filename }} ({{ e.statements }} {{ t('migrations.statements') }})
{{ t('migrations.errorsTitle') }}:
  • {{ e.filename }}: {{ e.error }}

{{ t('settings.system') }}

{{ t('settings.dataRetentionDesc') }}

{{ t('settings.email') }}

{{ t('settings.emailFromAddressDesc') }}

{{ t('settings.emailInfo') }}

{{ t('settings.emailInfoDesc') }}

{{ t('settings.threema') }}

{{ t('settings.threemaGatewayIdDesc') }}

{{ t('settings.threemaDefaultRecipientDesc') }}

{{ t('settings.threemaGateway') }}

{{ t('settings.threemaGatewayDesc') }}

{{ t('settings.slack') }}

{{ t('settings.slackWebhookDesc') }}

{{ t('settings.monitoring') }}

{{ t('settings.anomalyDetection') }}

{{ t('settings.anomalyMultiplierDesc') }}

{{ t('settings.anomalyWindowDesc') }}

{{ t('settings.fallback') }}

{{ t('settings.fallbackDesc') }}

{{ t('settings.consecutiveFailuresDesc') }}

{{ t('settings.defaultCooldownDesc') }}

{{ t('settings.fallbackEmailRecipientsDesc') }}

{{ t('users.title') }}

{{ t('users.createNew') }}

{{ t('users.username') }} {{ t('users.createdAt') }} {{ t('users.lastLogin') }} {{ t('table.actions') }}
{{ user.username }} {{ t('users.you') }} {{ formatDate(user.created_at) }} {{ user.last_login ? formatDate(user.last_login) : t('common.never') }} {{ t('users.ownProfile') }}

{{ t('profile.title') }}

{{ profileError }}

{{ selectedApi ? t('apis.editApi') : t('apis.addApi') }}

{{ selectedAlertRule ? t('alerts.editRule') : t('alerts.addRule') }}

{{ t('alerts.fieldsAvailable', {count: availableFields.length}) }}
{{ t('alertType.whatToMonitor') }}
Vorbedingung (optional)

Diese Regel feuert nur, wenn eine andere Regel im gewünschten Zustand ist. Nützlich bei aufeinander aufbauenden APIs — z.B. Aggregator-Alarm nur wenn Quell-API healthy ist.

Diese Regel wird nur ausgelöst, wenn Regel #{{ alertForm.precondition_rule_id }} aktuell nicht im Alarmzustand ist. Diese Regel wird nur ausgelöst, wenn Regel #{{ alertForm.precondition_rule_id }} aktuell ebenfalls im Alarmzustand ist. Bei Unterdrückung wird ein Eintrag in der alert_history mit Status "unterdrueckt-vorbedingung" angelegt.

{{ t('notifications.templatePlaceholders') }}

{{ t('notifications.title') }}

{{ t('notifications.multipleEmails') }}

{{ t('notifications.slackWebhookDesc') }}

{{ t('notifications.threemaIdDesc') }}