diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js index b9deeab14f..8a0b02bc76 100644 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/analytics-view.js @@ -20,29 +20,43 @@ function onRequest(context) { var log = new Log("stats.js"); var carbonServer = require("carbon").server; var device = context.unit.params.device; + // graph configuration var graphData = { Sensors:["accelerometer","magnetic", "gravity", "pressure", "proximity", "gyroscope"], Realtime_Data:['battery','light','rotation'] - }; var devicemgtProps = require("/app/modules/conf-reader/main.js")["conf"]; var constants = require("/app/modules/constants.js"); + var userModule = require("/app/modules/business-controllers/user.js")["userModule"]; var websocketEndpoint = devicemgtProps["wssURL"].replace("https", "wss"); var jwtService = carbonServer.osgiService( 'org.wso2.carbon.identity.jwt.client.extension.service.JWTClientManagerService'); var jwtClient = jwtService.getJWTClient(); var encodedClientKeys = session.get(constants["ENCODED_TENANT_BASED_WEB_SOCKET_CLIENT_CREDENTIALS"]); var token = ""; + var tokenPair = null; + var user = userModule.getCarbonUser(); + var tenantDomain = user.domain; if (encodedClientKeys) { var tokenUtil = require("/app/modules/oauth/token-handler-utils.js")["utils"]; var resp = tokenUtil.decode(encodedClientKeys).split(":"); - var tokenPair = jwtClient.getAccessToken(resp[0], resp[1], context.user.username,"default", {}); - if (tokenPair) { - token = tokenPair.accessToken; + if (tenantDomain == "carbon.super") { + tokenPair = jwtClient.getAccessToken(resp[0], resp[1], context.user.username,"default", {}); + if (tokenPair) { + token = tokenPair.accessToken; + } + websocketEndpoint = websocketEndpoint + "/secured-websocket/org.wso2.iot.android.sense/1.0.0?" + + "deviceId=" + device.deviceIdentifier + "&deviceType=" + device.type + "&websocketToken=" + token; + } else { + tokenPair = jwtClient.getAccessToken(resp[0], resp[1], context.user.username + "@" + tenantDomain,"default", {}); + if (tokenPair) { + token = tokenPair.accessToken; + } + websocketEndpoint = websocketEndpoint + "/secured-websocket/t/"+tenantDomain+"/org.wso2.iot.android.sense/1.0.0?" + + "deviceId=" + device.deviceIdentifier + "&deviceType=" + device.type + "&websocketToken=" + token; } - websocketEndpoint = websocketEndpoint + "/secured-websocket/org.wso2.iot.android.sense/1.0.0?" + - "deviceId=" + device.deviceIdentifier + "&deviceType=" + device.type + "&websocketToken=" + token; + } return {"device": device, "websocketEndpoint": websocketEndpoint, "graphData":graphData}; } \ No newline at end of file diff --git a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js index 4b92faf6c8..dc9a16476b 100644 --- a/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js +++ b/components/device-types/androidsense-plugin/org.wso2.carbon.device.mgt.iot.androidsense.ui/src/main/resources/jaggeryapps/devicemgt/app/units/cdmf.unit.device.type.android_sense.realtime.analytics-view/public/js/device-stats.js @@ -158,6 +158,15 @@ function threeDlineGraph(type, xChartData, yChartData, zChartData) { graph: graph }); + new Rickshaw.Graph.HoverDetail({ + graph: graph, + formatter: function (series, x, y) { + var date = '' + moment(x * 1000).format('Do MMM YYYY h:mm:ss a') + ''; + var swatch = ''; + return swatch + series.name + ": " + parseInt(y) + '
' + date; + } + }); + graph.render(); return graph; @@ -234,58 +243,61 @@ function connect(target) { if (ws) { ws.onmessage = function (event) { var dataPoint = JSON.parse(event.data); - if (dataPoint) { var time = parseInt(dataPoint[4]) / 1000; switch (dataPoint[typeId]) { case "battery": - graphUpdate(batteryData, time, dataPoint[batteryId], graphMap["battery"]); + graphUpdate(batteryData, time, dataPoint[batteryId]); + graphMap["battery"].update(); break; case "light": - graphUpdate(lightData, time, dataPoint[lightId], graphMap["light"]); + graphUpdate(lightData, time, dataPoint[lightId]); + graphMap["light"].update(); break; case "pressure": - graphUpdate(pressureData, time, dataPoint[pressureId], graphMap["pressure"]); + graphUpdate(pressureData, time, dataPoint[pressureId]); + graphMap["pressure"].update(); break; case "proximity": - graphUpdate(proximityData, time, dataPoint[proximityId], graphMap["proximity"]); + graphUpdate(proximityData, time, dataPoint[proximityId]); + graphMap["proximity"].update(); break; case "accelerometer": - dataUpdate(accelerometer_xData, time, dataPoint[accelerometer_xId]); - dataUpdate(accelerometer_yData, time, dataPoint[accelerometer_yId]); - dataUpdate(accelerometer_zData, time, dataPoint[accelerometer_zId]); + graphUpdate(accelerometer_xData, time, dataPoint[accelerometer_xId]); + graphUpdate(accelerometer_yData, time, dataPoint[accelerometer_yId]); + graphUpdate(accelerometer_zData, time, dataPoint[accelerometer_zId]); graphMap["accelerometer"].update(); break; case "magnetic": - dataUpdate(magnetic_xData, time, dataPoint[magnetic_xId]); - dataUpdate(magnetic_yData, time, dataPoint[magnetic_yId]); - dataUpdate(magnetic_zData, time, dataPoint[magnetic_zId]); + graphUpdate(magnetic_xData, time, dataPoint[magnetic_xId]); + graphUpdate(magnetic_yData, time, dataPoint[magnetic_yId]); + graphUpdate(magnetic_zData, time, dataPoint[magnetic_zId]); graphMap["magnetic"].update(); break; case "gyroscope": - dataUpdate(gyroscope_xData, time, dataPoint[gyroscope_xId]); - dataUpdate(gyroscope_yData, time, dataPoint[gyroscope_yId]); - dataUpdate(gyroscope_zData, time, dataPoint[gyroscope_zId]); + graphUpdate(gyroscope_xData, time, dataPoint[gyroscope_xId]); + graphUpdate(gyroscope_yData, time, dataPoint[gyroscope_yId]); + graphUpdate(gyroscope_zData, time, dataPoint[gyroscope_zId]); graphMap["gyroscope"].update(); break; case "rotation": - dataUpdate(magnetic_xData, time, dataPoint[rotation_xId]); - dataUpdate(magnetic_yData, time, dataPoint[rotation_yId]); - dataUpdate(magnetic_zData, time, dataPoint[rotation_zId]); + graphUpdate(magnetic_xData, time, dataPoint[rotation_xId]); + graphUpdate(magnetic_yData, time, dataPoint[rotation_yId]); + graphUpdate(magnetic_zData, time, dataPoint[rotation_zId]); graphMap["rotation"].update(); break; case "gravity": - dataUpdate(gravity_xData, time, dataPoint[gravity_xId]); - dataUpdate(gravity_yData, time, dataPoint[gravity_yId]); - dataUpdate(gravity_zData, time, dataPoint[gravity_zId]); + graphUpdate(gravity_xData, time, dataPoint[gravity_xId]); + graphUpdate(gravity_yData, time, dataPoint[gravity_yId]); + graphUpdate(gravity_zData, time, dataPoint[gravity_zId]); graphMap["gravity"].update(); break; } @@ -294,16 +306,7 @@ function connect(target) { } } -function graphUpdate(chartData, xValue, yValue, graph) { - chartData.push({ - x: parseInt(xValue), - y: parseFloat(yValue) - }); - chartData.shift(); - graph.update(); -} - -function dataUpdate(chartData, xValue, yValue) { +function graphUpdate(chartData, xValue, yValue) { chartData.push({ x: parseInt(xValue), y: parseFloat(yValue)