From a89a766440f4fbbbcbe4ea6963f6ab9f3471c0bc Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 13 May 2026 22:35:58 -0700 Subject: [PATCH] Disable status events by default --- src/main/java/org/traccar/config/Keys.java | 8 ++++++++ .../java/org/traccar/session/ConnectionManager.java | 11 +++++------ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/main/java/org/traccar/config/Keys.java b/src/main/java/org/traccar/config/Keys.java index 47def4499..a05fe1f2c 100644 --- a/src/main/java/org/traccar/config/Keys.java +++ b/src/main/java/org/traccar/config/Keys.java @@ -503,6 +503,14 @@ public final class Keys { List.of(KeyType.CONFIG), true); + /** + * Generate device connection status events (deviceOnline, deviceOffline, deviceUnknown) on status changes. + */ + public static final ConfigKey EVENT_STATUS_ENABLE = new BooleanConfigKey( + "event.status.enable", + List.of(KeyType.CONFIG), + false); + /** * If the speed is above specified value, the object is considered to be in motion. Default value is 0.01 knots. */ diff --git a/src/main/java/org/traccar/session/ConnectionManager.java b/src/main/java/org/traccar/session/ConnectionManager.java index 414d14903..40f415ae0 100644 --- a/src/main/java/org/traccar/session/ConnectionManager.java +++ b/src/main/java/org/traccar/session/ConnectionManager.java @@ -64,6 +64,7 @@ public class ConnectionManager implements BroadcastInterface { private final long deviceTimeout; private final boolean showUnknownDevices; + private final boolean statusEventsEnabled; private final Map sessionsByDeviceId = new ConcurrentHashMap<>(); private final Map> sessionsByEndpoint = new ConcurrentHashMap<>(); @@ -97,6 +98,7 @@ public class ConnectionManager implements BroadcastInterface { this.deviceLookupService = deviceLookupService; deviceTimeout = config.getLong(Keys.STATUS_TIMEOUT); showUnknownDevices = config.getBoolean(Keys.WEB_SHOW_UNKNOWN_DEVICES); + statusEventsEnabled = config.getBoolean(Keys.EVENT_STATUS_ENABLE); broadcastService.registerListener(this); } @@ -238,16 +240,13 @@ public class ConnectionManager implements BroadcastInterface { String oldStatus = device.getStatus(); device.setStatus(status); - if (!status.equals(oldStatus)) { - String eventType; - Map events = new HashMap<>(); - eventType = switch (status) { + if (!status.equals(oldStatus) && statusEventsEnabled) { + String eventType = switch (status) { case Device.STATUS_ONLINE -> Event.TYPE_DEVICE_ONLINE; case Device.STATUS_UNKNOWN -> Event.TYPE_DEVICE_UNKNOWN; default -> Event.TYPE_DEVICE_OFFLINE; }; - events.put(new Event(eventType, deviceId), null); - notificationManager.updateEvents(events); + notificationManager.updateEvents(Collections.singletonMap(new Event(eventType, deviceId), null)); } if (time != null) {