diff --git a/.classpath b/.classpath index 566accb..20acc62 100644 --- a/.classpath +++ b/.classpath @@ -7,5 +7,6 @@ + diff --git a/bin/de/hottis/MeasurementCollector/DatabaseEngine.class b/bin/de/hottis/MeasurementCollector/DatabaseEngine.class new file mode 100644 index 0000000..79c084f Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/DatabaseEngine.class differ diff --git a/bin/de/hottis/MeasurementCollector/ITriggerable.class b/bin/de/hottis/MeasurementCollector/ITriggerable.class new file mode 100644 index 0000000..dd0298d Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/ITriggerable.class differ diff --git a/bin/de/hottis/MeasurementCollector/MBusParser.class b/bin/de/hottis/MeasurementCollector/MBusParser.class index 51e651c..8c52d4f 100644 Binary files a/bin/de/hottis/MeasurementCollector/MBusParser.class and b/bin/de/hottis/MeasurementCollector/MBusParser.class differ diff --git a/bin/de/hottis/MeasurementCollector/MeasurementCollector.class b/bin/de/hottis/MeasurementCollector/MeasurementCollector.class index 0c74550..103418a 100644 Binary files a/bin/de/hottis/MeasurementCollector/MeasurementCollector.class and b/bin/de/hottis/MeasurementCollector/MeasurementCollector.class differ diff --git a/bin/de/hottis/MeasurementCollector/TriggerTimer.class b/bin/de/hottis/MeasurementCollector/TriggerTimer.class new file mode 100644 index 0000000..ed194f6 Binary files /dev/null and b/bin/de/hottis/MeasurementCollector/TriggerTimer.class differ diff --git a/bin/log4j2.xml b/bin/log4j2.xml index 0566786..09cd5cf 100644 --- a/bin/log4j2.xml +++ b/bin/log4j2.xml @@ -2,7 +2,7 @@ - + diff --git a/libraries/mysql-connector-java-5.1.44-bin.jar b/libraries/mysql-connector-java-5.1.44-bin.jar new file mode 100644 index 0000000..2f2e32d Binary files /dev/null and b/libraries/mysql-connector-java-5.1.44-bin.jar differ diff --git a/src/de/hottis/MeasurementCollector/DatabaseEngine.java b/src/de/hottis/MeasurementCollector/DatabaseEngine.java new file mode 100644 index 0000000..267783e --- /dev/null +++ b/src/de/hottis/MeasurementCollector/DatabaseEngine.java @@ -0,0 +1,80 @@ +package de.hottis.MeasurementCollector; + +import java.util.List; +import java.util.Properties; +import java.util.Timer; + +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +public class DatabaseEngine extends Thread implements ITriggerable { + final protected Logger logger = LogManager.getRootLogger(); + + private Properties config; + private DataObjectQueue queue; + private boolean stop; + private boolean triggerFlag; + private Timer timer; + + public DatabaseEngine(Properties config, DataObjectQueue queue) { + super("MeasurementCollector.DatabaseEngine"); + this.config = config; + this.queue = queue; + this.stop = false; + this.triggerFlag = false; + } + + public void requestShutdown() { + logger.info("Shutdown of database engine requested"); + this.stop = true; + try { + this.join(); + logger.info("Database engine is down"); + } catch (InterruptedException e) { + logger.error("Waiting for shutdown of database engine interrupted"); + } + } + + public synchronized void trigger() { + logger.debug("DatabaseEngine triggered"); + triggerFlag = true; + notify(); + } + + public void init() { + timer = new Timer("DatabaseEngineTrigger"); + timer.schedule(new TriggerTimer(this), 0, 60 * 1000); + } + + @Override + public synchronized void run() { + while (! stop) { + logger.debug("DatabaseEngine is about to wait"); + while (! triggerFlag) { + try { + wait(); + } catch (InterruptedException e) { + } + } + triggerFlag = false; + logger.debug("DatabaseEngine has received trigger"); + + try { + while (true) { + List adol = queue.peek(); + if (adol == null) { + break; + } + + for (ADataObject ado : adol) { + logger.debug(ado); + } + + queue.remove(adol); + } + } catch (Exception e) { + logger.error("Exception in outer database engine loop", e); + } + } + } +} diff --git a/src/de/hottis/MeasurementCollector/ITriggerable.java b/src/de/hottis/MeasurementCollector/ITriggerable.java new file mode 100644 index 0000000..dcca883 --- /dev/null +++ b/src/de/hottis/MeasurementCollector/ITriggerable.java @@ -0,0 +1,5 @@ +package de.hottis.MeasurementCollector; + +public interface ITriggerable { + public void trigger(); +} diff --git a/src/de/hottis/MeasurementCollector/MBusParser.java b/src/de/hottis/MeasurementCollector/MBusParser.java index 529b41f..c08fd77 100644 --- a/src/de/hottis/MeasurementCollector/MBusParser.java +++ b/src/de/hottis/MeasurementCollector/MBusParser.java @@ -81,12 +81,12 @@ public class MBusParser extends AMessageParser { if (dataParsers.containsKey(name)) { List measurementItems = dataParsers.get(name).parse(timestamp, dataRecords); - for (ADataObject ado : measurementItems) { - logger.debug(ado); - } + //for (ADataObject ado : measurementItems) { + // logger.debug(ado); + //} queue.add(measurementItems); - logger.debug("Queue size: " + queue.size()); + //logger.debug("Queue size: " + queue.size()); } else { logger.warn("unknown name: " + name); } diff --git a/src/de/hottis/MeasurementCollector/MeasurementCollector.java b/src/de/hottis/MeasurementCollector/MeasurementCollector.java index 8feeaee..22dcac2 100644 --- a/src/de/hottis/MeasurementCollector/MeasurementCollector.java +++ b/src/de/hottis/MeasurementCollector/MeasurementCollector.java @@ -16,17 +16,24 @@ public class MeasurementCollector { final Properties config = new Properties(); config.load(MeasurementCollector.class.getClassLoader().getResourceAsStream(PROPS_FILENAME)); - + logger.debug("Configuration loaded"); MqttReceiver mqttReceiver = new MqttReceiver(config); mqttReceiver.connect(); - + logger.debug("MqttReceiver started"); + DataObjectQueue queue = new DataObjectQueue(); + logger.debug("Queue instantiated"); MBusParser mbusParser = new MBusParser(config, queue); mbusParser.registerConfiguredDataParsers(); mqttReceiver.registerParser(mbusParser); + logger.debug("MBusParser started"); + DatabaseEngine databaseEngine = new DatabaseEngine(config, queue); + databaseEngine.init(); + databaseEngine.start(); + logger.debug("DatabaseEngine started"); } } diff --git a/src/de/hottis/MeasurementCollector/TriggerTimer.java b/src/de/hottis/MeasurementCollector/TriggerTimer.java new file mode 100644 index 0000000..926b6e1 --- /dev/null +++ b/src/de/hottis/MeasurementCollector/TriggerTimer.java @@ -0,0 +1,15 @@ +package de.hottis.MeasurementCollector; + +import java.util.TimerTask; + +public class TriggerTimer extends TimerTask { + private ITriggerable triggerable; + + public TriggerTimer(ITriggerable triggerable) { + this.triggerable = triggerable; + } + + public void run() { + triggerable.trigger(); + } +} diff --git a/src/log4j2.xml b/src/log4j2.xml index 0566786..09cd5cf 100644 --- a/src/log4j2.xml +++ b/src/log4j2.xml @@ -2,7 +2,7 @@ - +