b4016e738c
Ninth PR of the alarms-over-gateway epic (docs/plans/alarms-over-gateway.md). Mirrors PR E.2's .NET surface on the Go SDK. Depends on PR E.1 (regen, merged). - Client.AcknowledgeAlarm — context-aware unary call routed through the existing callContext helper (default 30s timeout). Failures wrap into *GatewayError; protocol-status non-OK promotes to typed protocol errors via EnsureProtocolSuccess. - Client.QueryActiveAlarms — context-streaming wrapper around the generated MxAccessGateway_QueryActiveAlarmsClient. Caller drives the stream via Recv(); cancelling ctx releases it. - types.go re-exports the four new generated types (AcknowledgeAlarmRequest/Reply, QueryActiveAlarmsRequest, ActiveAlarmSnapshot) plus the AlarmTransitionKind / AlarmConditionState enums and the QueryActiveAlarmsClient stream alias. - version.go bumps GatewayProtocolVersion 1 → 3 to match the .NET contract; the const was previously stale and the bump fixes the pre-existing TestOpenSessionFixtureProtocolVersions failure that was masked because the fixture had not been regenerated until A.1. Tests: - 4 new tests in alarms_test.go — request shape + auth metadata, nil-request rejection, Unauthenticated mapping, snapshot streaming over bufconn, filter-prefix passthrough. - All Go test suites green: cmd/mxgw-go + mxgateway. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
54 lines
1.8 KiB
Go
54 lines
1.8 KiB
Go
package mxgateway
|
|
|
|
import (
|
|
"context"
|
|
"errors"
|
|
)
|
|
|
|
// AcknowledgeAlarm acknowledges an active MXAccess alarm condition through the
|
|
// gateway. The gateway authenticates the request against the API key's
|
|
// invoke:alarm-ack scope and forwards the acknowledge to the worker's MXAccess
|
|
// session; the resulting native MxStatus is returned in the reply.
|
|
//
|
|
// Acks are idempotent — re-acking an already-acked condition is a no-op at
|
|
// the MxAccess layer.
|
|
func (c *Client) AcknowledgeAlarm(ctx context.Context, req *AcknowledgeAlarmRequest) (*AcknowledgeAlarmReply, error) {
|
|
if req == nil {
|
|
return nil, errors.New("mxgateway: acknowledge alarm request is required")
|
|
}
|
|
|
|
callCtx, cancel := c.callContext(ctx)
|
|
defer cancel()
|
|
|
|
reply, err := c.raw.AcknowledgeAlarm(callCtx, req)
|
|
if err != nil {
|
|
return nil, &GatewayError{Op: "acknowledge alarm", Err: err}
|
|
}
|
|
if err := EnsureProtocolSuccess("acknowledge alarm", reply.GetProtocolStatus(), nil); err != nil {
|
|
return reply, err
|
|
}
|
|
|
|
return reply, nil
|
|
}
|
|
|
|
// QueryActiveAlarms streams a snapshot of all alarms currently Active or
|
|
// ActiveAcked — the gateway's ConditionRefresh equivalent. Used after reconnect
|
|
// to seed local Part 9 state, or to reconcile alarms that may have been missed
|
|
// during a transport blip.
|
|
//
|
|
// The returned stream is owned by the caller; cancel ctx to release it.
|
|
// Optional alarm-reference prefix scoping (req.AlarmFilterPrefix) limits the
|
|
// stream to a sub-tree.
|
|
func (c *Client) QueryActiveAlarms(ctx context.Context, req *QueryActiveAlarmsRequest) (QueryActiveAlarmsClient, error) {
|
|
if req == nil {
|
|
return nil, errors.New("mxgateway: query active alarms request is required")
|
|
}
|
|
|
|
stream, err := c.raw.QueryActiveAlarms(ctx, req)
|
|
if err != nil {
|
|
return nil, &GatewayError{Op: "query active alarms", Err: err}
|
|
}
|
|
|
|
return stream, nil
|
|
}
|