aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorninioe <ninioe@gmail.com>2016-07-12 16:04:40 +0300
committerninioe <ninioe@gmail.com>2016-07-12 16:04:40 +0300
commitd045c1e2174146ddc8ad8b2ef4442863f3d84a11 (patch)
tree458ac9a09ef9df6426a34067072164c44ac18020 /src
parent8d5b4ec5ec8e4aaa2c34793e3100a7782551afbd (diff)
downloadtraccar-server-d045c1e2174146ddc8ad8b2ef4442863f3d84a11.tar.gz
traccar-server-d045c1e2174146ddc8ad8b2ef4442863f3d84a11.tar.bz2
traccar-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')
-rw-r--r--src/org/traccar/Main.java17
-rw-r--r--src/org/traccar/database/DataManager.java25
-rw-r--r--src/org/traccar/model/Position.java1
-rw-r--r--src/org/traccar/protocol/H02ProtocolDecoder.java15
-rw-r--r--src/org/traccar/web/WebServer.java7
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"});
}