Some more refactoring and initial implementation of sensor Interface

Former-commit-id: 8e05cf50495dd54ba95d3a4ed10f0374cb2c428a
This commit is contained in:
Ziver Koc 2015-12-15 23:29:04 +01:00
parent 70f9bb1681
commit 56106a178d
6 changed files with 128 additions and 18 deletions

View file

@ -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"));

View file

@ -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();
}

View file

@ -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();
}

View file

@ -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":

View file

@ -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<HalEvent> 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;
}
}

View file

@ -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;
}
}