diff --git a/src/se/hal/page/PCOverviewHttpPage.java b/src/se/hal/page/PCOverviewHttpPage.java index 09606e3f..9fb6a359 100755 --- a/src/se/hal/page/PCOverviewHttpPage.java +++ b/src/se/hal/page/PCOverviewHttpPage.java @@ -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,54 +35,74 @@ public class PCOverviewHttpPage extends HalHttpPage { DBConnection db = HalContext.getDB(); - PreparedStatement stmt = db.getPreparedStatement( - "SELECT user.username as username," - + " sensor_data_aggr.timestamp_start as timestamp_start," - + " sensor_data_aggr.timestamp_end as timestamp_end," - + " sensor_data_aggr.data as data," - + " sensor_data_aggr.confidence as confidence," - + TimeUtility.FIVE_MINUTES_IN_MS + " as period_length" - + " FROM sensor_data_aggr, user, sensor" - + " WHERE sensor.id = sensor_data_aggr.sensor_id" - + " AND user.id = sensor.user_id" - + " 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 minDataList = DBConnection.exec(stmt , new SQLPowerDataBuilder()); + List users = User.getAllUsers(db); - stmt = db.getPreparedStatement( - "SELECT user.username as username," - + " sensor_data_aggr.timestamp_start as timestamp_start," - + " sensor_data_aggr.timestamp_end as timestamp_end," - + " sensor_data_aggr.data as data," - + " sensor_data_aggr.confidence as confidence," - + TimeUtility.HOUR_IN_MS + " as period_length" - + " FROM sensor_data_aggr, user, sensor" - + " WHERE sensor.id = sensor_data_aggr.sensor_id" - + " AND user.id = sensor.user_id" - + " 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 hourDataList = DBConnection.exec(stmt, new SQLPowerDataBuilder()); + ArrayList minDataList = new ArrayList(); + ArrayList hourDataList = new ArrayList(); + ArrayList dayDataList = new ArrayList(); - stmt = db.getPreparedStatement( - "SELECT user.username as username," - + " sensor_data_aggr.timestamp_start as timestamp_start," - + " sensor_data_aggr.timestamp_end as timestamp_end," - + " sensor_data_aggr.data as data," - + " sensor_data_aggr.confidence as confidence," - + TimeUtility.DAY_IN_MS + " as period_length" - + " FROM sensor_data_aggr, user, sensor" - + " WHERE sensor.id = sensor_data_aggr.sensor_id" - + " AND user.id = sensor.user_id" - + " AND timestamp_end-timestamp_start == ?" - + " ORDER BY timestamp_start ASC"); - stmt.setLong(1, TimeUtility.DAY_IN_MS-1); - ArrayList dayDataList = DBConnection.exec(stmt, new SQLPowerDataBuilder()); + for(User user : users){ + List 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," + + " sensor_data_aggr.timestamp_end as timestamp_end," + + " sensor_data_aggr.data as data," + + " sensor_data_aggr.confidence as confidence," + + 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 userPowerData = DBConnection.exec(stmt , new SQLPowerDataBuilder()); + minDataList.addAll(userPowerData); + + stmt = db.getPreparedStatement( + "SELECT user.username as username," + + " sensor_data_aggr.timestamp_start as timestamp_start," + + " sensor_data_aggr.timestamp_end as timestamp_end," + + " sensor_data_aggr.data as data," + + " sensor_data_aggr.confidence as confidence," + + 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) ); + userPowerData = DBConnection.exec(stmt, new SQLPowerDataBuilder()); + hourDataList.addAll(userPowerData); + + stmt = db.getPreparedStatement( + "SELECT user.username as username," + + " sensor_data_aggr.timestamp_start as timestamp_start," + + " sensor_data_aggr.timestamp_end as timestamp_end," + + " sensor_data_aggr.data as data," + + " sensor_data_aggr.confidence as confidence," + + 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); + userPowerData = DBConnection.exec(stmt, new SQLPowerDataBuilder()); + dayDataList.addAll(userPowerData); + } + } Templator tmpl = new Templator(FileUtil.find(TEMPLATE)); diff --git a/src/se/hal/struct/User.java b/src/se/hal/struct/User.java index cb998a58..4be81805 100755 --- a/src/se/hal/struct/User.java +++ b/src/se/hal/struct/User.java @@ -37,7 +37,10 @@ public class User extends DBBean{ return DBBean.load(db, User.class, id); } - + public static List 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;