Added
gs_gateways_disconnected_totalmetric, counting gateway disconnections by protocol and by the error the connection was disconnected with. This makes disconnection reasons (such as gateways disappearing without a close handshake, or missing too many pongs) observable as a rate, instead of only through logs.ttgc.managed-gateway-euisconfiguration option: Gateway EUI prefixes of managed gateways, defaulting to the EUI prefix of The Things Industries managed gateways. Gateways outside these prefixes are reported as not managed in the claiming info.ttgc.lbscups.lns-portconfiguration option: the LoRa Basics Station LNS port of the Gateway Server, defaulting to8887.- Downlink scheduling on all antennas of a gateway. Previously, only the first antenna could be used as a downlink path, and uplinks received on any other antenna had their downlink path disabled.
events.redis.store.expire-limiter-sizeconfiguration option: how many entity event streams thePEXPIRErate limiter tracks, at 8 bytes each, defaulting to4194304(32 MiB). A negative value refreshes the TTL on every event.
Changed
- In the Semtech UDP Packet Forwarder protocol,
PUSH_ACKandPULL_ACKare only sent after the gateway has connected to the Gateway Server and the gateway'sPUSH_DATAorPULL_DATArespectively has been accepted. - Don't log a
Task failedwarning in GS for every task attached to a gateway connection when that connection is closed. The tasks that run for the lifetime of a gateway connection now stop without an error when the connection is closed, and the disconnection is logged once, asDisconnected, including the reason. This removes several duplicate warnings per gateway disconnection, which were particularly noisy for gateways on unreliable backhaul. - Websocket close errors on the LoRa Basics Station frontend (such as
websocket: close 1006 (abnormal closure): unexpected EOF, which is what a gateway disappearing without a close handshake looks like) are now reported as the defined errorpkg/gatewayserver/io/semtechws:websocket_closed, with the close code as an attribute and the original error as the cause. As a result, thegs.gateway.disconnectevent for these disconnections now carries structured error details instead of a plain string; consumers that parse the event data should expect theErrorDetailsformat. - The events Redis store now refreshes each per-entity event stream's TTL at most once per half of the configured
events.redis.store.entity-ttl, instead of on every published event, to reducePEXPIREcommand load (and therefore CPU) on the events Redis. The refresh is rate limited with a fixed-size table allocated at startup, so memory does not grow with the number of entities. Event history retention is unchanged.
Fixed
- Parsing of the
rctxfield in theupinfoobject of upstream messages received via the LoRa Basics Station LNS protocol. The field name was misspelled asrtcx, so the radio context reported by gateways was ignored. The antenna index in the uplink metadata now reflects the reported radio context and is echoed back in class A downlinks, instead of always being 0. - The antenna gain sent to LoRa Basics Station gateways in the router configuration. Each board's radio configuration now uses the gain of its own antenna instead of applying the first antenna's gain to all boards, and fractional gains are no longer truncated.