+
+
+
+ @Instance.Instance
+ @HostAndPort
+
+
+ @if (IsLeader)
+ {
+ Leader
+ }
+ @if (Instance.Active is ActiveState.Active)
+ {
+ Active
+ }
+ else if (Instance.Active is ActiveState.Standby)
+ {
+ Standby
+ }
+ else if (Instance.Active is ActiveState.Unknown)
+ {
+ Role ?
+ }
+ @StatusLabel
+
+
+
+
+
+ Latency
+ @LatencyText
+
+
+ @(IsStale ? "Stale since" : "Last poll")
+ @LastPollText
+
+
+ Checks
+ @ChecksText
+
+
+ @if (Instance.Error is { Length: > 0 } error)
+ {
+
+ Error
+ @Truncate(error, 48)
+
+ }
+
+ @if (Entries.Count > 0)
+ {
+
+
+ }
+ @Entries.Count check@(Entries.Count == 1 ? "" : "s")
+ @foreach (var entry in Entries) + { +
+
+ @entry.Key
+ @entry.Value.Description
+
+ }
+ @if (ClusterDataLine is { Length: > 0 } clusterData)
+ {
+ @* The cluster view, rendered verbatim rather than interpreted: when a pair
+ disagrees about the leader this line is the raw evidence an operator needs
+ to see, not a summary of it. *@
+ @((MarkupString)clusterData)
+ }
+
+ @if (Instance.ManagementUrl is { Length: > 0 } managementUrl)
+ {
+ Open @Instance.ManagementLabel ↗
+ }
+ else
+ {
+ no management link
+ }
+ @RawSignals
+
+