Migrate keys and remove database cleanup

This commit is contained in:
Anton Tananaev
2020-12-29 11:22:01 -08:00
parent 47468774b6
commit c0dee04079
5 changed files with 27 additions and 42 deletions

View File

@@ -63,14 +63,6 @@
SELECT * FROM tc_events WHERE deviceId = :deviceId AND serverTime BETWEEN :from AND :to ORDER BY serverTime
</entry>
<entry key='database.deletePositions'>
DELETE FROM tc_positions WHERE serverTime &lt; :serverTime AND id NOT IN (SELECT positionId FROM tc_devices WHERE positionId IS NOT NULL)
</entry>
<entry key='database.deleteEvents'>
DELETE FROM tc_events WHERE serverTime &lt; :serverTime
</entry>
<entry key='database.selectStatistics'>
SELECT * FROM tc_statistics WHERE captureTime BETWEEN :from AND :to ORDER BY captureTime
</entry>

View File

@@ -119,19 +119,6 @@ public final class Main {
}
}
private static void scheduleDatabaseCleanup() {
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
try {
Context.getDataManager().clearHistory();
} catch (SQLException error) {
LOGGER.warn("Clear history error", error);
}
}
}, 0, CLEAN_PERIOD);
}
public static void run(String configFile) {
try {
Context.init(configFile);
@@ -147,7 +134,6 @@ public final class Main {
Context.getScheduleManager().start();
scheduleHealthCheck();
scheduleDatabaseCleanup();
Thread.setDefaultUncaughtExceptionHandler((t, e) -> LOGGER.error("Thread exception", e));

View File

@@ -161,13 +161,28 @@ public final class Keys {
"database.changelog",
Collections.singletonList(KeyType.GLOBAL));
/**
* Automatically generate SQL database queries when possible.
*/
public static final ConfigKey<Boolean> DATABASE_GENERATE_QUERIES = new ConfigKey<>(
"database.generateQueries",
Collections.singletonList(KeyType.GLOBAL));
/**
* Database connection pool size. Default value is defined by the HikariCP library.
*/
public static final ConfigKey<Integer> DATABASE_MAX_POOL_SIZE = new ConfigKey<>(
"database.maxPoolSize",
Collections.singletonList(KeyType.GLOBAL));
/**
* SQL query to check connection status. Default value is 'SELECT 1'. For Oracle database you can use
* 'SELECT 1 FROM DUAL'.
*/
public static final ConfigKey<String> DATABASE_CHECK_CONNECTION = new ConfigKey<>(
"database.checkConnection",
Collections.singletonList(KeyType.GLOBAL));
Collections.singletonList(KeyType.GLOBAL),
"SELECT 1");
/**
* Store original HEX or string data as "raw" attribute in the corresponding position.
@@ -320,6 +335,13 @@ public final class Keys {
Collections.singletonList(KeyType.GLOBAL),
60000L);
/**
* Authentication sessions timeout in seconds. By default no timeout.
*/
public static final ConfigKey<Integer> WEB_SESSION_TIMEOUT = new ConfigKey<>(
"web.sessionTimeout",
Collections.singletonList(KeyType.GLOBAL));
/**
* Enable positions forwarding to other web server.
*/

View File

@@ -114,16 +114,15 @@ public class DataManager {
hikariConfig.setJdbcUrl(config.getString(Keys.DATABASE_URL));
hikariConfig.setUsername(config.getString(Keys.DATABASE_USER));
hikariConfig.setPassword(config.getString(Keys.DATABASE_PASSWORD));
hikariConfig.setConnectionInitSql(config.getString(Keys.DATABASE_CHECK_CONNECTION, "SELECT 1"));
hikariConfig.setConnectionInitSql(config.getString(Keys.DATABASE_CHECK_CONNECTION));
hikariConfig.setIdleTimeout(600000);
int maxPoolSize = config.getInteger("database.maxPoolSize");
int maxPoolSize = config.getInteger(Keys.DATABASE_MAX_POOL_SIZE);
if (maxPoolSize != 0) {
hikariConfig.setMaximumPoolSize(maxPoolSize);
}
generateQueries = config.getBoolean("database.generateQueries");
generateQueries = config.getBoolean(Keys.DATABASE_GENERATE_QUERIES);
dataSource = new HikariDataSource(hikariConfig);
}
@@ -342,20 +341,6 @@ public class DataManager {
.executeQuery(Position.class);
}
public void clearHistory() throws SQLException {
long historyDays = config.getInteger("database.historyDays");
if (historyDays != 0) {
Date timeLimit = new Date(System.currentTimeMillis() - historyDays * 24 * 3600 * 1000);
LOGGER.info("Clearing history earlier than " + DateUtil.formatDate(timeLimit, false));
QueryBuilder.create(dataSource, getQuery("database.deletePositions"))
.setDate("serverTime", timeLimit)
.executeUpdate();
QueryBuilder.create(dataSource, getQuery("database.deleteEvents"))
.setDate("serverTime", timeLimit)
.executeUpdate();
}
}
public Server getServer() throws SQLException {
return QueryBuilder.create(dataSource, getQuery(ACTION_SELECT_ALL, Server.class))
.executeQuerySingle(Server.class);

View File

@@ -168,7 +168,7 @@ public class WebServer {
}
private void initSessionConfig(Config config, ServletContextHandler servletHandler) {
int sessionTimeout = config.getInteger("web.sessionTimeout");
int sessionTimeout = config.getInteger(Keys.WEB_SESSION_TIMEOUT);
if (sessionTimeout > 0) {
servletHandler.getSessionHandler().setMaxInactiveInterval(sessionTimeout);
}