Resolved bug where the web charts do not have any gaps when more than one sensor is printed.

Former-commit-id: bd4570203b8b0bfd9333ef23b9110654a8977ccc
This commit is contained in:
Daniel Collin 2016-01-18 15:03:39 +01:00
parent 42064e5209
commit 9ee2a788ce
2 changed files with 73 additions and 47 deletions

View file

@ -3,6 +3,8 @@ package se.hal.page;
import se.hal.HalContext;
import se.hal.intf.HalHttpPage;
import se.hal.util.TimeUtility;
import se.hal.struct.Sensor;
import se.hal.struct.User;
import zutil.db.DBConnection;
import zutil.db.SQLResultHandler;
import zutil.io.file.FileUtil;
@ -13,6 +15,7 @@ import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class PCOverviewHttpPage extends HalHttpPage {
@ -32,6 +35,15 @@ public class PCOverviewHttpPage extends HalHttpPage {
DBConnection db = HalContext.getDB();
List<User> users = User.getAllUsers(db);
ArrayList<PowerData> minDataList = new ArrayList<PowerData>();
ArrayList<PowerData> hourDataList = new ArrayList<PowerData>();
ArrayList<PowerData> dayDataList = new ArrayList<PowerData>();
for(User user : users){
List<Sensor> userSensors = Sensor.getSensors(db, user);
for(Sensor sensor : userSensors){
PreparedStatement stmt = db.getPreparedStatement(
"SELECT user.username as username,"
+ " sensor_data_aggr.timestamp_start as timestamp_start,"
@ -41,13 +53,16 @@ public class PCOverviewHttpPage extends HalHttpPage {
+ TimeUtility.FIVE_MINUTES_IN_MS + " as period_length"
+ " FROM sensor_data_aggr, user, sensor"
+ " WHERE sensor.id = sensor_data_aggr.sensor_id"
+ " AND sensor.id = " + sensor.getId()
+ " AND user.id = sensor.user_id"
+ " AND user.id = " + user.getId()
+ " AND timestamp_end-timestamp_start == ?"
+ " AND timestamp_start > ?"
+ " ORDER BY timestamp_start ASC");
stmt.setLong(1, TimeUtility.FIVE_MINUTES_IN_MS-1);
stmt.setLong(2, (System.currentTimeMillis() - TimeUtility.DAY_IN_MS) );
ArrayList<PowerData> minDataList = DBConnection.exec(stmt , new SQLPowerDataBuilder());
ArrayList<PowerData> userPowerData = DBConnection.exec(stmt , new SQLPowerDataBuilder());
minDataList.addAll(userPowerData);
stmt = db.getPreparedStatement(
"SELECT user.username as username,"
@ -58,13 +73,16 @@ public class PCOverviewHttpPage extends HalHttpPage {
+ TimeUtility.HOUR_IN_MS + " as period_length"
+ " FROM sensor_data_aggr, user, sensor"
+ " WHERE sensor.id = sensor_data_aggr.sensor_id"
+ " AND sensor.id = " + sensor.getId()
+ " AND user.id = sensor.user_id"
+ " AND user.id = " + user.getId()
+ " AND timestamp_end-timestamp_start == ?"
+ " AND timestamp_start > ?"
+ " ORDER BY timestamp_start ASC");
stmt.setLong(1, TimeUtility.HOUR_IN_MS-1);
stmt.setLong(2, (System.currentTimeMillis() - TimeUtility.WEEK_IN_MS) );
ArrayList<PowerData> hourDataList = DBConnection.exec(stmt, new SQLPowerDataBuilder());
userPowerData = DBConnection.exec(stmt, new SQLPowerDataBuilder());
hourDataList.addAll(userPowerData);
stmt = db.getPreparedStatement(
"SELECT user.username as username,"
@ -75,11 +93,16 @@ public class PCOverviewHttpPage extends HalHttpPage {
+ TimeUtility.DAY_IN_MS + " as period_length"
+ " FROM sensor_data_aggr, user, sensor"
+ " WHERE sensor.id = sensor_data_aggr.sensor_id"
+ " AND sensor.id = " + sensor.getId()
+ " AND user.id = sensor.user_id"
+ " AND user.id = " + user.getId()
+ " AND timestamp_end-timestamp_start == ?"
+ " ORDER BY timestamp_start ASC");
stmt.setLong(1, TimeUtility.DAY_IN_MS-1);
ArrayList<PowerData> dayDataList = DBConnection.exec(stmt, new SQLPowerDataBuilder());
userPowerData = DBConnection.exec(stmt, new SQLPowerDataBuilder());
dayDataList.addAll(userPowerData);
}
}
Templator tmpl = new Templator(FileUtil.find(TEMPLATE));

View file

@ -37,7 +37,10 @@ public class User extends DBBean{
return DBBean.load(db, User.class, id);
}
public static List<User> getAllUsers(DBConnection db) throws SQLException{
PreparedStatement stmt = db.getPreparedStatement( "SELECT * FROM user" );
return DBConnection.exec(stmt, DBBeanSQLResultHandler.createList(User.class, db) );
}
public String getUsername() {
return username;