Open Administration on a dashboard of what the role can read

Administration used to open on its first section. It opens on a grid of
cards now: users, domains, messages waiting in the delivery queue, server
memory, and the last 24 hours' received and sent. Each card is there only
when the role holds what its number needs -- a count is a query, the
metric history a query and a get -- so a helpdesk role that reads accounts
and domains sees those two cards and nothing about the server.

What the cards count is whatever Stalwart answers for the signed-in
account, which scopes a tenant administrator's accounts, domains and queue
to the tenancy. The metric history has no tenant in it, and Stalwart's
Tenant Administrator role does not hold it, so a tenant's dashboard is
users, domains and pending.

The history is Enterprise-only and switched off by default. A server that
refuses it leaves those cards off; one that records nothing says so rather
than showing zeroes. Received and sent add up the queue counters Stalwart's
own dashboard uses, filtered with the comparison names the live server
accepts (a bare timestamp is unsupportedFilter). The column count follows
the number of cards so rows stay even, and falls back by the grid's own
width rather than the window's.

The server's test for whether an account is offered Administration matches
the client's again, now that a count is enough. The mock answers the queue
and an hourly history ending in the current hour; MOCK_METRICS=off refuses
the history as Community does, a tenant administrator gets the queue, and
helpdesk reads domains, as the demo's does.

ROADMAP and FEATURES said reporting and queues were out of scope; they say
the dashboard reads a handful of numbers and that managing queues, logs
and settings stays out. KNOWN-ISSUES records what was settled on the live
server and what was only read from source.

Fourteen new strings, in all nine catalogues.
This commit is contained in:
2026-09-15 08:06:59 -07:00
parent bb8d6eb92d
commit 0054b8a3ce
28 changed files with 838 additions and 37 deletions
+14
View File
@@ -133,6 +133,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "Ihr eigenes Passwort ändern Sie unter {settings}.",
"Administration": "Verwaltung",
"Directory": "Verzeichnis",
"Overview": "Übersicht",
"Dashboard": "Dashboard",
"Users": "Benutzer",
"User accounts": "Benutzerkonten",
"Mail domains": "E-Mail-Domains",
"Pending": "Ausstehend",
"Waiting in the delivery queue": "In der Zustellwarteschlange",
"Server memory": "Arbeitsspeicher des Servers",
"As of {time}": "Stand: {time}",
"Not recorded on this server": "Auf diesem Server nicht erfasst",
"Last 24 hours": "Letzte 24 Stunden",
"The numbers your role can see, as the server reports them.": "Die Zahlen, die Ihre Rolle sehen darf, so wie der Server sie meldet.",
"Nothing to show": "Nichts anzuzeigen",
"Could not be loaded": "Konnte nicht geladen werden",
"User": "Benutzer",
"Administrator": "Administrator",
"Custom role": "Eigene Rolle",
+14
View File
@@ -125,6 +125,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "Cambie su propia contraseña en {settings}.",
"Administration": "Administración",
"Directory": "Directorio",
"Overview": "Resumen",
"Dashboard": "Panel",
"Users": "Usuarios",
"User accounts": "Cuentas de usuario",
"Mail domains": "Dominios de correo",
"Pending": "Pendientes",
"Waiting in the delivery queue": "En la cola de entrega",
"Server memory": "Memoria del servidor",
"As of {time}": "A las {time}",
"Not recorded on this server": "No se registra en este servidor",
"Last 24 hours": "Últimas 24 horas",
"The numbers your role can see, as the server reports them.": "Las cifras que su rol puede ver, tal como las informa el servidor.",
"Nothing to show": "Nada que mostrar",
"Could not be loaded": "No se pudo cargar",
"User": "Usuario",
"Administrator": "Administrador",
"Custom role": "Rol personalizado",
+14
View File
@@ -130,6 +130,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "Modifiez votre propre mot de passe dans {settings}.",
"Administration": "Administration",
"Directory": "Annuaire",
"Overview": "Vue densemble",
"Dashboard": "Tableau de bord",
"Users": "Utilisateurs",
"User accounts": "Comptes utilisateurs",
"Mail domains": "Domaines de messagerie",
"Pending": "En attente",
"Waiting in the delivery queue": "Dans la file de distribution",
"Server memory": "Mémoire du serveur",
"As of {time}": "Au {time}",
"Not recorded on this server": "Non enregistré sur ce serveur",
"Last 24 hours": "Dernières 24 heures",
"The numbers your role can see, as the server reports them.": "Les chiffres que votre rôle permet de voir, tels que le serveur les indique.",
"Nothing to show": "Rien à afficher",
"Could not be loaded": "Chargement impossible",
"User": "Utilisateur",
"Administrator": "Administrateur",
"Custom role": "Rôle personnalisé",
+14
View File
@@ -124,6 +124,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "ご自身のパスワードは{settings}で変更してください。",
"Administration": "管理",
"Directory": "ディレクトリ",
"Overview": "概要",
"Dashboard": "ダッシュボード",
"Users": "ユーザー",
"User accounts": "ユーザーアカウント",
"Mail domains": "メールドメイン",
"Pending": "保留中",
"Waiting in the delivery queue": "配送キューで待機中",
"Server memory": "サーバーのメモリ",
"As of {time}": "{time} 時点",
"Not recorded on this server": "このサーバーでは記録されていません",
"Last 24 hours": "過去 24 時間",
"The numbers your role can see, as the server reports them.": "あなたのロールで見られる数値を、サーバーの報告どおりに表示します。",
"Nothing to show": "表示するものはありません",
"Could not be loaded": "読み込めませんでした",
"User": "ユーザー",
"Administrator": "管理者",
"Custom role": "カスタムロール",
+14
View File
@@ -121,6 +121,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "Wijzig uw eigen wachtwoord bij {settings}.",
"Administration": "Beheer",
"Directory": "Adreslijst",
"Overview": "Overzicht",
"Dashboard": "Dashboard",
"Users": "Gebruikers",
"User accounts": "Gebruikersaccounts",
"Mail domains": "E-maildomeinen",
"Pending": "In behandeling",
"Waiting in the delivery queue": "In de bezorgwachtrij",
"Server memory": "Servergeheugen",
"As of {time}": "Stand van {time}",
"Not recorded on this server": "Niet vastgelegd op deze server",
"Last 24 hours": "Afgelopen 24 uur",
"The numbers your role can see, as the server reports them.": "De cijfers die uw rol mag zien, zoals de server ze meldt.",
"Nothing to show": "Niets om te tonen",
"Could not be loaded": "Kon niet worden geladen",
"User": "Gebruiker",
"Administrator": "Beheerder",
"Custom role": "Aangepaste rol",
+14
View File
@@ -128,6 +128,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "Altere sua própria senha em {settings}.",
"Administration": "Administração",
"Directory": "Diretório",
"Overview": "Visão geral",
"Dashboard": "Painel",
"Users": "Usuários",
"User accounts": "Contas de usuário",
"Mail domains": "Domínios de e-mail",
"Pending": "Pendentes",
"Waiting in the delivery queue": "Na fila de entrega",
"Server memory": "Memória do servidor",
"As of {time}": "Em {time}",
"Not recorded on this server": "Não registrado neste servidor",
"Last 24 hours": "Últimas 24 horas",
"The numbers your role can see, as the server reports them.": "Os números que sua função pode ver, como o servidor os informa.",
"Nothing to show": "Nada para mostrar",
"Could not be loaded": "Não foi possível carregar",
"User": "Usuário",
"Administrator": "Administrador",
"Custom role": "Função personalizada",
+14
View File
@@ -127,6 +127,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "Свой пароль можно изменить в разделе {settings}.",
"Administration": "Администрирование",
"Directory": "Каталог",
"Overview": "Обзор",
"Dashboard": "Панель",
"Users": "Пользователи",
"User accounts": "Учётные записи пользователей",
"Mail domains": "Почтовые домены",
"Pending": "В очереди",
"Waiting in the delivery queue": "Ожидают в очереди доставки",
"Server memory": "Память сервера",
"As of {time}": "На {time}",
"Not recorded on this server": "На этом сервере не записывается",
"Last 24 hours": "За последние 24 часа",
"The numbers your role can see, as the server reports them.": "Показатели, доступные вашей роли, в том виде, в каком их сообщает сервер.",
"Nothing to show": "Нечего показать",
"Could not be loaded": "Не удалось загрузить",
"User": "Пользователь",
"Administrator": "Администратор",
"Custom role": "Особая роль",
+14
View File
@@ -121,6 +121,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "Власний пароль можна змінити в розділі {settings}.",
"Administration": "Адміністрування",
"Directory": "Каталог",
"Overview": "Огляд",
"Dashboard": "Панель",
"Users": "Користувачі",
"User accounts": "Облікові записи користувачів",
"Mail domains": "Поштові домени",
"Pending": "У черзі",
"Waiting in the delivery queue": "Очікують у черзі доставки",
"Server memory": "Пам’ять сервера",
"As of {time}": "Станом на {time}",
"Not recorded on this server": "На цьому сервері не записується",
"Last 24 hours": "За останні 24 години",
"The numbers your role can see, as the server reports them.": "Показники, доступні вашій ролі, у тому вигляді, як їх повідомляє сервер.",
"Nothing to show": "Нічого показати",
"Could not be loaded": "Не вдалося завантажити",
"User": "Користувач",
"Administrator": "Адміністратор",
"Custom role": "Власна роль",
+14
View File
@@ -123,6 +123,20 @@ export const catalog: Catalog = {
"Change your own password in {settings}.": "请在{settings}中更改您自己的密码。",
"Administration": "管理",
"Directory": "目录",
"Overview": "概览",
"Dashboard": "仪表板",
"Users": "用户",
"User accounts": "用户账户",
"Mail domains": "邮件域名",
"Pending": "待处理",
"Waiting in the delivery queue": "在投递队列中等待",
"Server memory": "服务器内存",
"As of {time}": "截至 {time}",
"Not recorded on this server": "此服务器未记录",
"Last 24 hours": "过去 24 小时",
"The numbers your role can see, as the server reports them.": "您的角色可以查看的数字,按服务器报告显示。",
"Nothing to show": "没有可显示的内容",
"Could not be loaded": "无法加载",
"User": "用户",
"Administrator": "管理员",
"Custom role": "自定义角色",