chore(clients): roll out feed-level snapshot_status to all five clients
Task 1 added AlarmSnapshotStatus and AlarmFeedMessage.snapshot_status = 5. Carry it downstream from the canonical Contracts protos: - Rust vendored protos under clients/rust/protos, refreshed byte-identical (build.rs falls back to them for out-of-repo tarball builds) - client descriptor set (protoc 34.1 pin) - Go (protoc-gen-go v1.36.11 / protoc-gen-go-grpc 1.6.2) - Python (grpcio-tools 1.80.0 pin) - Java (gradle generateProto) .NET needs no regeneration: the client compiles against the Contracts Generated/ output committed with the proto change. The hand-written CLI feed renderers switch on the payload oneof, so codegen alone does not carry the arm. Add snapshot-status to the .NET, Go, Rust, and Java renderers; the .NET and Go renderers were also missing provider-status, which has been on the wire since the provider-mode work, so add it there too. Java's renderer is an exhaustive switch expression and did not compile until the new case landed. The Python CLI renders generic protobuf-JSON and needs no change. Each client README gains a paragraph on the feed-level frame next to its existing from_truncated_snapshot paragraph: it arrives at stream open after provider_status and before the cached active_alarm frames, then on every verdict change including the clearing frame a monitor restart emits, so a live consumer can track set completeness without polling QueryActiveAlarms. GatewayDashboardDesign: list the two new payload cases the AlarmsHub forwards, and — separately — record the GroupToRole / GroupToTag / UntaggedSessionVisibility rows the settings page already renders but the bullet list omitted.
This commit is contained in:
@@ -125,6 +125,16 @@ deletions from it. It is set-level degraded status, not a comment on the
|
||||
record's own fidelity, and is distinct from `getDegraded()` (the subtag
|
||||
fallback provider).
|
||||
|
||||
`streamAlarms` also carries that completeness verdict at feed level, as a
|
||||
message whose `getPayloadCase()` is `SNAPSHOT_STATUS` and whose
|
||||
`getSnapshotStatus().getTruncated()` is true while the monitor's cached set
|
||||
derives from a truncated fetch. One arrives at stream open (after the
|
||||
`PROVIDER_STATUS` frame, before the cached `ACTIVE_ALARM` frames) so a late
|
||||
joiner learns the current verdict, then one on every verdict change — including
|
||||
the clearing frame sent when the gateway's alarm monitor restarts and drops a
|
||||
truncated verdict. Track it if you need set completeness on a live feed without
|
||||
polling `queryActiveAlarms`.
|
||||
|
||||
## Write Semantics And Common Pitfalls
|
||||
|
||||
These are MXAccess parity behaviors that surprise new callers. The gateway
|
||||
|
||||
+1019
-198
File diff suppressed because it is too large
Load Diff
+7
-1
@@ -48,6 +48,7 @@ import mxaccess_gateway.v1.MxaccessGateway.AcknowledgeAlarmReply;
|
||||
import mxaccess_gateway.v1.MxaccessGateway.AcknowledgeAlarmRequest;
|
||||
import mxaccess_gateway.v1.MxaccessGateway.ActiveAlarmSnapshot;
|
||||
import mxaccess_gateway.v1.MxaccessGateway.AlarmProviderStatus;
|
||||
import mxaccess_gateway.v1.MxaccessGateway.AlarmSnapshotStatus;
|
||||
import mxaccess_gateway.v1.MxaccessGateway.AlarmFeedMessage;
|
||||
import mxaccess_gateway.v1.MxaccessGateway.BulkReadResult;
|
||||
import mxaccess_gateway.v1.MxaccessGateway.BulkWriteResult;
|
||||
@@ -2282,7 +2283,8 @@ public final class MxGatewayCli implements Callable<Integer> {
|
||||
/**
|
||||
* Renders one {@link AlarmFeedMessage} in the CLI's plain-text output
|
||||
* style, distinguishing the active-alarm snapshot, snapshot-complete
|
||||
* sentinel, and transition cases of the message's {@code payload} oneof.
|
||||
* sentinel, transition, provider-status, and snapshot-status cases of the
|
||||
* message's {@code payload} oneof.
|
||||
*/
|
||||
private static String formatAlarmFeedMessage(AlarmFeedMessage message) {
|
||||
return switch (message.getPayloadCase()) {
|
||||
@@ -2307,6 +2309,10 @@ public final class MxGatewayCli implements Callable<Integer> {
|
||||
"provider-status mode=%s degraded=%b reason=%s",
|
||||
status.getMode().name(), status.getDegraded(), status.getReason());
|
||||
}
|
||||
case SNAPSHOT_STATUS -> {
|
||||
AlarmSnapshotStatus status = message.getSnapshotStatus();
|
||||
yield String.format("snapshot-status truncated=%b", status.getTruncated());
|
||||
}
|
||||
case PAYLOAD_NOT_SET -> "unknown";
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user