diff options
author | ninioe <ninioe@gmail.com> | 2016-07-12 16:04:40 +0300 |
---|---|---|
committer | ninioe <ninioe@gmail.com> | 2016-07-12 16:04:40 +0300 |
commit | d045c1e2174146ddc8ad8b2ef4442863f3d84a11 (patch) | |
tree | 458ac9a09ef9df6426a34067072164c44ac18020 /src/org/traccar | |
parent | 8d5b4ec5ec8e4aaa2c34793e3100a7782551afbd (diff) | |
download | trackermap-server-d045c1e2174146ddc8ad8b2ef4442863f3d84a11.tar.gz trackermap-server-d045c1e2174146ddc8ad8b2ef4442863f3d84a11.tar.bz2 trackermap-server-d045c1e2174146ddc8ad8b2ef4442863f3d84a11.zip |
Added support for Alarm popup & positions history cleaner
1. added support for Alarm and Alarm Type in popup and also in history
records. can be muted with a toggle button in the UI
2. added a timer to clear positions history once a day. the default is
to save positions history for 7 days if not defined in the configuration
file.
3. prevent the lock of the UI files (js, html, css, etc..) for wondows
developers in debug mode. It's easier to do changes to the UI without
stopping the app each time.
4. tools: added support in test-generator.py to simulate Alert, also
added minify.bat file to compile new js files for the UI using sencha
SDK for windows developers
Diffstat (limited to 'src/org/traccar')
-rw-r--r-- | src/org/traccar/Main.java | 17 | ||||
-rw-r--r-- | src/org/traccar/database/DataManager.java | 25 | ||||
-rw-r--r-- | src/org/traccar/model/Position.java | 1 | ||||
-rw-r--r-- | src/org/traccar/protocol/H02ProtocolDecoder.java | 15 | ||||
-rw-r--r-- | src/org/traccar/web/WebServer.java | 7 |
5 files changed, 63 insertions, 2 deletions
diff --git a/src/org/traccar/Main.java b/src/org/traccar/Main.java index 1b8d93e34..eb3114210 100644 --- a/src/org/traccar/Main.java +++ b/src/org/traccar/Main.java @@ -16,7 +16,8 @@ package org.traccar; import org.traccar.helper.Log; - +import java.util.Timer; +import java.util.TimerTask; import java.util.Locale; public final class Main { @@ -35,6 +36,20 @@ public final class Main { Context.getWebServer().start(); } + //added by Erez + Timer timer = new Timer(); + timer.scheduleAtFixedRate(new TimerTask() { + @Override + public void run() { + // Clean positions history every day + try { + Context.getDataManager().clearPositionsHistory(); + } catch (Exception error) { + Log.warning(error); + } + } + }, 10*1000, 24*60*60*1000); + Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index b3f24383f..7fd672849 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -521,6 +521,31 @@ public class DataManager implements IdentityManager { .executeQuery(Position.class); } + //added by Erez + public void clearPositionsHistory() throws SQLException { + //SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd"); + String histDays = config.getString("database.positionsHistoryDays"); + if (histDays == null) { + histDays = "7"; + } + int n = Integer.parseInt(histDays); + + for (Device device : getAllDevices()) { + Date lastUpdate = device.getLastUpdate(); + if(lastUpdate != null){ + + Date dateBefore = new Date(lastUpdate.getTime() - n * 24 * 3600 * 1000 ); //Subtract n days + //String dt = s.format(dateBefore); + String sql = "DELETE FROM positions WHERE deviceid=:deviceId and servertime<:serverTime"; + + QueryBuilder.create(dataSource, sql) + .setLong("deviceId", device.getId()) + .setDate("serverTime", dateBefore) + .executeUpdate(); + } + } + } + public Server getServer() throws SQLException { return QueryBuilder.create(dataSource, getQuery("database.selectServers")) .executeQuerySingle(Server.class); diff --git a/src/org/traccar/model/Position.java b/src/org/traccar/model/Position.java index 4e03b2097..c548c542f 100644 --- a/src/org/traccar/model/Position.java +++ b/src/org/traccar/model/Position.java @@ -28,6 +28,7 @@ public class Position extends Message { public static final String KEY_GPS = "gps"; public static final String KEY_EVENT = "event"; public static final String KEY_ALARM = "alarm"; + public static final String KEY_ALARM_TYPE = "alarm-type"; //added by Erez public static final String KEY_STATUS = "status"; public static final String KEY_ODOMETER = "odometer"; public static final String KEY_HOURS = "hours"; diff --git a/src/org/traccar/protocol/H02ProtocolDecoder.java b/src/org/traccar/protocol/H02ProtocolDecoder.java index ec5d3adef..6e1bb2d9d 100644 --- a/src/org/traccar/protocol/H02ProtocolDecoder.java +++ b/src/org/traccar/protocol/H02ProtocolDecoder.java @@ -64,8 +64,21 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { private void processStatus(Position position, long status) { if (!BitUtil.check(status, 0) || !BitUtil.check(status, 1) - || !BitUtil.check(status, 3) || !BitUtil.check(status, 4)) { + || !BitUtil.check(status, 3) || !BitUtil.check(status, 4) || !BitUtil.check(status, 7)) {//added by Erez position.set(Position.KEY_ALARM, true); + + if (!BitUtil.check(status, 0)){//added by Erez + position.set(Position.KEY_ALARM_TYPE, "theft alarm"); + } else if (!BitUtil.check(status, 1)){ + position.set(Position.KEY_ALARM_TYPE, "robbery alarm"); + } else if (!BitUtil.check(status, 3)){ + position.set(Position.KEY_ALARM_TYPE, "illegal ignition alarm"); + } else if (!BitUtil.check(status, 4)){ + position.set(Position.KEY_ALARM_TYPE, "entering alarm"); + } else if (!BitUtil.check(status, 7)){ + position.set(Position.KEY_ALARM_TYPE, "out alarm"); + } + } position.set(Position.KEY_IGNITION, !BitUtil.check(status, 10)); position.set(Position.KEY_STATUS, status); diff --git a/src/org/traccar/web/WebServer.java b/src/org/traccar/web/WebServer.java index 5527e80f3..73702cc3d 100644 --- a/src/org/traccar/web/WebServer.java +++ b/src/org/traccar/web/WebServer.java @@ -118,6 +118,13 @@ public class WebServer { resourceHandler.setResourceBase(config.getString("web.path")); if (config.getBoolean("web.debug")) { resourceHandler.setWelcomeFiles(new String[] {"debug.html"}); + //Troubleshooting Locked Files on Windows (changed by Erez) + resourceHandler.setMinMemoryMappedContentLength(-1); + + /*DefaultServlet defaultServlet = new DefaultServlet(); + ServletHolder holder = new ServletHolder(defaultServlet); + holder.setInitParameter("useFileMappedBuffer", "false"); + handler.addServlet(holder, "/");*/ } else { resourceHandler.setWelcomeFiles(new String[] {"release.html", "index.html"}); } |