merge-requests/1/head
Rasika Perera 9 years ago
commit 3740712d96

@ -31,118 +31,111 @@ var statsClient = new Packages.org.wso2.carbon.device.mgt.iot.common.analytics.s
if (uriMatcher.match("/{context}/api/stats")) { if (uriMatcher.match("/{context}/api/stats")) {
deviceId = request.getParameter("deviceId"); deviceId = request.getParameter("deviceId");
deviceType = request.getParameter("deviceType"); deviceType = request.getParameter("deviceType");
from = request.getParameter("from"); from = request.getParameter("from");
to = request.getParameter("to"); to = request.getParameter("to");
user = session.get(constants.USER_SESSION_KEY); user = session.get(constants.USER_SESSION_KEY);
if (!user) { if (!user) {
response.sendRedirect(dcProps.appContext + "login?#login-required"); response.sendRedirect(dcProps.appContext + "login?#login-required");
exit(); exit();
} }
log.info("deviceId : " + deviceId + " from : " + from + " to : " + to); log.info("deviceId : " + deviceId + " from : " + from + " to : " + to);
switch (deviceType){ switch (deviceType) {
case "firealarm": case "firealarm":
result = getFireAlarmData(user.username, deviceId, from, to); result = getFireAlarmData(user.username, deviceId, from, to);
break; break;
case "sensebot": case "sensebot":
result = getSensebotData(user.username, deviceId, from, to); result = getSensebotData(user.username, deviceId, from, to);
break; break;
case "arduino": case "arduino":
result = getArduinoData(user.username, deviceId, from, to); result = getArduinoData(user.username, deviceId, from, to);
break; break;
case "digital_display": case "digital_display":
result = getDigitalDisplayData(user.username, deviceId, from, to); result = getDigitalDisplayData(user.username, deviceId, from, to);
break; break;
case "android_sense": case "android_sense":
result = getAndroidSenseData(user.username, deviceId, from, to); result = getAndroidSenseData(user.username, deviceId, from, to);
break; break;
case "raspberrypi": case "raspberrypi":
result = getDigitalDisplayData(user.username, deviceId, from, to); result = getDigitalDisplayData(user.username, deviceId, from, to);
break; break;
default: default:
result = new Object(); result = new Object();
} }
} }
// returning the result. // returning the result.
if (result) { if (result) {
print(result); print(result);
} }
function getFireAlarmData(user, deviceId, from, to){ function getFireAlarmData(user, deviceId, from, to) {
result = new Object(); result = new Object();
result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); result['cpuTemperatureData'] = getSensorData("DEVICE_CPU_TEMPERATURE_SUMMARY", "TEMPERATURE", user, deviceId, from, to);
result['fanData'] = getSensorData("DEVICE_FAN_USAGE_SUMMARY","status",user, deviceId, from, to); result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY", "TEMPERATURE", user, deviceId, from, to);
result['bulbData'] = getSensorData("DEVICE_BULB_USAGE_SUMMARY","status",user, deviceId, from, to); result['fanData'] = getSensorData("DEVICE_FAN_USAGE_SUMMARY", "status", user, deviceId, from, to);
return result; result['bulbData'] = getSensorData("DEVICE_BULB_USAGE_SUMMARY", "status", user, deviceId, from, to);
return result;
} }
function getSensebotData(user, deviceId, from, to){ function getSensebotData(user, deviceId, from, to) {
result = new Object(); result = new Object();
result['sonarData'] = getSensorData("SONAR_SENSOR_SUMMARY","sonar",user, deviceId, from, to); result['sonarData'] = getSensorData("SONAR_SENSOR_SUMMARY", "sonar", user, deviceId, from, to);
result['motionData'] = getSensorData("PIR_MOTION_SENSOR_SUMMARY","motion",user, deviceId, from, to); result['motionData'] = getSensorData("PIR_MOTION_SENSOR_SUMMARY", "motion", user, deviceId, from, to);
result['lightData'] = getSensorData("LDR_LIGHT_SENSOR_SUMMARY","light",user, deviceId, from, to); result['lightData'] = getSensorData("LDR_LIGHT_SENSOR_SUMMARY", "light", user, deviceId, from, to);
result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY", "TEMPERATURE", user, deviceId, from, to);
return result; return result;
} }
function getArduinoData(user, deviceId, from, to){ function getArduinoData(user, deviceId, from, to) {
result = new Object(); result = new Object();
result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY", "TEMPERATURE", user, deviceId, from, to);
return result; return result;
} }
function getDigitalDisplayData(user, deviceId, from, to){ function getAndroidSenseData(user, deviceId, from, to) {
result = new Object(); result = new Object();
result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to); result['ramData'] = getSensorData("RAM_USAGE_SUMMARY", "motion", user, deviceId, from, to);
result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to); result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY", "light", user, deviceId, from, to);
result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY", "TEMPERATURE", user, deviceId, from, to);
return result; result['motionData'] = getSensorData("PIR_MOTION_SENSOR_SUMMARY", "motion", user, deviceId, from, to);
return result;
} }
function getAndroidSenseData(user, deviceId, from, to){ function getDigitalDisplayData(user, deviceId, from, to) {
result = new Object(); result = new Object();
result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to); result['ramData'] = getSensorData("RAM_USAGE_SUMMARY", "motion", user, deviceId, from, to);
result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to); result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY", "light", user, deviceId, from, to);
result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to); result['cpuTemperatureData'] = getSensorData("DEVICE_CPU_TEMPERATURE_SUMMARY", "TEMPERATURE", user, deviceId, from, to);
result['motionData'] = getSensorData("PIR_MOTION_SENSOR_SUMMARY","motion",user, deviceId, from, to); return result;
return result;
}
function getDigitalDisplayData(user, deviceId, from, to){
result = new Object();
result['ramData'] = getSensorData("RAM_USAGE_SUMMARY","motion",user, deviceId, from, to);
result['cpuData'] = getSensorData("CPU_LOAD_SUMMARY","light",user, deviceId, from, to);
result['temperatureData'] = getSensorData("DEVICE_TEMPERATURE_SUMMARY","TEMPERATURE",user, deviceId, from, to);
return result;
} }
function getSensorData(table, column, user, deviceId, from, to) { function getSensorData(table, column, user, deviceId, from, to) {
var fetchedData = null; var fetchedData = null;
try { try {
fetchedData = statsClient.getDeviceStats(table, column, user, deviceId, from, to); fetchedData = statsClient.getDeviceStats(table, column, user, deviceId, from, to);
}catch(error){ } catch (error) {
log.error(error); log.error(error);
} }
var sensorData = []; var sensorData = [];
if(fetchedData==null) return []; if (fetchedData == null) return [];
for (var i = 0; i < fetchedData.size(); i++) { for (var i = 0; i < fetchedData.size(); i++) {
sensorData.push({ sensorData.push({
time: fetchedData.get(i).getTime(), time: fetchedData.get(i).getTime(),
value: fetchedData.get(i).getValue() value: fetchedData.get(i).getValue()
}); });
} }
return sensorData; return sensorData;
} }
%> %>

@ -48,6 +48,8 @@
</div> </div>
<div id="div-bulbData"> <div id="div-bulbData">
</div> </div>
<div id="div-cpuTemperatureData">
</div>
<div id="div-CPUData"> <div id="div-CPUData">
</div> </div>
<div id="div-RAMData"> <div id="div-RAMData">
@ -70,4 +72,5 @@
<script src="{{self.publicURL}}/js/graphs/sonar_graph.js"></script> <script src="{{self.publicURL}}/js/graphs/sonar_graph.js"></script>
<script src="{{self.publicURL}}/js/graphs/cpu_graph.js"></script> <script src="{{self.publicURL}}/js/graphs/cpu_graph.js"></script>
<script src="{{self.publicURL}}/js/graphs/ram_graph.js"></script> <script src="{{self.publicURL}}/js/graphs/ram_graph.js"></script>
<script src="{{self.publicURL}}/js/graphs/cpu_temperature_graph.js"></script>
{{/zone}} {{/zone}}

@ -1,6 +1,10 @@
var fromDate; var fromDate;
var toDate; var toDate;
var currentDay = new Date();
var startDate = new Date(currentDay.getTime() - (60 * 60 * 24 * 100));
var endDate = new Date(currentDay.getTime());
// create a custom bar renderer that has no gaps // create a custom bar renderer that has no gaps
Rickshaw.Graph.Renderer.BarNoGap = Rickshaw.Class.create(Rickshaw.Graph.Renderer.Bar, { Rickshaw.Graph.Renderer.BarNoGap = Rickshaw.Class.create(Rickshaw.Graph.Renderer.Bar, {
name: 'bar_no_gap', name: 'bar_no_gap',
@ -11,10 +15,11 @@ Rickshaw.Graph.Renderer.BarNoGap = Rickshaw.Class.create(Rickshaw.Graph.Renderer
} }
}); });
function initDate(){
var currentDay = new Date(); currentDay = new Date();
var startDate = new Date(currentDay.getTime() - (60 * 60 * 24 * 100)); startDate = new Date(currentDay.getTime() - (60 * 60 * 24 * 100));
var endDate = new Date(currentDay.getTime()); endDate = new Date(currentDay.getTime());
}
var configObject = { var configObject = {
startOfWeek: 'monday', startOfWeek: 'monday',
@ -38,6 +43,7 @@ var configObject = {
var DateRange = convertDate(startDate) + " " + configObject.separator + " " + convertDate(endDate); var DateRange = convertDate(startDate) + " " + configObject.separator + " " + convertDate(endDate);
$(document).ready(function () { $(document).ready(function () {
initDate();
$('#date-range').dateRangePicker(configObject) $('#date-range').dateRangePicker(configObject)
.bind('datepicker-apply', function (event, dateRange) { .bind('datepicker-apply', function (event, dateRange) {
$(this).addClass('active'); $(this).addClass('active');
@ -61,21 +67,25 @@ $(document).ready(function () {
//day picker //day picker
$('#today-btn').on('click', function () { $('#today-btn').on('click', function () {
initDate();
getDateTime(currentDay.getTime() - 86400000, currentDay.getTime()); getDateTime(currentDay.getTime() - 86400000, currentDay.getTime());
}); });
//hour picker //hour picker
$('#hour-btn').on('click', function () { $('#hour-btn').on('click', function () {
initDate();
getDateTime(currentDay.getTime() - 3600000, currentDay.getTime()); getDateTime(currentDay.getTime() - 3600000, currentDay.getTime());
}) });
//week picker //week picker
$('#week-btn').on('click', function () { $('#week-btn').on('click', function () {
initDate();
getDateTime(currentDay.getTime() - 604800000, currentDay.getTime()); getDateTime(currentDay.getTime() - 604800000, currentDay.getTime());
}) });
//month picker //month picker
$('#month-btn').on('click', function () { $('#month-btn').on('click', function () {
initDate();
getDateTime(currentDay.getTime() - (604800000 * 4), currentDay.getTime()); getDateTime(currentDay.getTime() - (604800000 * 4), currentDay.getTime());
}); });
@ -148,69 +158,77 @@ function updateGraphs(stats) {
console.log(stats); console.log(stats);
var temperatureData = stats['temperatureData']; var temperatureData = stats['temperatureData'];
if (typeof temperatureData != 'undefined'){ if (typeof temperatureData != 'undefined') {
$('#div-temperatureData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Temperature</h2><hr><div id='canvas-wrapper1'></div></div><hr></div>"); $('#div-temperatureData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Temperature</h2><hr><div id='canvas-wrapper1'></div></div><hr></div>");
updateTemperatureGraph(convertStatsToGraphData(temperatureData)); updateTemperatureGraph(convertStatsToGraphData(temperatureData));
}else{ } else {
$('#div-temperatureData').html(""); $('#div-temperatureData').html("");
} }
var lightData = stats['lightData']; var lightData = stats['lightData'];
if (typeof lightData != 'undefined'){ if (typeof lightData != 'undefined') {
$('#div-lightData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Light</h2><hr><div id='canvas-wrapper2'></div></div><hr></div>"); $('#div-lightData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Light</h2><hr><div id='canvas-wrapper2'></div></div><hr></div>");
updateLightGraph(convertStatsToGraphData(lightData)); updateLightGraph(convertStatsToGraphData(lightData));
}else{ } else {
$('#div-lightData').html(""); $('#div-lightData').html("");
} }
var motionData = stats['motionData']; var motionData = stats['motionData'];
if (typeof motionData != 'undefined'){ if (typeof motionData != 'undefined') {
$('#div-motionData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Motion</h2><hr><div id='canvas-wrapper3'></div></div><hr></div>"); $('#div-motionData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Motion</h2><hr><div id='canvas-wrapper3'></div></div><hr></div>");
updateMotionGraph(convertStatsToGraphData(motionData)); updateMotionGraph(convertStatsToGraphData(motionData));
}else{ } else {
$('#div-motionData').html(""); $('#div-motionData').html("");
} }
var sonarData = stats['sonarData']; var sonarData = stats['sonarData'];
if (typeof sonarData != 'undefined'){ if (typeof sonarData != 'undefined') {
$('#div-sonarData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Sonar</h2><hr><div id='canvas-wrapper4'></div></div><hr></div>"); $('#div-sonarData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Sonar</h2><hr><div id='canvas-wrapper4'></div></div><hr></div>");
updateSonarGraph(convertStatsToGraphData(sonarData)); updateSonarGraph(convertStatsToGraphData(sonarData));
}else{ } else {
$('#div-sonarData').html(""); $('#div-sonarData').html("");
} }
var fanData = stats['fanData']; var fanData = stats['fanData'];
if (typeof fanData != 'undefined'){ if (typeof fanData != 'undefined') {
$('#div-fanData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Fan Status</h2><hr><div id='canvas-wrapper5'></div></div><hr></div>"); $('#div-fanData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Fan Status</h2><hr><div id='canvas-wrapper5'></div></div><hr></div>");
updateFanGraph(convertStateStatsToGraphData(fanData)); updateFanGraph(convertStateStatsToGraphData(fanData));
}else{ } else {
$('#div-fanData').html(""); $('#div-fanData').html("");
} }
var bulbData = stats['bulbData']; var bulbData = stats['bulbData'];
if (typeof bulbData != 'undefined'){ if (typeof bulbData != 'undefined') {
$('#div-bulbData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Bulb Status</h2><hr><div id='canvas-wrapper6'></div></div><hr></div>"); $('#div-bulbData').html("").html("<div class='row margin-double'><div><h2 class='grey'>Bulb Status</h2><hr><div id='canvas-wrapper6'></div></div><hr></div>");
updateBulbGraph(convertStateStatsToGraphData(bulbData)); updateBulbGraph(convertStateStatsToGraphData(bulbData));
}else{ } else {
$('#div-bulbData').html(""); $('#div-bulbData').html("");
} }
var cpuData = stats['cpuData']; var cpuData = stats['cpuData'];
if (typeof cpuData != 'undefined'){ if (typeof cpuData != 'undefined') {
$('#div-CPUData').html("").html("<div class='row margin-double'><div><h2 class='grey'>CPU Load</h2><hr><div id='canvas-wrapper7'></div></div><hr></div>"); $('#div-CPUData').html("").html("<div class='row margin-double'><div><h2 class='grey'>CPU Load</h2><hr><div id='canvas-wrapper7'></div></div><hr></div>");
updateCPUGraph(convertStateStatsToGraphData(cpuData)); updateCPUGraph(convertStateStatsToGraphData(cpuData));
}else{ } else {
$('#div-CPUData').html(""); $('#div-CPUData').html("");
} }
var ramData = stats['ramData']; var ramData = stats['ramData'];
if (typeof ramData != 'undefined'){ if (typeof ramData != 'undefined') {
$('#div-RAMData').html("").html("<div class='row margin-double'><div><h2 class='grey'>RAM Usage</h2><hr><div id='canvas-wrapper8'></div></div><hr></div>"); $('#div-RAMData').html("").html("<div class='row margin-double'><div><h2 class='grey'>RAM Usage</h2><hr><div id='canvas-wrapper8'></div></div><hr></div>");
updateRAMGraph(convertStateStatsToGraphData(ramData)); updateRAMGraph(convertStateStatsToGraphData(ramData));
}else{ } else {
$('#div-RAMData').html(""); $('#div-RAMData').html("");
} }
var cpuTemperatureData = stats['cpuTemperatureData'];
if (typeof cpuTemperatureData != 'undefined') {
$('#div-cpuTemperatureData').html("").html("<div class='row margin-double'><div><h2 class='grey'>CPU Temperature</h2><hr><div id='canvas-wrapper9'></div></div><hr></div>");
updateCPUTemperatureGraph(convertStatsToGraphData(cpuTemperatureData));
} else {
$('#div-cpuTemperatureData').html("");
}
scaleGraphs(); scaleGraphs();
} }
@ -219,8 +237,18 @@ function scaleGraphs() {
if (sliders.length == 0) { if (sliders.length == 0) {
return; return;
} }
var graphWidth = 0;
for (var i = 1; i < 10; i++){
if ($('#canvas-wrapper' + i).length){
graphWidth = $('#canvas-wrapper' + i).width() - 50;
break;
}
}
if (graphWidth <= 0){
return;
}
var graphWidth = $('#canvas-wrapper1').width() - 50;
//Scale graphs //Scale graphs
var sliderX = graphWidth * 60 * 60 / (toDate - fromDate); var sliderX = graphWidth * 60 * 60 / (toDate - fromDate);
if (sliderX < graphWidth) { if (sliderX < graphWidth) {
@ -283,9 +311,9 @@ function convertStateStatsToGraphData(stats) {
function convertDate(date) { function convertDate(date) {
var month = date.getMonth() + 1; var month = date.getMonth() + 1;
var day = date.getDate(); var day = date.getDate();
var hour=date.getHours(); var hour = date.getHours();
var minute=date.getMinutes(); var minute = date.getMinutes();
return date.getFullYear() + '-' + (('' + month).length < 2 ? '0' : '') return date.getFullYear() + '-' + (('' + month).length < 2 ? '0' : '')
+ month + '-' + (('' + day).length < 2 ? '0' : '') + day +" "+ (('' + hour).length < 2 ? '0' : '') + month + '-' + (('' + day).length < 2 ? '0' : '') + day + " " + (('' + hour).length < 2 ? '0' : '')
+ hour +":"+(('' + minute).length < 2 ? '0' : '')+ minute; + hour + ":" + (('' + minute).length < 2 ? '0' : '') + minute;
} }

@ -0,0 +1,70 @@
function updateCPUTemperatureGraph(temperatureData) {
console.log("cpuTemperatureData");
renderCPUTemperatureChart(temperatureData);
}
function renderCPUTemperatureChart(chartDataRaw) {
var chartWrapperElmId = "#canvas-wrapper9";
var graphWidth = $(chartWrapperElmId).width() - 50;
if (chartDataRaw.length == 0) {
$(chartWrapperElmId).html("No data available...");
return;
}
var chartData = [];
for (var i = 0; i < chartDataRaw.length; i++) {
chartData.push({x: parseInt(chartDataRaw[i].x), y: parseInt(chartDataRaw[i].y)});
}
//var i = parseInt(fromDate);
//while (i < parseInt(toDate)){
// var rnd = Math.random() * (30 - 20) + 20;
// chartData.push({x:i * 1000, y:rnd});
// i += 60 * 5;
//}
var chartDiv = "chart9";
var sliderDiv = "slider9";
var x_axis = "x_axis9";
var y_axis = "y_axis9";
$(chartWrapperElmId).html("").html('<div id="' + y_axis + '" class="custom_y_axis"></div><div id="' + chartDiv + '" class="custom_rickshaw_graph"></div><div id="' + x_axis + '" class="custom_x_axis"></div><div id="' + sliderDiv + '" class="custom_slider"></div>');
var graph = new Rickshaw.Graph({
element: document.getElementById(chartDiv),
width: graphWidth,
height: 400,
strokeWidth: 1,
renderer: 'line',
xScale: d3.time.scale(),
padding: {top: 0.2, left: 0.02, right: 0.02, bottom: 0},
series: [
{color: '#FF4000', data: chartData}
]
});
graph.render();
var xAxis = new Rickshaw.Graph.Axis.X({
graph: graph,
orientation: 'bottom',
element: document.getElementById(x_axis),
tickFormat: graph.x.tickFormat()
});
xAxis.render();
var yAxis = new Rickshaw.Graph.Axis.Y({
graph: graph,
orientation: 'left',
element: document.getElementById(y_axis),
width: 40,
height: 410
});
yAxis.render();
var slider = new Rickshaw.Graph.RangeSlider.Preview({
graph: graph,
element: document.getElementById(sliderDiv)
});
}
Loading…
Cancel
Save