aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnton Tananaev <anton.tananaev@gmail.com>2016-07-25 16:49:08 +1200
committerAnton Tananaev <anton.tananaev@gmail.com>2016-07-25 16:49:08 +1200
commit451c358879e1f6f2fda26e4b85ef97982fbeaba5 (patch)
tree9b40f2dff6b03b5fb66c29c93dd2fd20cb84b65a
parent4a31e34ca62d4b1941d3bc329afc127ef7263f34 (diff)
downloadtrackermap-server-451c358879e1f6f2fda26e4b85ef97982fbeaba5.tar.gz
trackermap-server-451c358879e1f6f2fda26e4b85ef97982fbeaba5.tar.bz2
trackermap-server-451c358879e1f6f2fda26e4b85ef97982fbeaba5.zip
Improve history clearing logic
-rw-r--r--debug.xml4
-rw-r--r--src/org/traccar/Main.java9
-rw-r--r--src/org/traccar/database/DataManager.java27
3 files changed, 11 insertions, 29 deletions
diff --git a/debug.xml b/debug.xml
index 346eda292..304ae7f3d 100644
--- a/debug.xml
+++ b/debug.xml
@@ -323,8 +323,8 @@
DELETE FROM notifications WHERE id = :id;
</entry>
- <entry key='database.clearPositionsHistory'>
- DELETE FROM positions WHERE id != :positionId and deviceid = :deviceId and servertime &lt; :serverTime;
+ <entry key='database.deletePositions'>
+ DELETE FROM positions WHERE serverTime &lt; :serverTime AND id NOT IN (SELECT positionId FROM devices);
</entry>
<!-- PROTOCOL CONFIG -->
diff --git a/src/org/traccar/Main.java b/src/org/traccar/Main.java
index e7e8d8ab9..e992691ad 100644
--- a/src/org/traccar/Main.java
+++ b/src/org/traccar/Main.java
@@ -23,8 +23,8 @@ import java.util.TimerTask;
import java.util.Locale;
public final class Main {
- static final long CLEAN_DELAY = 0;
- static final long CLEAN_PERIOD = 24 * 60 * 60 * 1000;
+
+ private static final long CLEAN_PERIOD = 24 * 60 * 60 * 1000;
private Main() {
}
@@ -40,8 +40,7 @@ public final class Main {
Context.getWebServer().start();
}
- Timer timer = new Timer();
- timer.scheduleAtFixedRate(new TimerTask() {
+ new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
@@ -50,7 +49,7 @@ public final class Main {
Log.warning(error);
}
}
- }, CLEAN_DELAY, CLEAN_PERIOD);
+ }, 0, CLEAN_PERIOD);
Runtime.getRuntime().addShutdownHook(new Thread() {
@Override
diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java
index 04d0d44ea..78f1b4109 100644
--- a/src/org/traccar/database/DataManager.java
+++ b/src/org/traccar/database/DataManager.java
@@ -305,28 +305,11 @@ public class DataManager {
}
public void clearPositionsHistory() throws SQLException {
- int histDays = config.getInteger("database.positionsHistoryDays");
- if (histDays == 0) {
- return;
- }
-
- String sql = getQuery("database.clearPositionsHistory");
- if (sql == null) {
- return;
- }
-
- for (Device device : getAllDevices()) {
- Date lastUpdate = device.getLastUpdate();
- if (lastUpdate != null) {
-
- Date dateBefore = new Date(lastUpdate.getTime() - histDays * 24 * 3600 * 1000);
-
- QueryBuilder.create(dataSource, sql)
- .setLong("positionId", device.getPositionId())
- .setLong("deviceId", device.getId())
- .setDate("serverTime", dateBefore)
- .executeUpdate();
- }
+ int historyDays = config.getInteger("database.positionsHistoryDays");
+ if (historyDays != 0) {
+ QueryBuilder.create(dataSource, getQuery("database.deletePositions"))
+ .setDate("serverTime", new Date(System.currentTimeMillis() - historyDays * 24 * 3600 * 1000))
+ .executeUpdate();
}
}