diff --git a/src/se/koc/hal/deamon/DataAggregatorDaemon.java b/src/se/koc/hal/deamon/DataAggregatorDaemon.java index 2d5f4f04..2cfab35c 100755 --- a/src/se/koc/hal/deamon/DataAggregatorDaemon.java +++ b/src/se/koc/hal/deamon/DataAggregatorDaemon.java @@ -13,6 +13,7 @@ import java.util.logging.Logger; import se.koc.hal.HalContext; import se.koc.hal.intf.HalDaemon; import se.koc.hal.struct.HalSensor; +import se.koc.hal.struct.HalSensor.AggregationMethod; import se.koc.hal.util.TimeUtility; import zutil.db.DBConnection; import zutil.db.SQLResultHandler; @@ -21,12 +22,7 @@ import zutil.log.LogUtil; public class DataAggregatorDaemon extends TimerTask implements HalDaemon { private static final Logger logger = LogUtil.getLogger(); - - private enum AggregationMethod{ - SUM, - AVG - } - + public void initiate(Timer timer){ timer.schedule(this, 0, TimeUtility.FIVE_MINUTES_IN_MS); } @@ -49,13 +45,13 @@ public class DataAggregatorDaemon extends TimerTask implements HalDaemon { logger.fine("The sensor is of type: " + sensor.getType()); if(sensor.getType().equals("PowerMeter")){ logger.fine("aggregating raw data to five minute periods"); - aggregateRawData(sensor.getId(), TimeUtility.FIVE_MINUTES_IN_MS, 5, AggregationMethod.SUM); + aggregateRawData(sensor.getId(), TimeUtility.FIVE_MINUTES_IN_MS, 5, sensor.getAggregationMethod()); logger.fine("aggregating five minute periods into hour periods"); - aggrigateAggregatedData(sensor.getId(), TimeUtility.FIVE_MINUTES_IN_MS, TimeUtility.HOUR_IN_MS, 12, AggregationMethod.SUM); + aggrigateAggregatedData(sensor.getId(), TimeUtility.FIVE_MINUTES_IN_MS, TimeUtility.HOUR_IN_MS, 12, sensor.getAggregationMethod()); logger.fine("aggregating one hour periods into one day periods"); - aggrigateAggregatedData(sensor.getId(), TimeUtility.HOUR_IN_MS, TimeUtility.DAY_IN_MS, 24, AggregationMethod.SUM); + aggrigateAggregatedData(sensor.getId(), TimeUtility.HOUR_IN_MS, TimeUtility.DAY_IN_MS, 24, sensor.getAggregationMethod()); }else{ - logger.fine("The sensor type is not supported by the aggregation deamon. Ignoring"); + logger.fine("The sensor type is not supported by the aggregation daemon. Ignoring"); } } @@ -170,7 +166,7 @@ public class DataAggregatorDaemon extends TimerTask implements HalDaemon { float data = -1; switch(aggrMethod){ case SUM: data = sum; break; - case AVG: data = sum/samples; break; + case AVERAGE: data = sum/samples; break; } logger.finer("Calculated day period: " + currentPeriodTimestamp + ", data: " + sum + ", confidence: " + aggrConfidence + ", samples: " + samples + ", aggrMethod: " + aggrMethod); preparedInsertStmt.setInt(1, result.getInt("sensor_id")); diff --git a/src/se/koc/hal/intf/HalEventController.java b/src/se/koc/hal/intf/HalEventController.java new file mode 100755 index 00000000..b8e8850b --- /dev/null +++ b/src/se/koc/hal/intf/HalEventController.java @@ -0,0 +1,36 @@ +package se.koc.hal.intf; + +import se.koc.hal.struct.HalEvent; + +/** + * Created by Ziver on 2015-12-15. + */ +public interface HalEventController { + /** + * Will register an event type to be handled by this controller + */ + public void register(HalEvent event); + + /** + * Deregisters an event from this controller, the controller + * will no longer handle that type of event + */ + public void deregister(HalEvent event); + + /** + * @param event transmit this event if possible. + */ + public void send(HalEvent event); + + /** + * @return the number of registered objects + */ + public int size(); + + /** + * Close any resources associated with this controller. + * This method could be called multiple times, first time + * should be handled as normal any subsequent calls should be ignored. + */ + public void close(); +} \ No newline at end of file diff --git a/src/se/koc/hal/intf/HalSensorController.java b/src/se/koc/hal/intf/HalSensorController.java new file mode 100755 index 00000000..c279e167 --- /dev/null +++ b/src/se/koc/hal/intf/HalSensorController.java @@ -0,0 +1,32 @@ +package se.koc.hal.intf; + +import se.koc.hal.struct.HalSensor; + +/** + * Created by Ziver on 2015-12-15. + */ +public interface HalSensorController { + + /** + * Will register a sensor type to be handled by this controller + */ + public void register(HalSensor sensor); + + /** + * Deregisters a sensor from this controller, the controller + * will no longer handle that type of sensor + */ + public void deregister(HalSensor sensor); + + /** + * @return the number of registered objects + */ + public int size(); + + /** + * Close any resources associated with this controller. + * This method could be called multiple times, first time + * should be handled as normal any subsequent calls should be ignored. + */ + public void close(); +} diff --git a/src/se/koc/hal/page/PCConfigureHttpPage.java b/src/se/koc/hal/page/PCConfigureHttpPage.java index 41ebd031..02197c27 100755 --- a/src/se/koc/hal/page/PCConfigureHttpPage.java +++ b/src/se/koc/hal/page/PCConfigureHttpPage.java @@ -46,7 +46,7 @@ public class PCConfigureHttpPage extends HalHttpPage { sensor.setName(request.get("name")); sensor.setType(request.get("type")); sensor.setConfig(request.get("config")); - sensor.setUserId(localUser); + sensor.setUser(localUser); sensor.setSynced(true); sensor.save(db); case "modify_local_sensor": diff --git a/src/se/koc/hal/struct/HalEvent.java b/src/se/koc/hal/struct/HalEvent.java index 84284bc1..3a5cf554 100755 --- a/src/se/koc/hal/struct/HalEvent.java +++ b/src/se/koc/hal/struct/HalEvent.java @@ -1,7 +1,37 @@ package se.koc.hal.struct; +import se.koc.hal.intf.HalEventController; +import zutil.db.DBConnection; +import zutil.db.bean.DBBean; +import zutil.db.bean.DBBeanSQLResultHandler; + +import java.sql.PreparedStatement; +import java.sql.SQLException; +import java.util.List; + /** * Created by Ziver on 2015-12-15. */ -public class HalEvent { +@DBBean.DBTable("event") +public class HalEvent extends DBBean{ + // Event specific data + private String name; + private String type; + private String config; + + // User configuration + private User user; + + + + public static List getEvents(DBConnection db) throws SQLException { + PreparedStatement stmt = db.getPreparedStatement( "SELECT * FROM event" ); + return DBConnection.exec(stmt, DBBeanSQLResultHandler.createList(HalEvent.class, db) ); + } + + + + public HalEventController getController(){ + return null; + } } diff --git a/src/se/koc/hal/struct/HalSensor.java b/src/se/koc/hal/struct/HalSensor.java index 13d6bd77..07f7f4fb 100755 --- a/src/se/koc/hal/struct/HalSensor.java +++ b/src/se/koc/hal/struct/HalSensor.java @@ -5,6 +5,7 @@ import java.sql.SQLException; import java.util.List; import se.koc.hal.HalContext; +import se.koc.hal.intf.HalSensorController; import zutil.db.DBConnection; import zutil.db.bean.DBBean; import zutil.db.bean.DBBeanSQLResultHandler; @@ -12,13 +13,19 @@ import zutil.db.handler.SimpleSQLResult; @DBBean.DBTable("sensor") public class HalSensor extends DBBean{ + public enum AggregationMethod{ + SUM, + AVERAGE + } + + // Sensor specific data private String name; private String type; private String config; // User configuration - private long user_id; + private User user; private long external_id = -1; /** local sensor= if sensor should be public. external sensor= if sensor should be requested from host **/ private boolean sync = false; @@ -79,11 +86,11 @@ public class HalSensor extends DBBean{ this.config = config; } - public long getUserId() { - return user_id; + public User getUser() { + return user; } - public void setUserId(User user) { - this.user_id = user.getId(); + public void setUser(User user) { + this.user = user; } public long getExternalId() { return external_id; @@ -97,4 +104,13 @@ public class HalSensor extends DBBean{ public void setSynced(boolean synced) { this.sync = synced; } + + + public AggregationMethod getAggregationMethod(){ + return AggregationMethod.SUM; + } + + public HalSensorController getController(){ + return null; + } }