fix(ui): Cluster-Karte las sich als Widerspruch zur VIP-Karte
Die Dashboard-Cluster-Karte zeigte ha_nodes.role als nacktes "primary". Das ist die DB-/Cluster-Rolle (wohin Schreibzugriffe gehen); sie wandert bewusst NICHT mit der VIP und aendert sich nur durch `edgeguard-ctl promote`. Direkt daneben steht aber die VIP/VRRP-Karte mit "BACKUP" — waehrend eines Failovers (z.B. Node-Reboot) sah der Operator also gleichzeitig "primary" und "BACKUP" und musste raten, was stimmt. Die Daten waren korrekt, nur das Label mehrdeutig: jetzt "DB-Primary" statt "primary", plus Tooltip der den Unterschied zur VRRP-Rolle benennt. Auf der Cluster-Seite bleibt es unveraendert — dort steht die Spalte direkt neben pg_role, der Kontext erklaert sich dort selbst. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -416,7 +416,10 @@
|
|||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"degraded": "degraded",
|
"degraded": "degraded",
|
||||||
"split-brain": "split-brain"
|
"split-brain": "split-brain"
|
||||||
}
|
},
|
||||||
|
"roleDbPrimary": "DB-Primary",
|
||||||
|
"rolePeer": "Peer",
|
||||||
|
"roleHint": "DB-/Cluster-Rolle: bestimmt, wohin Schreibzugriffe gehen. Sie wandert NICHT mit der VIP — ein Node kann DB-Primary sein und trotzdem gerade keepalived-BACKUP (siehe VIP/VRRP-Karte). Sie aendert sich nur durch „edgeguard-ctl promote“."
|
||||||
},
|
},
|
||||||
"routingCard": {
|
"routingCard": {
|
||||||
"title": "Routing",
|
"title": "Routing",
|
||||||
|
|||||||
@@ -416,7 +416,10 @@
|
|||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"degraded": "degraded",
|
"degraded": "degraded",
|
||||||
"split-brain": "split-brain"
|
"split-brain": "split-brain"
|
||||||
}
|
},
|
||||||
|
"roleDbPrimary": "DB primary",
|
||||||
|
"rolePeer": "Peer",
|
||||||
|
"roleHint": "Database/cluster role: decides where writes go. It does NOT follow the VIP — a node can be DB primary while currently being keepalived BACKUP (see the VIP/VRRP card). It only changes via \"edgeguard-ctl promote\"."
|
||||||
},
|
},
|
||||||
"routingCard": {
|
"routingCard": {
|
||||||
"title": "Routing",
|
"title": "Routing",
|
||||||
|
|||||||
@@ -677,7 +677,18 @@ function ClusterStatusCard({ nodes, status }: ClusterStatusCardProps) {
|
|||||||
padding: '4px 0', borderBottom: '1px solid #F1F5F9', fontSize: 12,
|
padding: '4px 0', borderBottom: '1px solid #F1F5F9', fontSize: 12,
|
||||||
}}>
|
}}>
|
||||||
<code style={{ color: '#334155' }}>{n.fqdn}</code>
|
<code style={{ color: '#334155' }}>{n.fqdn}</code>
|
||||||
<Tag color={n.role === 'primary' ? 'green' : 'default'} style={{ margin: 0 }}>{n.role}</Tag>
|
{/* ha_nodes.role ist die DB-/Cluster-Rolle (wohin Schreibzugriffe
|
||||||
|
gehen) und wandert bewusst NICHT mit der VIP — sie aendert
|
||||||
|
sich nur durch `edgeguard-ctl promote`. Ein nacktes "primary"
|
||||||
|
hier las sich neben der VIP-Karte ("BACKUP") wie ein
|
||||||
|
Widerspruch, deshalb explizit als DB-Rolle beschriftet. */}
|
||||||
|
<Tooltip title={t('dashboard.clusterCard.roleHint')}>
|
||||||
|
<Tag color={n.role === 'primary' ? 'green' : 'default'} style={{ margin: 0 }}>
|
||||||
|
{n.role === 'primary'
|
||||||
|
? t('dashboard.clusterCard.roleDbPrimary')
|
||||||
|
: t('dashboard.clusterCard.rolePeer')}
|
||||||
|
</Tag>
|
||||||
|
</Tooltip>
|
||||||
</div>
|
</div>
|
||||||
))}
|
))}
|
||||||
</Space>
|
</Space>
|
||||||
|
|||||||
Reference in New Issue
Block a user