Merge branch 'release-3.0.x' of https://github.com/wso2/carbon-device-mgt-plugins into release-3.0.x
@ -0,0 +1,72 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
-->
|
||||||
|
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
|
||||||
|
|
||||||
|
<parent>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||||
|
<artifactId>iot-analytics</artifactId>
|
||||||
|
<version>3.0.3-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>org.wso2.carbon.iot.das.rest.api</artifactId>
|
||||||
|
<name>WSO2 Carbon - IoT Server REST API</name>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-scr-plugin</artifactId>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>generate-scr-descriptor</id>
|
||||||
|
<goals>
|
||||||
|
<goal>scr</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.maven.plugins</groupId>
|
||||||
|
<artifactId>maven-surefire-plugin</artifactId>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.apache.felix</groupId>
|
||||||
|
<artifactId>maven-bundle-plugin</artifactId>
|
||||||
|
<extensions>true</extensions>
|
||||||
|
<configuration>
|
||||||
|
<instructions>
|
||||||
|
<Bundle-SymbolicName>${project.artifactId}</Bundle-SymbolicName>
|
||||||
|
<Bundle-Name>${project.artifactId}</Bundle-Name>
|
||||||
|
<Private-Package>
|
||||||
|
</Private-Package>
|
||||||
|
<Export-Package>
|
||||||
|
</Export-Package>
|
||||||
|
<Import-Package>
|
||||||
|
</Import-Package>
|
||||||
|
<DynamicImport-Package>*</DynamicImport-Package>
|
||||||
|
</instructions>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
||||||
@ -0,0 +1,69 @@
|
|||||||
|
<!--~ Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.-->
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head lang="en">
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title></title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="viewWithinAlert" >
|
||||||
|
<form role="form" style="width: auto">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="text-info">Query name</label>
|
||||||
|
<div id="viewQueryName" class="well well-sm"></div>
|
||||||
|
|
||||||
|
<label class="text-info">Area name</label>
|
||||||
|
<div id="viewAreaName" class="well well-sm"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="btn-group btn-group-sm btn-group-justified">
|
||||||
|
<div class="btn-group">
|
||||||
|
<a id="exportGeoJson" download="geoJson.json" href="#" onclick="exportToGeoJSON(this,JSON.stringify(map._layers[$(this).attr('leaflet_id')].toGeoJSON(),null, '\t'))" class="btn btn-default btn-xs" data-toggle="tooltip" data-placement="left" title="Export selected area as a geoJson file">Export</a>
|
||||||
|
</div>
|
||||||
|
<div class="btn-group">
|
||||||
|
<a id="hideViewFence" class="btn btn-default btn-xs" data-toggle="tooltip" data-placement="left" title="Hide this fence" onclick="map.removeLayer(map._layers[$(this).attr('leaflet_id')])" >Hide</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
<div id="viewStationeryAlert" >
|
||||||
|
<form role="form" style="width: auto">
|
||||||
|
<div class="form-group">
|
||||||
|
<label class="text-info">Query name</label>
|
||||||
|
<div id="viewQueryName" class="well well-sm"></div>
|
||||||
|
|
||||||
|
<label class="text-info">Stationery name</label>
|
||||||
|
<div id="viewAreaName" class="well well-sm"></div>
|
||||||
|
|
||||||
|
<label class="text-info">Stationery time(Seconds)</label>
|
||||||
|
<div id="viewAreaTime" class="well well-sm"></div>
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<div class="btn-group btn-group-sm btn-group-justified">
|
||||||
|
<div class="btn-group">
|
||||||
|
<a id="exportGeoJson" download="geoJson.json" href="#" onclick="exportToGeoJSON(this,JSON.stringify(map._layers[$(this).attr('leaflet_id')].toGeoJSON(),null, '\t'))" class="btn btn-default btn-xs" data-toggle="tooltip" data-placement="left" title="Export selected area as a geoJson file">Export</a>
|
||||||
|
</div>
|
||||||
|
<div class="btn-group">
|
||||||
|
<a id="hideViewFence" class="btn btn-default btn-xs" data-toggle="tooltip" data-placement="left" title="Hide this fence" onclick="map.removeLayer(map._layers[$(this).attr('leaflet_id')])" >Hide</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@ -1 +0,0 @@
|
|||||||
{"username" : "admin", "password" : "admin"}
|
|
||||||
@ -1 +0,0 @@
|
|||||||
{"username" : "wso2carbon", "password" : "wso2carbon"}
|
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
<%
|
||||||
|
/*
|
||||||
|
~ Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
~
|
||||||
|
~ WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
~ Version 2.0 (the "License"); you may not use this file except
|
||||||
|
~ in compliance with the License.
|
||||||
|
~ You may obtain a copy of the License at
|
||||||
|
~
|
||||||
|
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
~
|
||||||
|
~ Unless required by applicable law or agreed to in writing,
|
||||||
|
~ software distributed under the License is distributed on an
|
||||||
|
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
~ KIND, either express or implied. See the License for the
|
||||||
|
~ specific language governing permissions and limitations
|
||||||
|
~ under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
var DATA_SOURCE_NAME = "WSO2_GEO_DB";
|
||||||
|
var EXECUTION_PLAN_TYPE_SPEED = "Speed";
|
||||||
|
var EXECUTION_PLAN_TYPE_WITHIN = "Within";
|
||||||
|
var EXECUTION_PLAN_TYPE_PROXIMITY = "Proximity";
|
||||||
|
var EXECUTION_PLAN_TYPE_STATIONARY = "Stationery";
|
||||||
|
var EXECUTION_PLAN_TYPE_TRAFFIC = "Traffic";
|
||||||
|
var REGISTRY_PATH_FOR_ALERTS = "/_system/governance/geo/alerts/";
|
||||||
|
var GET_METHOD = "get";
|
||||||
|
var QUERY_NAME = "queryName";
|
||||||
|
var AREA_NAME = "areaName";
|
||||||
|
var CREATED_TIME = "createdTime";
|
||||||
|
var GEO_JSON = "geoJson";
|
||||||
|
var PROXIMITY_DISTANCE = "proximityDistance";
|
||||||
|
var PROXIMITY_TIME = "proximityTime";
|
||||||
|
var STATIONARY_NAME = "stationeryName";
|
||||||
|
var STATIONARY_TIME = "stationeryTime";
|
||||||
|
var FLUCTUATION_RADIUS = "fluctuationRadius";
|
||||||
|
%>
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
<%
|
||||||
|
/**
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
response.contentType = 'application/json';
|
||||||
|
var action = request.getParameter("action");
|
||||||
|
var id = request.getParameter("id");
|
||||||
|
var type = request.getParameter("type");
|
||||||
|
var timeFrom = request.getParameter("timeFrom");
|
||||||
|
var timeTo = request.getParameter("timeTo");
|
||||||
|
|
||||||
|
var providerAPI = require('js/batch-provider-api.js');
|
||||||
|
if (action === 'getSchema') {
|
||||||
|
print(providerAPI.getSchema());
|
||||||
|
return;
|
||||||
|
} else if(action === 'getData'){
|
||||||
|
print(providerAPI.getData(id, type, timeFrom, timeTo));
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}());
|
||||||
|
|
||||||
|
|
||||||
|
%>
|
||||||
@ -17,104 +17,138 @@
|
|||||||
~ under the License.
|
~ under the License.
|
||||||
*/
|
*/
|
||||||
var log = new Log();
|
var log = new Log();
|
||||||
var dataStore = require('../include/commons.jag').dataStore;
|
var method = request.getMethod();
|
||||||
var verb = request.getMethod();
|
|
||||||
var resourceName = request.getParameter('name');
|
var resourceName = request.getParameter('name');
|
||||||
var webService = request.getParameter('service');
|
var webService = request.getParameter('service');
|
||||||
|
|
||||||
|
|
||||||
if(webService) {
|
if(webService) {
|
||||||
response.contentType = 'application/json';
|
response.contentType = 'application/json';
|
||||||
response.characterEncoding = 'UTF-8';
|
response.characterEncoding = 'UTF-8';
|
||||||
response.content = { resource : get(resourceName) };
|
response.content = { resource : get(resourceName) };
|
||||||
}
|
}
|
||||||
|
|
||||||
function get(name){
|
function getRegistry () {
|
||||||
if(name == 'within'){
|
var carbon = require("carbon");
|
||||||
try{
|
var server = new carbon.server.Server();
|
||||||
var res = dataStore.get("geo/alerts/within/");
|
return new carbon.registry.Registry(server, {
|
||||||
}
|
system: true
|
||||||
catch(e){
|
});
|
||||||
log.info(e.message);
|
}
|
||||||
|
|
||||||
|
if (method === "GET") {
|
||||||
|
var constants = require("constants.jag");
|
||||||
|
var executionPlanType = request.getParameter("executionPlanType");
|
||||||
|
var deviceId = request.getParameter("deviceId");
|
||||||
|
response.content = get(executionPlanType, deviceId);
|
||||||
|
response.contentType = "application/json";
|
||||||
|
}
|
||||||
|
|
||||||
|
function get(executionPlanType, deviceId){
|
||||||
|
var resource = null;
|
||||||
|
var fence = {};
|
||||||
|
var registry = getRegistry();
|
||||||
|
if(executionPlanType == constants.EXECUTION_PLAN_TYPE_WITHIN){
|
||||||
|
try {
|
||||||
|
resource = registry.get(constants.REGISTRY_PATH_FOR_ALERTS + constants.EXECUTION_PLAN_TYPE_WITHIN +
|
||||||
|
"/" + deviceId + "/");
|
||||||
|
} catch(e){
|
||||||
|
log.error(e.message);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var allFences = [];
|
var allFences = [];
|
||||||
for each (var resource in res.getChildren()) {
|
if (resource) {
|
||||||
var fence = {};
|
for each(var res in resource.content) {
|
||||||
try{
|
var childResource = registry.get(res);
|
||||||
fence['geoJson'] = JSON.parse(dataStore.get(resource).content.replace(/'/g, '"'));
|
var properties = registry.properties(res);
|
||||||
fence['queryName'] = dataStore.get(resource).getProperty('queryName');
|
fence = {};
|
||||||
fence['areaName'] = dataStore.get(resource).getProperty('areaName');
|
try {
|
||||||
fence['createdTime'] = dataStore.get(resource).createdTime.toString();
|
fence[constants.GEO_JSON] = JSON.parse(childResource.content);
|
||||||
allFences.push(fence);
|
fence[constants.QUERY_NAME] = properties[constants.QUERY_NAME][0];
|
||||||
}
|
fence[constants.AREA_NAME] = properties[constants.AREA_NAME][0];
|
||||||
catch(e){
|
fence[constants.CREATED_TIME] = childResource.created.time.toString();
|
||||||
log.info("Error: "+e+'\n');
|
allFences.push(fence);
|
||||||
|
}
|
||||||
|
catch (e) {
|
||||||
|
log.error("Error: " + e + '\n');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return allFences;
|
return allFences;
|
||||||
} else if(name == 'speed'){
|
} else if(executionPlanType == constants.EXECUTION_PLAN_TYPE_SPEED){
|
||||||
var resource;
|
|
||||||
try{
|
try{
|
||||||
resource = dataStore.get(name+'.json');
|
resource = registry.get(constants.REGISTRY_PATH_FOR_ALERTS + constants
|
||||||
}catch(e){
|
.EXECUTION_PLAN_TYPE_SPEED + "/" + deviceId );
|
||||||
|
} catch(e){
|
||||||
resource = {'content': false};
|
resource = {'content': false};
|
||||||
}
|
}
|
||||||
log.info("DEBUG:***** name = "+name);
|
if (log.isDebugEnabled()) {
|
||||||
log.info("DEBUG:***** resource.content = "+resource.content);
|
log.info("DEBUG:***** name = " + executionPlanType);
|
||||||
|
log.info("DEBUG:***** resource.content = " + resource.content);
|
||||||
|
}
|
||||||
return JSON.parse(resource.content);
|
return JSON.parse(resource.content);
|
||||||
} else if(name == 'proximity'){
|
} else if(executionPlanType == constants.EXECUTION_PLAN_TYPE_PROXIMITY){
|
||||||
|
|
||||||
var result;
|
var result;
|
||||||
try{
|
try{
|
||||||
var resource = dataStore.get("/geo/alerts/proximity/proximity.json");
|
resource = registry.properties(constants.REGISTRY_PATH_FOR_ALERTS + constants.EXECUTION_PLAN_TYPE_PROXIMITY +
|
||||||
result={proximityDistance: resource.getProperty("proximityDistance"), proximityTime: resource.getProperty("proximityTime")};
|
"/" + deviceId);
|
||||||
|
result = {
|
||||||
|
proximityDistance: resource[constants.PROXIMITY_DISTANCE],
|
||||||
|
proximityTime: resource[constants.PROXIMITY_TIME]
|
||||||
|
};
|
||||||
}catch(e){
|
}catch(e){
|
||||||
result = {'content': false};
|
result = {'content': false};
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
} else if(name == 'stationery'){
|
} else if(executionPlanType == constants.EXECUTION_PLAN_TYPE_STATIONARY){
|
||||||
var res;
|
|
||||||
try{
|
try{
|
||||||
res = dataStore.get("geo/alerts/stationery/");
|
resource = registry.get(constants.REGISTRY_PATH_FOR_ALERTS + constants.EXECUTION_PLAN_TYPE_STATIONARY +
|
||||||
|
"/" + deviceId);
|
||||||
}
|
}
|
||||||
catch(e){
|
catch(e){
|
||||||
log.info(e.message);
|
log.info(e.message);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var allFences = [];
|
var allFences = [];
|
||||||
for each (var resource in res.getChildren()) {
|
|
||||||
var fence = {};
|
if (resource) {
|
||||||
try{
|
for each(var res in resource.content) {
|
||||||
fence['geoJson'] = JSON.parse(dataStore.get(resource).content.replace(/'/g, '"'));
|
var fence = {};
|
||||||
fence['queryName'] = dataStore.get(resource).getProperty('queryName');
|
var childResource = registry.get(res);
|
||||||
fence['areaName'] = dataStore.get(resource).getProperty('stationeryName');
|
var properties = registry.properties(res);
|
||||||
fence['stationeryTime'] = dataStore.get(resource).getProperty('stationeryTime');
|
try {
|
||||||
fence['fluctuationRadius'] = dataStore.get(resource).getProperty('fluctuationRadius');
|
fence[constants.GEO_JSON] = JSON.parse(childResource.content);
|
||||||
fence['createdTime'] = dataStore.get(resource).createdTime.toString();
|
fence[constants.QUERY_NAME] = properties[constants.QUERY_NAME][0];
|
||||||
allFences.push(fence);
|
fence[constants.AREA_NAME] = properties[constants.STATIONARY_NAME][0];
|
||||||
}
|
fence[constants.STATIONARY_TIME] = properties[constants.STATIONARY_TIME][0];
|
||||||
catch(e){
|
fence[constants.FLUCTUATION_RADIUS] = properties[constants.FLUCTUATION_RADIUS][0];
|
||||||
log.info("Error: "+e+'\n');
|
fence[constants.CREATED_TIME] = childResource.created.time.toString();
|
||||||
|
allFences.push(fence);
|
||||||
|
} catch (e) {
|
||||||
|
log.error("Error: " + e + '\n');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return allFences;
|
return allFences;
|
||||||
} else if( name == 'traffic'){
|
} else if( executionPlanType == constants.EXECUTION_PLAN_TYPE_TRAFFIC){
|
||||||
try{
|
try{
|
||||||
var res = dataStore.get("geo/alerts/traffic/");
|
resource = registry.get(constants.REGISTRY_PATH_FOR_ALERTS + constants.EXECUTION_PLAN_TYPE_TRAFFIC +
|
||||||
|
"/" + deviceId + "/");
|
||||||
}
|
}
|
||||||
catch(e){
|
catch(e){
|
||||||
log.info(e.message);
|
log.info(e.message);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
var allFences = [];
|
var allFences = [];
|
||||||
for each (var resource in res.getChildren()) {
|
for each (var res in resource.content) {
|
||||||
var fence = {};
|
var fence = {};
|
||||||
|
var childResource = registry.get(res);
|
||||||
|
var properties = registry.properties(res);
|
||||||
try{
|
try{
|
||||||
fence['geoJson'] = JSON.parse(dataStore.get(resource).content.replace(/'/g, '"'));
|
fence[constants.GEO_JSON] = JSON.parse(childResource.content);
|
||||||
fence['queryName'] = dataStore.get(resource).getProperty('queryName');
|
fence[constants.QUERY_NAME] = properties[constants.QUERY_NAME][0];
|
||||||
fence['areaName'] = dataStore.get(resource).getProperty('areaName');
|
fence[constants.AREA_NAME] = properties[constants.AREA_NAME][0];
|
||||||
fence['createdTime'] = dataStore.get(resource).createdTime.toString();
|
fence[constants.CREATED.TIME] = childResource.created.time.toString();
|
||||||
allFences.push(fence);
|
allFences.push(fence);
|
||||||
}
|
}
|
||||||
catch(e){
|
catch(e){
|
||||||
@ -123,7 +157,6 @@ function get(name){
|
|||||||
}
|
}
|
||||||
return allFences;
|
return allFences;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
%>
|
%>
|
||||||
|
|||||||
@ -17,14 +17,11 @@
|
|||||||
~ under the License.
|
~ under the License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var db = require("../include/database.jag");
|
var constants = require("constants.jag");
|
||||||
var configuration = require('../conf/database.json');
|
var db = new Database(constants.DATA_SOURCE_NAME);
|
||||||
var log = new Log();
|
var log = new Log();
|
||||||
|
|
||||||
var db = new Database("jdbc:h2:repository/database/WSO2_GEO",configuration.username,configuration.password);
|
|
||||||
var objectId = request.getParameter("objectId");
|
var objectId = request.getParameter("objectId");
|
||||||
|
var getHistory = "SELECT * FROM alerts_history WHERE id = \'" + objectId + "\' ORDER BY timeStamp DESC LIMIT 50";
|
||||||
var getHistory = "SELECT * FROM alerts_history WHERE id = \'"+objectId+"\' ORDER BY timeStamp DESC LIMIT 50";
|
|
||||||
|
|
||||||
try{
|
try{
|
||||||
var history = db.query(getHistory);
|
var history = db.query(getHistory);
|
||||||
@ -38,5 +35,4 @@ catch(e){
|
|||||||
finally{
|
finally{
|
||||||
db.close();
|
db.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
%>
|
%>
|
||||||
|
|||||||
@ -0,0 +1,150 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
var getConfig, validate, getMode, getSchema, getData, registerCallBackforPush;
|
||||||
|
|
||||||
|
(function () {
|
||||||
|
|
||||||
|
var PROVIDERS_LOCATION = '/extensions/providers/';
|
||||||
|
|
||||||
|
var PROVIDER_NAME = 'batch';
|
||||||
|
var TYPE = "type";
|
||||||
|
var TABLE_NAME = "tableName";
|
||||||
|
var HTTPS_TRANSPORT = "https";
|
||||||
|
var CONTENT_TYPE_JSON = "application/json";
|
||||||
|
var AUTHORIZATION_HEADER = "Authorization";
|
||||||
|
var USER_TOKEN = "user";
|
||||||
|
var TENANT_DOMAIN = "domain";
|
||||||
|
var CONST_AT = "@";
|
||||||
|
var USERNAME = "username";
|
||||||
|
var HTTP_USER_NOT_AUTHENTICATED = 403;
|
||||||
|
var JS_MAX_VALUE = "9007199254740992";
|
||||||
|
var JS_MIN_VALUE = "-9007199254740992";
|
||||||
|
|
||||||
|
var tableName = "ORG_WSO2_GEO_FUSEDSPATIALEVENT";
|
||||||
|
|
||||||
|
var typeMap = {
|
||||||
|
"bool": "string",
|
||||||
|
"boolean": "string",
|
||||||
|
"string": "string",
|
||||||
|
"int": "number",
|
||||||
|
"integer": "number",
|
||||||
|
"long": "number",
|
||||||
|
"double": "number",
|
||||||
|
"float": "number",
|
||||||
|
"time": "time"
|
||||||
|
};
|
||||||
|
|
||||||
|
var log = new Log();
|
||||||
|
var carbon = require('carbon');
|
||||||
|
var configs = require('/configs/designer.json');
|
||||||
|
var utils = require('/modules/utils.js');
|
||||||
|
var JSUtils = Packages.org.wso2.carbon.analytics.jsservice.Utils;
|
||||||
|
var AnalyticsCachedJSServiceConnector = Packages.org.wso2.carbon.analytics.jsservice.AnalyticsCachedJSServiceConnector;
|
||||||
|
var AnalyticsCache = Packages.org.wso2.carbon.analytics.jsservice.AnalyticsCachedJSServiceConnector.AnalyticsCache;
|
||||||
|
var cacheTimeoutSeconds = 5;
|
||||||
|
var loggedInUser = null;
|
||||||
|
|
||||||
|
if (configs.cacheTimeoutSeconds) {
|
||||||
|
cacheTimeoutSeconds = parseInt(configs.cacheTimeoutSeconds);
|
||||||
|
}
|
||||||
|
var cacheSizeBytes = 1024 * 1024 * 1024; // 1GB
|
||||||
|
if (configs.cacheSizeBytes) {
|
||||||
|
cacheSizeBytes = parseInt(configs.cacheSizeBytes);
|
||||||
|
}
|
||||||
|
response.contentType = CONTENT_TYPE_JSON;
|
||||||
|
|
||||||
|
var authParam = request.getHeader(AUTHORIZATION_HEADER);
|
||||||
|
if (authParam != null) {
|
||||||
|
credentials = JSUtils.authenticate(authParam);
|
||||||
|
loggedInUser = credentials[0];
|
||||||
|
} else {
|
||||||
|
var token = session.get(USER_TOKEN);
|
||||||
|
if (token != null) {
|
||||||
|
loggedInUser = token[USERNAME] + CONST_AT + token[TENANT_DOMAIN];
|
||||||
|
} else {
|
||||||
|
log.error("user is not authenticated!");
|
||||||
|
response.status = HTTP_USER_NOT_AUTHENTICATED;
|
||||||
|
print('{ "status": "Failed", "message": "User is not authenticated." }');
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var cache = application.get("AnalyticsWebServiceCache");
|
||||||
|
if (cache == null) {
|
||||||
|
cache = new AnalyticsCache(cacheTimeoutSeconds, cacheSizeBytes);
|
||||||
|
application.put("AnalyticsWebServiceCache", cache);
|
||||||
|
}
|
||||||
|
var connector = new AnalyticsCachedJSServiceConnector(cache);
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns an array of column names & types
|
||||||
|
* @param providerConfig
|
||||||
|
*/
|
||||||
|
getSchema = function () {
|
||||||
|
var schema = [];
|
||||||
|
var result = connector.getTableSchema(loggedInUser, tableName).getMessage();
|
||||||
|
result = JSON.parse(result);
|
||||||
|
|
||||||
|
var columns = result.columns;
|
||||||
|
Object.getOwnPropertyNames(columns).forEach(function (name, idx, array) {
|
||||||
|
var type = "ordinal";
|
||||||
|
if (columns[name]['type']) {
|
||||||
|
type = columns[name]['type'];
|
||||||
|
}
|
||||||
|
schema.push({
|
||||||
|
fieldName: name,
|
||||||
|
fieldType: typeMap[type.toLowerCase()]
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// log.info(schema);
|
||||||
|
return schema;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns the actual data
|
||||||
|
* @param providerConfig
|
||||||
|
* @param limit
|
||||||
|
*/
|
||||||
|
getData = function (deviceId, deviceType, fromTime, toTime) {
|
||||||
|
var luceneQuery = "timeStamp:[" + fromTime + " TO " + toTime + "]";
|
||||||
|
var limit = 100;
|
||||||
|
var result;
|
||||||
|
//if there's a filter present, we should perform a Lucene search instead of reading the table
|
||||||
|
if (luceneQuery) {
|
||||||
|
luceneQuery = 'id:"' + deviceId + '" AND type:"' + deviceType + '" AND ' + luceneQuery;
|
||||||
|
var filter = {
|
||||||
|
"query": luceneQuery,
|
||||||
|
"start": 0,
|
||||||
|
"count": limit
|
||||||
|
};
|
||||||
|
result = connector.search(loggedInUser, tableName, stringify(filter)).getMessage();
|
||||||
|
} else {
|
||||||
|
var from = JS_MIN_VALUE;
|
||||||
|
var to = JS_MAX_VALUE;
|
||||||
|
result = connector.getRecordsByRange(loggedInUser, tableName, from, to, 0, limit, null).getMessage();
|
||||||
|
|
||||||
|
}
|
||||||
|
result = JSON.parse(result);
|
||||||
|
var data = [];
|
||||||
|
for (var i = 0; i < result.length; i++) {
|
||||||
|
var values = result[i].values;
|
||||||
|
data.push(values);
|
||||||
|
}
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
|
}());
|
||||||
@ -48,9 +48,6 @@
|
|||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<%
|
|
||||||
var get = require('../get_alerts.jag').get;
|
|
||||||
%>
|
|
||||||
<body>
|
<body>
|
||||||
<div class="modal-header"
|
<div class="modal-header"
|
||||||
style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
||||||
@ -67,12 +64,12 @@ var get = require('../get_alerts.jag').get;
|
|||||||
<div class="col-md-10 col-md-offset-1">
|
<div class="col-md-10 col-md-offset-1">
|
||||||
<form class="form-inline" role="form">
|
<form class="form-inline" role="form">
|
||||||
<div class="input-group input-group-sm">
|
<div class="input-group input-group-sm">
|
||||||
<input type="text" id="proximityDistance" class="form-control" placeholder="Distance" value="<%= get('proximity').proximityDistance %>">
|
<input type="text" id="proximityDistance" class="form-control" placeholder="Distance" >
|
||||||
<span class="input-group-addon">m</span>
|
<span class="input-group-addon">m</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="input-group input-group-sm">
|
<div class="input-group input-group-sm">
|
||||||
<input autofocus="enable" id="proximityTime" type="number" class="form-control"
|
<input autofocus="enable" id="proximityTime" type="number" class="form-control"
|
||||||
placeholder="Close time in S" value="<%= get('proximity').proximityTime %>">
|
placeholder="Close time in S" >
|
||||||
<span class="input-group-addon">Seconds</span>
|
<span class="input-group-addon">Seconds</span>
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
@ -21,11 +21,6 @@
|
|||||||
<title></title>
|
<title></title>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<%
|
|
||||||
var log = new Log();
|
|
||||||
var get = require('../get_alerts.jag').get;
|
|
||||||
|
|
||||||
%>
|
|
||||||
<div class="modal-header" style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
<div class="modal-header" style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
||||||
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">×</button>
|
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
<h4 class="modal-title">
|
<h4 class="modal-title">
|
||||||
@ -38,7 +33,7 @@ var get = require('../get_alerts.jag').get;
|
|||||||
<div class="col-md-6 col-md-offset-3">
|
<div class="col-md-6 col-md-offset-3">
|
||||||
<div class="input-group input-group-sm">
|
<div class="input-group input-group-sm">
|
||||||
<input autofocus="enable" id="speedAlertValue" type="number" class="form-control"
|
<input autofocus="enable" id="speedAlertValue" type="number" class="form-control"
|
||||||
placeholder="Speed alert value " value="<%= get('speed').speedLimit %>">
|
placeholder="Speed alert value " >
|
||||||
<span class="input-group-addon">km/h</span>
|
<span class="input-group-addon">km/h</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@ -48,5 +43,6 @@ var get = require('../get_alerts.jag').get;
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="/portal/store/carbon.super/fs/gadget/geo-dashboard/js/geo_speed.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -24,18 +24,10 @@
|
|||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
<script>
|
||||||
$(".removeGeoFence").tooltip();
|
|
||||||
|
|
||||||
$('.viewGeoFenceRow td:not(:last-child)').click(function () {
|
|
||||||
viewFence(this.parentElement,'Stationery');
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<%
|
|
||||||
var get = require('../get_alerts.jag').get;
|
|
||||||
%>
|
|
||||||
<div class="modal-header" style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
<div class="modal-header" style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
||||||
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">×</button>
|
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
<h4 class="modal-title">
|
<h4 class="modal-title">
|
||||||
@ -47,7 +39,7 @@ var get = require('../get_alerts.jag').get;
|
|||||||
<div class="row">
|
<div class="row">
|
||||||
<p class="text-info text-center">View current fences</p>
|
<p class="text-info text-center">View current fences</p>
|
||||||
<div class="">
|
<div class="">
|
||||||
<table class="table table-hover">
|
<table class="table table-hover" id = "stationary-alert-table">
|
||||||
<thead>
|
<thead>
|
||||||
<tr >
|
<tr >
|
||||||
<th>Stationery Name</th>
|
<th>Stationery Name</th>
|
||||||
@ -59,32 +51,9 @@ var get = require('../get_alerts.jag').get;
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
<%
|
<div class="alert alert-danger fence-not-exist" role="alert">
|
||||||
var alerts = get('stationery');
|
<strong>Oh snap!</strong> Can't find any geo-fence areas,please draw a new area or try again.
|
||||||
|
</div>
|
||||||
if(alerts){
|
|
||||||
|
|
||||||
for each(var alert in alerts){
|
|
||||||
%>
|
|
||||||
<tr class="viewGeoFenceRow" style="cursor: pointer" data-stationeryTime='<%= alert
|
|
||||||
.stationeryTime %>' data-fluctuationRadius='<%= alert.fluctuationRadius %>' data-areaName='<%= alert.areaName %>' data-queryName='<%= alert.queryName %>' data-geoJson='<%= alert.geoJson %>'>
|
|
||||||
<td><%= alert.areaName %></td>
|
|
||||||
<td><%= alert.stationeryTime %></td>
|
|
||||||
<td><%= alert.fluctuationRadius %>
|
|
||||||
<td><%= alert.queryName %></td>
|
|
||||||
<td><%= alert.createdTime %></td>
|
|
||||||
<td onClick="removeGeoFence(this.parentElement,'Stationery')" class="removeGeoFence" data-toggle="tooltip" title="Remove fence" ><i class="fa fa-trash-o"></i></td>
|
|
||||||
</tr>
|
|
||||||
<%
|
|
||||||
}
|
|
||||||
} else{
|
|
||||||
%>
|
|
||||||
<div class="alert alert-danger" role="alert">
|
|
||||||
<strong>Oh snap!</strong> Can't find any geo-fence areas,please draw a new area or try again.
|
|
||||||
</div>
|
|
||||||
<%
|
|
||||||
}
|
|
||||||
%>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@ -101,5 +70,6 @@ var get = require('../get_alerts.jag').get;
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="/portal/store/carbon.super/fs/gadget/geo-dashboard/js/geo_stationary.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -33,9 +33,6 @@
|
|||||||
</script>
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<%
|
|
||||||
var get = require('../get_alerts.jag').get;
|
|
||||||
%>
|
|
||||||
<div class="modal-header" style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
<div class="modal-header" style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
||||||
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">×</button>
|
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
<h4 class="modal-title">
|
<h4 class="modal-title">
|
||||||
|
|||||||
@ -22,20 +22,8 @@
|
|||||||
<style>
|
<style>
|
||||||
.fa-trash-o:hover{color:red;}
|
.fa-trash-o:hover{color:red;}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script>
|
|
||||||
$(".removeGeoFence").tooltip();
|
|
||||||
|
|
||||||
$('.viewGeoFenceRow td:not(:last-child)').click(function () {
|
|
||||||
viewFence(this.parentElement,'WithIn');
|
|
||||||
});
|
|
||||||
|
|
||||||
</script>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<%
|
|
||||||
var get = require('../get_alerts.jag').get;
|
|
||||||
%>
|
|
||||||
<div class="modal-header" style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
<div class="modal-header" style="cursor: move;background: #f9f9f9;-webkit-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);-moz-box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);box-shadow: inset 0px 0px 14px 1px rgba(0,0,0,0.2);">
|
||||||
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">×</button>
|
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">×</button>
|
||||||
<h4 class="modal-title">
|
<h4 class="modal-title">
|
||||||
@ -45,9 +33,9 @@ var get = require('../get_alerts.jag').get;
|
|||||||
</div>
|
</div>
|
||||||
<div class="modal-body">
|
<div class="modal-body">
|
||||||
<div class="row">
|
<div class="row">
|
||||||
<p class="text-info text-center">View current fences</p>
|
<p class="text-info text-center fence-not-exist">View current fences</p>
|
||||||
<div class="">
|
<div class="">
|
||||||
<table class="table table-hover">
|
<table class="table table-hover" id ="within-alert">
|
||||||
<thead>
|
<thead>
|
||||||
<tr >
|
<tr >
|
||||||
<th>Fence Name</th>
|
<th>Fence Name</th>
|
||||||
@ -57,29 +45,10 @@ var get = require('../get_alerts.jag').get;
|
|||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
<div class="alert alert-danger fence-not-exist" role="alert">
|
||||||
<%
|
|
||||||
var alerts = get('within');
|
|
||||||
if(alerts){
|
|
||||||
for each(var alert in alerts){
|
|
||||||
%>
|
|
||||||
<tr class="viewGeoFenceRow" style="cursor: pointer" data-areaName='<%= alert.areaName %>' data-queryName='<%= alert.queryName %>' data-geoJson='<%= alert.geoJson %>'>
|
|
||||||
<td><%= alert.areaName %></td>
|
|
||||||
<td><%= alert.queryName %></td>
|
|
||||||
<td><%= alert.createdTime %></td>
|
|
||||||
<td onClick="removeGeoFence(this.parentElement,'WithIn')" class="removeGeoFence" data-toggle="tooltip" title="Remove fence" ><i class="fa fa-trash-o"></i></td>
|
|
||||||
</tr>
|
|
||||||
<%
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else{
|
|
||||||
%>
|
|
||||||
<div class="alert alert-danger" role="alert">
|
|
||||||
<strong>Oh snap!</strong> Can't find any geo-fence areas,please draw a new area or try again.
|
<strong>Oh snap!</strong> Can't find any geo-fence areas,please draw a new area or try again.
|
||||||
</div>
|
</div>
|
||||||
<%
|
|
||||||
}
|
|
||||||
%>
|
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
@ -96,5 +65,6 @@ var get = require('../get_alerts.jag').get;
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<script src="/portal/store/carbon.super/fs/gadget/geo-dashboard/js/geo_within.js"></script>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@ -31,8 +31,6 @@ var eventProcessorOption = eventsProcessorServiceClient.getOptions();
|
|||||||
eventProcessorOption.setManageSession(true);
|
eventProcessorOption.setManageSession(true);
|
||||||
eventProcessorOption.setProperty(HTTPConstants.COOKIE_STRING, session.get('authToken'));
|
eventProcessorOption.setProperty(HTTPConstants.COOKIE_STRING, session.get('authToken'));
|
||||||
|
|
||||||
|
|
||||||
var cepInfo = require('../include/commons.jag').cepInfo;
|
|
||||||
var removeAlert = require('../include/store_alerts.jag').remove;
|
var removeAlert = require('../include/store_alerts.jag').remove;
|
||||||
var ws = require('ws');
|
var ws = require('ws');
|
||||||
var process = require("process"), host = process.getProperty('server.host'),
|
var process = require("process"), host = process.getProperty('server.host'),
|
||||||
|
|||||||
@ -32,8 +32,6 @@ var eventsProcessorServiceClient = eventprocessorStub._getServiceClient();
|
|||||||
var eventProcessorOption = eventsProcessorServiceClient.getOptions();
|
var eventProcessorOption = eventsProcessorServiceClient.getOptions();
|
||||||
eventProcessorOption.setManageSession(true);
|
eventProcessorOption.setManageSession(true);
|
||||||
eventProcessorOption.setProperty(HTTPConstants.COOKIE_STRING, session.get('authToken'));
|
eventProcessorOption.setProperty(HTTPConstants.COOKIE_STRING, session.get('authToken'));
|
||||||
|
|
||||||
var escapeSiddhiql = require('../include/commons.jag').escapeSiddhiql;
|
|
||||||
var storeAlerts = require('../include/store_alerts.jag').store; // TODO: change to js
|
var storeAlerts = require('../include/store_alerts.jag').store; // TODO: change to js
|
||||||
var ws = require('ws');
|
var ws = require('ws');
|
||||||
var process = require("process"), host = process.getProperty('server.host'),
|
var process = require("process"), host = process.getProperty('server.host'),
|
||||||
@ -90,7 +88,7 @@ if (verb == "POST") {
|
|||||||
} else if (executionPlan == 'Traffic') {
|
} else if (executionPlan == 'Traffic') {
|
||||||
var resourceContents = parseDataJson.geoFenceGeoJSON;
|
var resourceContents = parseDataJson.geoFenceGeoJSON;
|
||||||
}
|
}
|
||||||
storeAlerts(parseKey, resourceContents, executionPlan, optionalArgs, deviceId);
|
storeAlerts(resourceContents, executionPlan, optionalArgs, deviceId);
|
||||||
|
|
||||||
var payload;
|
var payload;
|
||||||
if (cepAction == "edit") {
|
if (cepAction == "edit") {
|
||||||
|
|||||||
@ -21,11 +21,11 @@
|
|||||||
* Get all available tile servers from RDB via HTTP GET, Insert new tile servers information via HTTP POST request
|
* Get all available tile servers from RDB via HTTP GET, Insert new tile servers information via HTTP POST request
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var configuration = require('../conf/database.json');
|
var constants = require("constants.jag");
|
||||||
|
var db = new Database(constants.DATA_SOURCE_NAME);
|
||||||
var log = new Log();
|
var log = new Log();
|
||||||
//Sample create table query create table tileServers (serverId int NOT NULL AUTO_INCREMENT, url varchar(255) NOT NULL, name varchar(255), PRIMARY KEY (serverID));
|
//Sample create table query create table tileServers (serverId int NOT NULL AUTO_INCREMENT, url varchar(255) NOT NULL, name varchar(255), PRIMARY KEY (serverID));
|
||||||
var tableName = "tileservers";
|
var tableName = "tileservers";
|
||||||
var db = new Database("jdbc:h2:repository/database/WSO2_GEO",configuration.username,configuration.password);
|
|
||||||
|
|
||||||
if(request.getMethod() == "GET"){
|
if(request.getMethod() == "GET"){
|
||||||
|
|
||||||
@ -46,7 +46,9 @@ if(request.getMethod() == "GET"){
|
|||||||
var getAllTileServers = "select * from tileServers";
|
var getAllTileServers = "select * from tileServers";
|
||||||
try{
|
try{
|
||||||
var allTileServers = db.query(getAllTileServers);
|
var allTileServers = db.query(getAllTileServers);
|
||||||
log.info(allTileServers);
|
if (log.isDebugEnabled) {
|
||||||
|
log.debug(allTileServers);
|
||||||
|
}
|
||||||
response.contentType = "application/json";
|
response.contentType = "application/json";
|
||||||
response.characterEncoding = "UTF-8";
|
response.characterEncoding = "UTF-8";
|
||||||
response.content = allTileServers;
|
response.content = allTileServers;
|
||||||
@ -73,8 +75,9 @@ else if(request.getMethod() == "POST"){
|
|||||||
var insertTileServer ="INSERT INTO tileServers (url, name, subdomains, attribution, maxzoom) VALUES('"+ url +"', '"+ name +"', '"+ subdomains +"', '"+ attribution +"', '"+ maxzoom +"' );";
|
var insertTileServer ="INSERT INTO tileServers (url, name, subdomains, attribution, maxzoom) VALUES('"+ url +"', '"+ name +"', '"+ subdomains +"', '"+ attribution +"', '"+ maxzoom +"' );";
|
||||||
try{
|
try{
|
||||||
db.query(insertTileServer);
|
db.query(insertTileServer);
|
||||||
log.info(name + ' tile server added successfully!');
|
if (log.isDebugEnabled()) {
|
||||||
print(name + ' tile server added successfully!');
|
log.debug(name + ' tile server added successfully!');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(e){
|
catch(e){
|
||||||
log.error(e.toString());
|
log.error(e.toString());
|
||||||
|
|||||||
@ -21,11 +21,10 @@
|
|||||||
* Get all available tile servers from RDB via HTTP GET, Insert new tile servers information via HTTP POST request
|
* Get all available tile servers from RDB via HTTP GET, Insert new tile servers information via HTTP POST request
|
||||||
*/
|
*/
|
||||||
|
|
||||||
var configuration = require('../conf/database.json');
|
var constants = require("constants.jag");
|
||||||
|
var db = new Database(constants.DATA_SOURCE_NAME);
|
||||||
var log = new Log();
|
var log = new Log();
|
||||||
|
|
||||||
var tableName = "webMapService";
|
var tableName = "webMapService";
|
||||||
var db = new Database("jdbc:h2:repository/database/WSO2_GEO",configuration.username,configuration.password);
|
|
||||||
|
|
||||||
if(request.getMethod() == "GET"){
|
if(request.getMethod() == "GET"){
|
||||||
|
|
||||||
@ -47,7 +46,9 @@ if(request.getMethod() == "GET"){
|
|||||||
var getAllWmsEndPoints = "select * from webMapService";
|
var getAllWmsEndPoints = "select * from webMapService";
|
||||||
try{
|
try{
|
||||||
var allWmsEndPoints = db.query(getAllWmsEndPoints);
|
var allWmsEndPoints = db.query(getAllWmsEndPoints);
|
||||||
log.info(allWmsEndPoints);
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug(allWmsEndPoints);
|
||||||
|
}
|
||||||
response.contentType = "application/json";
|
response.contentType = "application/json";
|
||||||
response.characterEncoding = "UTF-8";
|
response.characterEncoding = "UTF-8";
|
||||||
response.content = allWmsEndPoints;
|
response.content = allWmsEndPoints;
|
||||||
@ -74,8 +75,9 @@ else if(request.getMethod() == "POST"){
|
|||||||
var insertWmsEndPoint ="INSERT INTO webMapService (serviceUrl, name, layers, version, format) VALUES('"+ serviceEndPoint +"', '"+ serviceName +"', '"+ layers +"', '"+ wmsVersion +"', '"+ outputFormat +"' );";
|
var insertWmsEndPoint ="INSERT INTO webMapService (serviceUrl, name, layers, version, format) VALUES('"+ serviceEndPoint +"', '"+ serviceName +"', '"+ layers +"', '"+ wmsVersion +"', '"+ outputFormat +"' );";
|
||||||
try{
|
try{
|
||||||
db.query(insertWmsEndPoint);
|
db.query(insertWmsEndPoint);
|
||||||
log.info(serviceName + ' wms service added successfully!');
|
if (log.isDebugEnabled()) {
|
||||||
print(serviceName + 'added successfully!');
|
log.info(serviceName + ' wms service added successfully!');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch(e){
|
catch(e){
|
||||||
log.error(e.toString());
|
log.error(e.toString());
|
||||||
@ -102,7 +104,6 @@ function logToFile(message){
|
|||||||
|
|
||||||
message = file.write(message);
|
message = file.write(message);
|
||||||
file.close();
|
file.close();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
%>
|
%>
|
||||||
|
After Width: | Height: | Size: 86 B |
|
After Width: | Height: | Size: 5.7 KiB |
|
After Width: | Height: | Size: 90 B |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
@ -0,0 +1,27 @@
|
|||||||
|
.ui-timepicker-div .ui-widget-header { margin-bottom: 8px; }
|
||||||
|
.ui-timepicker-div dl { text-align: left; }
|
||||||
|
.ui-timepicker-div dl dt { float: left; clear:left; padding: 0 0 0 5px; }
|
||||||
|
.ui-timepicker-div dl dd { margin: 0 10px 10px 40%; }
|
||||||
|
.ui-timepicker-div td { font-size: 90%; }
|
||||||
|
.ui-tpicker-grid-label { background: none; border: none; margin: 0; padding: 0; }
|
||||||
|
.ui-timepicker-div .ui_tpicker_unit_hide{ display: none; }
|
||||||
|
|
||||||
|
.ui-timepicker-rtl{ direction: rtl; }
|
||||||
|
.ui-timepicker-rtl dl { text-align: right; padding: 0 5px 0 0; }
|
||||||
|
.ui-timepicker-rtl dl dt{ float: right; clear: right; }
|
||||||
|
.ui-timepicker-rtl dl dd { margin: 0 40% 10px 10px; }
|
||||||
|
|
||||||
|
/* Shortened version style */
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine { padding-right: 2px; }
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine dt { display: none; }
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label { display: block; padding-top: 2px; }
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine dl { text-align: right; }
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine dl dd,
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine dl dd > div { display:inline-block; margin:0; }
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before { content:':'; display:inline-block; }
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before { content:'.'; display:inline-block; }
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,
|
||||||
|
.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{ display: none; }
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
/*! jQuery Timepicker Addon - v1.5.3 - 2015-04-19
|
||||||
|
* http://trentrichardson.com/examples/timepicker
|
||||||
|
* Copyright (c) 2015 Trent Richardson; Licensed MIT */
|
||||||
|
|
||||||
|
.ui-timepicker-div .ui-widget-header{margin-bottom:8px}.ui-timepicker-div dl{text-align:left}.ui-timepicker-div dl dt{float:left;clear:left;padding:0 0 0 5px}.ui-timepicker-div dl dd{margin:0 10px 10px 40%}.ui-timepicker-div td{font-size:90%}.ui-tpicker-grid-label{background:0 0;border:0;margin:0;padding:0}.ui-timepicker-div .ui_tpicker_unit_hide{display:none}.ui-timepicker-rtl{direction:rtl}.ui-timepicker-rtl dl{text-align:right;padding:0 5px 0 0}.ui-timepicker-rtl dl dt{float:right;clear:right}.ui-timepicker-rtl dl dd{margin:0 40% 10px 10px}.ui-timepicker-div.ui-timepicker-oneLine{padding-right:2px}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time,.ui-timepicker-div.ui-timepicker-oneLine dt{display:none}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_time_label{display:block;padding-top:2px}.ui-timepicker-div.ui-timepicker-oneLine dl{text-align:right}.ui-timepicker-div.ui-timepicker-oneLine dl dd,.ui-timepicker-div.ui-timepicker-oneLine dl dd>div{display:inline-block;margin:0}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_minute:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_second:before{content:':';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_millisec:before,.ui-timepicker-div.ui-timepicker-oneLine dl dd.ui_tpicker_microsec:before{content:'.';display:inline-block}.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide,.ui-timepicker-div.ui-timepicker-oneLine .ui_tpicker_unit_hide:before{display:none}
|
||||||
@ -79,3 +79,9 @@
|
|||||||
box-shadow: 0 5px 15px rgba(0,0,0,.5);
|
box-shadow: 0 5px 15px rgba(0,0,0,.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.ui-dialog .ui-dialog-title {
|
||||||
|
word-break: keep-all !important;
|
||||||
|
word-wrap: normal !important;
|
||||||
|
white-space: normal !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -17,7 +17,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*html, body {*/
|
/*html, body {*/
|
||||||
/*height: 100%;*/
|
/*height: 100%;*/
|
||||||
/*}*/
|
/*}*/
|
||||||
|
|
||||||
#map {
|
#map {
|
||||||
@ -31,4 +31,4 @@
|
|||||||
|
|
||||||
.leaflet-control-attribution.leaflet-control {
|
.leaflet-control-attribution.leaflet-control {
|
||||||
font-size: 8px;
|
font-size: 8px;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,12 +28,4 @@ var escapeSiddhiql = function (s) {
|
|||||||
return XML_CHAR_MAP[ch];
|
return XML_CHAR_MAP[ch];
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
var cepInfo = function () {
|
|
||||||
var configuration = require("../conf/cep_info.json");
|
|
||||||
return configuration;
|
|
||||||
};
|
|
||||||
|
|
||||||
// TODO: move to new datastore api
|
|
||||||
var dataStore = new MetadataStore("admin", "admin");
|
|
||||||
%>
|
%>
|
||||||
@ -1,20 +0,0 @@
|
|||||||
<%
|
|
||||||
/*
|
|
||||||
~ Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
|
||||||
~
|
|
||||||
~ WSO2 Inc. licenses this file to you under the Apache License,
|
|
||||||
~ Version 2.0 (the "License"); you may not use this file except
|
|
||||||
~ in compliance with the License.
|
|
||||||
~ You may obtain a copy of the License at
|
|
||||||
~
|
|
||||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
|
||||||
~
|
|
||||||
~ Unless required by applicable law or agreed to in writing,
|
|
||||||
~ software distributed under the License is distributed on an
|
|
||||||
~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
||||||
~ KIND, either express or implied. See the License for the
|
|
||||||
~ specific language governing permissions and limitations
|
|
||||||
~ under the License.
|
|
||||||
*/
|
|
||||||
var configuration = require('../conf/database.json');
|
|
||||||
%>
|
|
||||||
@ -18,133 +18,148 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
// TODO: change the name of this jaggery file even thoe it says 'store_alerts' it is actually removing the alerts from the data store as well o.O wired
|
// TODO: change the name of this jaggery file even thoe it says 'store_alerts' it is actually removing the alerts from the data store as well o.O wired
|
||||||
|
|
||||||
var dataStore = require('../include/commons.jag').dataStore;
|
|
||||||
var log = new Log();
|
var log = new Log();
|
||||||
var deviceIdSeperator = "---";
|
var constants = require("../controllers/constants.jag");
|
||||||
|
|
||||||
function store(parameterKeyName, resourceContents, executionPlan, optional, deviceId) {
|
var getRegistry = function() {
|
||||||
log.info("DEBUG:*** resourceContents:" + resourceContents);
|
var carbon = require("carbon");
|
||||||
if (executionPlan == "Speed") {
|
var server = new carbon.server.Server();
|
||||||
var currentLimit;
|
return new carbon.registry.Registry(server, {
|
||||||
var speedFile = "speed" + deviceIdSeperator + ".json";
|
system: true
|
||||||
try {
|
});
|
||||||
currentLimit = dataStore.get(speedFile);
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the registry path to save the alert
|
||||||
|
* @param {String} alert_type Type of the alert
|
||||||
|
* @param {String} id Id of the device
|
||||||
|
* @param {String} optional /optional identity
|
||||||
|
* @return {String} Registry Path to save teh alert
|
||||||
|
* */
|
||||||
|
var registryPath = function (alert_type, id, optional) {
|
||||||
|
if (alert_type && id ) {
|
||||||
|
if (alert_type === constants.EXECUTION_PLAN_TYPE_SPEED || alert_type === constants
|
||||||
|
.EXECUTION_PLAN_TYPE_PROXIMITY) {
|
||||||
|
return constants.REGISTRY_PATH_FOR_ALERTS + alert_type + "/" + id;
|
||||||
|
} else {
|
||||||
|
return constants.REGISTRY_PATH_FOR_ALERTS + alert_type + "/" + id + "/" + optional;
|
||||||
}
|
}
|
||||||
catch (e) {
|
} else {
|
||||||
log.info("DEBUG:*** Catch error:" + e.message);
|
throw "Alert type and ID are mandatory field to generate the relevant registry path";
|
||||||
currentLimit = dataStore.newResource();
|
|
||||||
currentLimit.mediaType = 'application/json';
|
|
||||||
currentLimit.description = "User define speed limit for display alerts.";
|
|
||||||
}
|
|
||||||
currentLimit.content = String('{"speedLimit": ' + resourceContents + '}');
|
|
||||||
dataStore.put(speedFile, currentLimit);
|
|
||||||
log.info("DEBUG:*** Current speed limit set to:" + currentLimit.content);
|
|
||||||
}
|
}
|
||||||
else if (executionPlan == "Within") {
|
};
|
||||||
try {
|
|
||||||
var res = dataStore.get("geo/alerts/within");
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
var geo = dataStore.newCollection();
|
|
||||||
var alerts = dataStore.newCollection();
|
|
||||||
var within = dataStore.newCollection();
|
|
||||||
|
|
||||||
dataStore.put("geo", geo);
|
|
||||||
dataStore.put("alerts", alerts);
|
|
||||||
dataStore.put("within", within);
|
|
||||||
|
|
||||||
}
|
|
||||||
log.info("DEBUG:****** resourceContents = " + String('{"geoJson": ' + resourceContents + '}'));
|
|
||||||
var resource = dataStore.newResource();
|
|
||||||
resource.addProperty("queryName", optional.queryName);
|
|
||||||
resource.addProperty("areaName", optional.customName);
|
|
||||||
resource.mediaType = 'application/json';
|
|
||||||
resource.content = String(resourceContents);
|
|
||||||
dataStore.put(String("geo/alerts/within/" + optional.queryName + deviceIdSeperator + deviceId + ".json"), resource);
|
|
||||||
} else if (executionPlan == "Proximity") {
|
|
||||||
|
|
||||||
try {
|
|
||||||
var res = dataStore.get("geo/alerts/proximity");
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
var geo = dataStore.newCollection();
|
|
||||||
var alerts = dataStore.newCollection();
|
|
||||||
var proximity = dataStore.newCollection();
|
|
||||||
|
|
||||||
dataStore.put("geo", geo);
|
|
||||||
dataStore.put("alerts", alerts);
|
|
||||||
dataStore.put("proximity", proximity);
|
|
||||||
}
|
|
||||||
log.info("DEBUG:****** resourceContents = " + resourceContents);
|
|
||||||
var resource = dataStore.newResource();
|
|
||||||
resource.addProperty("proximityDistance", resourceContents.proximityDistance);
|
|
||||||
resource.addProperty("proximityTime", resourceContents.proximityTime);
|
|
||||||
dataStore.put(String("geo/alerts/proximity/" + optional.executionPlan + deviceIdSeperator + deviceId + ".json"), resource);
|
|
||||||
|
|
||||||
} else if (executionPlan == "Stationery") {
|
|
||||||
|
|
||||||
try {
|
|
||||||
var res = dataStore.get("geo/alerts/stationery");
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
var geo = dataStore.newCollection();
|
|
||||||
var alerts = dataStore.newCollection();
|
|
||||||
var stationery = dataStore.newCollection();
|
|
||||||
|
|
||||||
dataStore.put("geo", geo);
|
|
||||||
dataStore.put("alerts", alerts);
|
|
||||||
dataStore.put("stationery", stationery);
|
|
||||||
}
|
|
||||||
log.info("DEBUG:****** resourceContents = " + resourceContents.geoFenceGeoJSON);
|
|
||||||
var resource = dataStore.newResource();
|
|
||||||
resource.addProperty("queryName", optional.queryName);
|
|
||||||
resource.addProperty("stationeryName", optional.customName);
|
|
||||||
resource.addProperty("stationeryTime", resourceContents.stationeryTime);
|
|
||||||
resource.addProperty("fluctuationRadius", resourceContents.fluctuationRadius);
|
|
||||||
resource.content = String(resourceContents.geoFenceGeoJSON);
|
|
||||||
dataStore.put(String("geo/alerts/stationery/" + optional.queryName + deviceIdSeperator + deviceId + ".json"), resource);
|
|
||||||
|
|
||||||
} else if (executionPlan == "Traffic") {
|
|
||||||
|
|
||||||
try {
|
|
||||||
var res = dataStore.get("geo/alerts/traffic");
|
|
||||||
}
|
|
||||||
catch (e) {
|
|
||||||
var geo = dataStore.newCollection();
|
|
||||||
var alerts = dataStore.newCollection();
|
|
||||||
var traffic = dataStore.newCollection();
|
|
||||||
|
|
||||||
dataStore.put("geo", geo);
|
|
||||||
dataStore.put("alerts", alerts);
|
|
||||||
dataStore.put("traffic", traffic);
|
|
||||||
}
|
|
||||||
log.info("DEBUG:****** resourceContents = " + resourceContents.geoFenceGeoJSON);
|
|
||||||
var resource = dataStore.newResource();
|
|
||||||
resource.addProperty("queryName", optional.queryName);
|
|
||||||
resource.addProperty("areaName", optional.customName);
|
|
||||||
resource.content = String(resourceContents);
|
|
||||||
dataStore.put(String("geo/alerts/traffic/" + optional.queryName + deviceIdSeperator + deviceId + ".json"), resource);
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* To store the alerts for visualizing purposes
|
||||||
|
* @param resourceContents Value that need to saved
|
||||||
|
* @param executionPlan Type of the execution plan
|
||||||
|
* @param optional Optional parameters that are only specific to particular device types
|
||||||
|
* @param deviceId Id of the device
|
||||||
|
*/
|
||||||
|
function store(resourceContents, executionPlan, optional, deviceId) {
|
||||||
|
var registry = getRegistry();
|
||||||
|
var pathToAddAlert = "";
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("DEBUG:*** resourceContents:" + resourceContents);
|
||||||
|
}
|
||||||
|
if (executionPlan === constants.EXECUTION_PLAN_TYPE_SPEED) {
|
||||||
|
pathToAddAlert = registryPath(constants.EXECUTION_PLAN_TYPE_SPEED, deviceId);
|
||||||
|
registry.put(pathToAddAlert, {
|
||||||
|
content: '{"speedLimit": ' + resourceContents + '}',
|
||||||
|
mediaType: 'application/json'
|
||||||
|
});
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("DEBUG:*** Current speed limit set to:" + currentLimit.content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (executionPlan === constants.EXECUTION_PLAN_TYPE_WITHIN) {
|
||||||
|
pathToAddAlert = registryPath(constants.EXECUTION_PLAN_TYPE_WITHIN, deviceId, optional.queryName);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("DEBUG:****** resourceContents = " + String('{"geoJson": ' + resourceContents + '}'));
|
||||||
|
}
|
||||||
|
registry.put(pathToAddAlert, {
|
||||||
|
content: JSON.stringify(resourceContents),
|
||||||
|
mediaType: 'application/json',
|
||||||
|
properties : {
|
||||||
|
"queryName" : optional.queryName,
|
||||||
|
"areaName" : optional.customName
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (executionPlan === constants.EXECUTION_PLAN_TYPE_PROXIMITY) {
|
||||||
|
pathToAddAlert = registryPath(constants.EXECUTION_PLAN_TYPE_PROXIMITY, deviceId);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("DEBUG:****** resourceContents = " + resourceContents);
|
||||||
|
}
|
||||||
|
registry.put(pathToAddAlert, {
|
||||||
|
content: "",
|
||||||
|
mediaType: 'application/json'
|
||||||
|
});
|
||||||
|
registry.addProperty(pathToAddAlert, "proximityDistance", resourceContents.proximityDistance);
|
||||||
|
registry.addProperty(pathToAddAlert, "proximityTime", resourceContents.proximityTime);
|
||||||
|
} else if (executionPlan === constants.EXECUTION_PLAN_TYPE_STATIONARY) {
|
||||||
|
pathToAddAlert = registryPath(constants.EXECUTION_PLAN_TYPE_STATIONARY, deviceId, optional.queryName);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("DEBUG:****** resourceContents = " + resourceContents);
|
||||||
|
}
|
||||||
|
var registryResource = {
|
||||||
|
content: JSON.stringify(resourceContents.geoFenceGeoJSON),
|
||||||
|
mediaType: 'application/json',
|
||||||
|
properties: {
|
||||||
|
"queryName" : optional.queryName,
|
||||||
|
"stationeryName" : optional.customName,
|
||||||
|
"stationeryTime" : resourceContents.stationeryTime,
|
||||||
|
"fluctuationRadius" : resourceContents.fluctuationRadius
|
||||||
|
}
|
||||||
|
};
|
||||||
|
registry.put(pathToAddAlert, registryResource);
|
||||||
|
} else if (executionPlan === constants.EXECUTION_PLAN_TYPE_TRAFFIC) {
|
||||||
|
pathToAddAlert = registryPath(constants.EXECUTION_PLAN_TYPE_TRAFFIC, deviceId, optional.queryName);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("DEBUG:****** resourceContents = " + resourceContents.geoFenceGeoJSON);
|
||||||
|
}
|
||||||
|
var registryResource = {
|
||||||
|
content: JSON.stringify(resourceContents),
|
||||||
|
mediaType: 'application/json',
|
||||||
|
properties: {
|
||||||
|
"queryName" : optional.queryName,
|
||||||
|
"stationeryName" : optional.customName,
|
||||||
|
"stationeryTime" : resourceContents.stationeryTime,
|
||||||
|
"fluctuationRadius" : resourceContents.fluctuationRadius
|
||||||
|
}
|
||||||
|
};
|
||||||
|
registry.put(pathToAddAlert, {
|
||||||
|
content: JSON.stringify(resourceContents),
|
||||||
|
mediaType: 'application/json',
|
||||||
|
properties: {
|
||||||
|
"queryName" : optional.queryName,
|
||||||
|
"areaName" : optional.customName
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function remove(queryName, id, deviceId) {
|
/**
|
||||||
|
* To remove the registry resource
|
||||||
|
* @param queryName Name of the query that need to be removed
|
||||||
|
* @param executionPlanType type of the execution plan that need to be removed
|
||||||
|
* @param deviceId Id of the device
|
||||||
|
*/
|
||||||
|
function remove(queryName, executionPlanType, deviceId) {
|
||||||
var path = "";
|
var path = "";
|
||||||
try {
|
try {
|
||||||
if (id == "WithIn") {
|
if (executionPlanType === constants.EXECUTION_PLAN_TYPE_SPEED || executionPlanType === constants.EXECUTION_PLAN_TYPE_PROXIMITY) {
|
||||||
path = "geo/alerts/within/" + queryName + deviceIdSeperator + deviceId + ".json";
|
path = registryPath(executionPlanType, deviceId);
|
||||||
} else if (id == "Stationery") {
|
} else {
|
||||||
path = "geo/alerts/stationery/" + queryName + deviceIdSeperator + deviceId + ".json";
|
path = registryPath(executionPlanType, deviceId, queryName);
|
||||||
} else if (id == "Traffic") {
|
}
|
||||||
path = "geo/alerts/traffic/" + queryName + deviceIdSeperator + deviceId + ".json";
|
getRegistry().remove(path);
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
log.debug("Resource is removed from the path" + path);
|
||||||
}
|
}
|
||||||
log.info("DEBUG: path = " + path);
|
|
||||||
dataStore.remove(path);
|
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
log.info("The requested resource " + path + " was not found on this server. That’s all we know."); // Inspired by google 404 message
|
log.error("The requested resource " + path + " was not found on this server.");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
%>
|
%>
|
||||||
@ -102,7 +102,6 @@
|
|||||||
<!-- Self javascript libraries (Order of the import is very important, changing the order might shadow some variables, append new script to bottom ) -->
|
<!-- Self javascript libraries (Order of the import is very important, changing the order might shadow some variables, append new script to bottom ) -->
|
||||||
<!-- ** comment out below imports if using minimized wso2_geo.min library ** -->
|
<!-- ** comment out below imports if using minimized wso2_geo.min library ** -->
|
||||||
<script src="js/application_options.js"></script>
|
<script src="js/application_options.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
function reformatRadius(val){
|
function reformatRadius(val){
|
||||||
if(val != "" && !isNaN(val)){
|
if(val != "" && !isNaN(val)){
|
||||||
@ -136,6 +135,11 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="navbar-collapse collapse" style="display:inline-block;">
|
<div class="navbar-collapse collapse" style="display:inline-block;">
|
||||||
|
<ul class="nav">
|
||||||
|
<li>
|
||||||
|
<button id='realTimeShow' type="submit" class="btn btn-primary" style="display:none;" onclick='enableRealTime()'>Return to Real Time View</button>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
<ul class="nav navbar-nav-left">
|
<ul class="nav navbar-nav-left">
|
||||||
<li class="hidden-xs"><a href="#left_side_pannel" data-uk-offcanvas>
|
<li class="hidden-xs"><a href="#left_side_pannel" data-uk-offcanvas>
|
||||||
<i class="fa fa-list" style="color: #FF9900"></i></a>
|
<i class="fa fa-list" style="color: #FF9900"></i></a>
|
||||||
@ -240,7 +244,7 @@
|
|||||||
<ul class="uk-nav-sub">
|
<ul class="uk-nav-sub">
|
||||||
<li><a style="margin-left: 20%;" data-toggle="modal" href="/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/modals/speed_alert.jag"
|
<li><a style="margin-left: 20%;" data-toggle="modal" href="/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/modals/speed_alert.jag"
|
||||||
data-target="#commonModal"><i class="fa fa-tachometer"></i> Speed alert</a></li>
|
data-target="#commonModal"><i class="fa fa-tachometer"></i> Speed alert</a></li>
|
||||||
<li><a style="margin-left: 20%;" data-toggle="modal" href="/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/modals/proximity_alert.jag"
|
<li id = "proximity_alert"><a style="margin-left: 20%;" data-toggle="modal" href="/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/modals/proximity_alert.jag"
|
||||||
data-target="#commonModal"><i class="fa fa-link"></i> Proximity alert</a></li>
|
data-target="#commonModal"><i class="fa fa-link"></i> Proximity alert</a></li>
|
||||||
<li><a style="margin-left: 20%;" data-toggle="modal" href="/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/modals/stationery_alert.jag"
|
<li><a style="margin-left: 20%;" data-toggle="modal" href="/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/modals/stationery_alert.jag"
|
||||||
data-target="#commonModal"><i class="fa fa-chain-broken"></i> Stationary alert</a></li>
|
data-target="#commonModal"><i class="fa fa-chain-broken"></i> Stationary alert</a></li>
|
||||||
@ -254,10 +258,6 @@
|
|||||||
<ul class="uk-nav-sub">
|
<ul class="uk-nav-sub">
|
||||||
<li><a style="margin-left: 20%;" data-toggle="modal" href="/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/modals/within_alert.jag"
|
<li><a style="margin-left: 20%;" data-toggle="modal" href="/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/modals/within_alert.jag"
|
||||||
data-target="#commonModal"><i class="fa fa-square-o"></i> Within</a></li>
|
data-target="#commonModal"><i class="fa fa-square-o"></i> Within</a></li>
|
||||||
<li><a style="margin-left: 20%;color: grey;cursor: not-allowed;"><i
|
|
||||||
class="fa fa-external-link-square"></i> Approaching</a></li>
|
|
||||||
<li><a style="margin-left: 20%;color: grey;cursor: not-allowed;"><i class="fa fa-minus"></i>
|
|
||||||
Cross</a></li>
|
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
@ -722,7 +722,17 @@
|
|||||||
<p id="information" class="bg-primary" style="margin: 0px;padding: 0px;"></p>
|
<p id="information" class="bg-primary" style="margin: 0px;padding: 0px;"></p>
|
||||||
<h6>Speed<span class="label label-primary pull-right"><span id="speed"></span> km/h</span></h6>
|
<h6>Speed<span class="label label-primary pull-right"><span id="speed"></span> km/h</span></h6>
|
||||||
<h6>Heading<span id="heading" class="label label-primary pull-right"></span></h6>
|
<h6>Heading<span id="heading" class="label label-primary pull-right"></span></h6>
|
||||||
<button type="button" class="btn btn-info btn-xs" onClick="focusOnSpatialObject(document.getElementById('objectId').innerHTML);return false;">History</button>
|
<button type="button" class="btn btn-info btn-xs" onClick="focusOnSpatialObject(document.getElementById('objectId').innerHTML);return false;">Recent History</button>
|
||||||
|
<button type="button" class="btn btn-info btn-xs" onClick="popupDateRange();">Full History</button>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div id="dateRangePopup">
|
||||||
|
<!--<h3 class="popover-title">ID <span id="objectId"></span></h3>-->
|
||||||
|
<div>
|
||||||
|
<label> From: <input id="timeFrom" type="text"> </label>
|
||||||
|
<label> To: <input id="timeTo" type="text"> </label>
|
||||||
|
<button type="button" class="btn btn-info btn-xs" onClick="focusOnHistorySpatialObject(document.getElementById('objectId').innerHTML, document.getElementById('timeFrom').value, document.getElementById('timeTo').value);return false;">Full History</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -82,7 +82,7 @@ function initializeMap() {
|
|||||||
|
|
||||||
map = L.map("map", {
|
map = L.map("map", {
|
||||||
zoom: 14,
|
zoom: 14,
|
||||||
center:[51.548525, 0.111749],
|
center: [6.927078, 79.861243],
|
||||||
layers: [defaultOSM, defaultTFL],
|
layers: [defaultOSM, defaultTFL],
|
||||||
zoomControl: false,
|
zoomControl: false,
|
||||||
attributionControl: false,
|
attributionControl: false,
|
||||||
@ -120,8 +120,6 @@ function initializeMap() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Attribution control */
|
/* Attribution control */
|
||||||
@ -137,7 +135,7 @@ var attributionControl;
|
|||||||
var groupedOverlays;
|
var groupedOverlays;
|
||||||
var layerControl;
|
var layerControl;
|
||||||
|
|
||||||
function processAfterInitializationMap(){
|
function processAfterInitializationMap() {
|
||||||
attributionControl = L.control({
|
attributionControl = L.control({
|
||||||
position: "bottomright"
|
position: "bottomright"
|
||||||
});
|
});
|
||||||
@ -259,11 +257,12 @@ $('#searchbox').typeahead({
|
|||||||
displayKey: 'value',
|
displayKey: 'value',
|
||||||
source: substringMatcher()
|
source: substringMatcher()
|
||||||
}).on('typeahead:selected', function ($e, datum) {
|
}).on('typeahead:selected', function ($e, datum) {
|
||||||
objectId = datum['value'];
|
objectId = datum['value'];
|
||||||
focusOnSpatialObject(objectId)
|
focusOnSpatialObject(objectId)
|
||||||
});
|
});
|
||||||
|
|
||||||
var toggled = false;
|
var toggled = false;
|
||||||
|
|
||||||
function focusOnSpatialObject(objectId) {
|
function focusOnSpatialObject(objectId) {
|
||||||
console.log("Selecting" + objectId);
|
console.log("Selecting" + objectId);
|
||||||
var spatialObject = currentSpatialObjects[objectId];// (local)
|
var spatialObject = currentSpatialObjects[objectId];// (local)
|
||||||
@ -302,6 +301,110 @@ function focusOnSpatialObject(objectId) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
var getProviderData = function (timeFrom, timeTo) {
|
||||||
|
var tableData;
|
||||||
|
$.ajax({
|
||||||
|
url: '/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/gadget-controller.jag?action=getData&id=' + deviceId + '&type=' + deviceType + '&timeFrom=' + timeFrom + '&timeTo=' + timeTo,
|
||||||
|
method: "GET",
|
||||||
|
contentType: "application/json",
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
tableData = data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return tableData;
|
||||||
|
};
|
||||||
|
|
||||||
|
function notifyError(message) {
|
||||||
|
$.UIkit.notify({
|
||||||
|
message: message,
|
||||||
|
status: 'warning',
|
||||||
|
timeout: ApplicationOptions.constance.NOTIFY_WARNING_TIMEOUT,
|
||||||
|
pos: 'bottom-left'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function enableRealTime() {
|
||||||
|
document.getElementById('realTimeShow').style.display = 'none';
|
||||||
|
spatialObject = currentSpatialObjects[selectedSpatialObject];
|
||||||
|
spatialObject.removePath();
|
||||||
|
spatialObject.marker.closePopup();
|
||||||
|
selectedSpatialObject = null;
|
||||||
|
clearFocus();
|
||||||
|
clearMap();
|
||||||
|
document.getElementById('objectInfo').style.display = 'none';
|
||||||
|
isBatchModeOn = false;
|
||||||
|
}
|
||||||
|
function focusOnHistorySpatialObject(objectId, timeFrom, timeTo) {
|
||||||
|
if (!timeFrom) {
|
||||||
|
notifyError('No start time provided to show history. Please provide a suitable value' + timeFrom);
|
||||||
|
} else if (!timeTo) {
|
||||||
|
notifyError('No end time provided to show history. Please provide a suitable value' + timeTo);
|
||||||
|
} else {
|
||||||
|
document.getElementById('realTimeShow').style.display = 'block';
|
||||||
|
isBatchModeOn = true;
|
||||||
|
clearFocus(); // Clear current focus if any
|
||||||
|
clearMap();
|
||||||
|
var tableData = getProviderData(timeFrom, timeTo);
|
||||||
|
for (var i = 0; i < tableData.length; i++) {
|
||||||
|
var data = tableData[i];
|
||||||
|
var geoMessage = {
|
||||||
|
"messageType": "Point",
|
||||||
|
"type": "Feature",
|
||||||
|
"id": data.id,
|
||||||
|
"deviceId": data.id,
|
||||||
|
"deviceType": data.type,
|
||||||
|
"properties": {
|
||||||
|
"speed": data.speed,
|
||||||
|
"heading": data.heading,
|
||||||
|
"state": data.state,
|
||||||
|
"information": data.information,
|
||||||
|
"notify": data.notify,
|
||||||
|
"type": data.type
|
||||||
|
},
|
||||||
|
"geometry": {
|
||||||
|
"type": "Point",
|
||||||
|
"coordinates": [data.longitude, data.latitude]
|
||||||
|
}
|
||||||
|
};
|
||||||
|
processPointMessage(geoMessage);
|
||||||
|
}
|
||||||
|
var spatialObject = currentSpatialObjects[objectId];// (local)
|
||||||
|
if (!spatialObject) {
|
||||||
|
$.UIkit.notify({
|
||||||
|
message: "Spatial Object <span style='color:red'>" + objectId + "</span> not in the Map!!",
|
||||||
|
status: 'warning',
|
||||||
|
timeout: ApplicationOptions.constance.NOTIFY_WARNING_TIMEOUT,
|
||||||
|
pos: 'top-center'
|
||||||
|
});
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
selectedSpatialObject = objectId; // (global) Why not use 'var' other than implicit declaration http://stackoverflow.com/questions/1470488/what-is-the-function-of-the-var-keyword-and-when-to-use-it-or-omit-it#answer-1471738
|
||||||
|
|
||||||
|
console.log("Selected " + objectId + " type " + spatialObject.type);
|
||||||
|
if (spatialObject.type == "area") {
|
||||||
|
spatialObject.focusOn(map);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
map.setView(spatialObject.marker.getLatLng(), 15, {animate: true}); // TODO: check the map._layersMaxZoom and set the zoom level accordingly
|
||||||
|
|
||||||
|
$('#objectInfo').find('#objectInfoId').html(selectedSpatialObject);
|
||||||
|
spatialObject.marker.openPopup();
|
||||||
|
if (!toggled) {
|
||||||
|
$('#objectInfo').animate({width: 'toggle'}, 100);
|
||||||
|
toggled = true;
|
||||||
|
}
|
||||||
|
getAlertsHistory(objectId);
|
||||||
|
spatialObject.drawPath();
|
||||||
|
setTimeout(function () {
|
||||||
|
createChart();
|
||||||
|
chart.load({columns: [spatialObject.speedHistory.getArray()]});
|
||||||
|
}, 100);
|
||||||
|
$('#dateRangePopup').dialog('close');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Unfocused on current searched spatial object
|
// Unfocused on current searched spatial object
|
||||||
function clearFocus() {
|
function clearFocus() {
|
||||||
if (selectedSpatialObject) {
|
if (selectedSpatialObject) {
|
||||||
|
|||||||
@ -349,7 +349,7 @@ function updateDrawing(updatedGeoJson) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function viewFence(geoFenceElement,id) {
|
function viewFence(geoFenceElement,id) {
|
||||||
var geoJson = JSON.parse($(geoFenceElement).attr('data-geoJson'));
|
var geoJson = JSON.parse($(geoFenceElement).attr('data-geoJson').replace(/'/g, '"'));
|
||||||
var queryName = $(geoFenceElement).attr('data-queryName');
|
var queryName = $(geoFenceElement).attr('data-queryName');
|
||||||
var areaName = $(geoFenceElement).attr('data-areaName');
|
var areaName = $(geoFenceElement).attr('data-areaName');
|
||||||
var geometryShape;
|
var geometryShape;
|
||||||
@ -382,7 +382,7 @@ function viewFence(geoFenceElement,id) {
|
|||||||
|
|
||||||
var stationeryTime=$(geoFenceElement).attr('data-stationeryTime');
|
var stationeryTime=$(geoFenceElement).attr('data-stationeryTime');
|
||||||
|
|
||||||
$('#templateLoader').load("assets/html_templates/view_fence_popup.html #viewStationeryAlert", function () {
|
$('#templateLoader').load("/portal/store/carbon.super/fs/gadget/geo-dashboard/assets/html_templates/view_fence_popup.html #viewStationeryAlert", function () {
|
||||||
var popupTemplate = $('#templateLoader').find('#viewStationeryAlert');
|
var popupTemplate = $('#templateLoader').find('#viewStationeryAlert');
|
||||||
popupTemplate.find('#exportGeoJson').attr('leaflet_id', geometryShape._leaflet_id);
|
popupTemplate.find('#exportGeoJson').attr('leaflet_id', geometryShape._leaflet_id);
|
||||||
popupTemplate.find('#hideViewFence').attr('leaflet_id', geometryShape._leaflet_id);
|
popupTemplate.find('#hideViewFence').attr('leaflet_id', geometryShape._leaflet_id);
|
||||||
@ -397,7 +397,7 @@ function viewFence(geoFenceElement,id) {
|
|||||||
});
|
});
|
||||||
} else if(id=="WithIn"){
|
} else if(id=="WithIn"){
|
||||||
|
|
||||||
$('#templateLoader').load("assets/html_templates/view_fence_popup.html #viewWithinAlert", function () {
|
$('#templateLoader').load("/portal/store/carbon.super/fs/gadget/geo-dashboard/assets/html_templates/view_fence_popup.html #viewWithinAlert", function () {
|
||||||
var popupTemplate = $('#templateLoader').find('#viewWithinAlert');
|
var popupTemplate = $('#templateLoader').find('#viewWithinAlert');
|
||||||
popupTemplate.find('#exportGeoJson').attr('leaflet_id', geometryShape._leaflet_id);
|
popupTemplate.find('#exportGeoJson').attr('leaflet_id', geometryShape._leaflet_id);
|
||||||
popupTemplate.find('#hideViewFence').attr('leaflet_id', geometryShape._leaflet_id);
|
popupTemplate.find('#hideViewFence').attr('leaflet_id', geometryShape._leaflet_id);
|
||||||
|
|||||||
@ -28,6 +28,12 @@ var proximityMap = L.map("proximityMap", {
|
|||||||
|
|
||||||
var proximityDistance = $("#proximityDistance");
|
var proximityDistance = $("#proximityDistance");
|
||||||
|
|
||||||
|
var serverUrl = "/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/get_alerts.jag?executionPlanType=Proximity&deviceId=" + deviceId;
|
||||||
|
$.get(serverUrl, null, function (response) {
|
||||||
|
proximityDistance.val(response.proximityDistance);
|
||||||
|
$("#proximityTime").val(response.proximityTime);
|
||||||
|
});
|
||||||
|
|
||||||
L.grid({
|
L.grid({
|
||||||
redraw: 'move'
|
redraw: 'move'
|
||||||
}).addTo(proximityMap);
|
}).addTo(proximityMap);
|
||||||
|
|||||||
@ -595,7 +595,7 @@ function createExecutionPlanName(queryName, id, deviceId) {
|
|||||||
return 'Geo-ExecutionPlan-Within' + (queryName ? '_' + queryName : '') + "---" + (deviceId ? '_' + deviceId : '') + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
|
return 'Geo-ExecutionPlan-Within' + (queryName ? '_' + queryName : '') + "---" + (deviceId ? '_' + deviceId : '') + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
|
||||||
}
|
}
|
||||||
else if (id == "Stationery") {
|
else if (id == "Stationery") {
|
||||||
return 'Geo-ExecutionPlan-Stationery' + (queryName ? '_' + queryName : '') + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
|
return 'Geo-ExecutionPlan-Stationery' + (queryName ? '_' + queryName : '') + "---" + (deviceId ? '_' + deviceId : '') + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
|
||||||
}
|
}
|
||||||
else if (id == "Traffic") {
|
else if (id == "Traffic") {
|
||||||
return 'Geo-ExecutionPlan-Traffic' + (queryName ? '_' + queryName : '') + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
|
return 'Geo-ExecutionPlan-Traffic' + (queryName ? '_' + queryName : '') + '_alert'; // TODO: value of the `queryName` can't be empty, because it will cause name conflicts in CEP, have to do validation(check not empty String)
|
||||||
|
|||||||
@ -0,0 +1,27 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function setSpeed() {
|
||||||
|
var serverUrl = "/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/get_alerts.jag?executionPlanType=Speed&deviceId=" + deviceId;
|
||||||
|
$.get(serverUrl, null, function (response) {
|
||||||
|
if (response) {
|
||||||
|
$("#speedAlertValue").val(response.speedLimit);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
setSpeed();
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function initStationaryAlert() {
|
||||||
|
var serverUrl = "/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/get_alerts.jag?executionPlanType=Stationery&deviceId=" + deviceId;
|
||||||
|
$(".removeGeoFence").tooltip();
|
||||||
|
$.get(serverUrl, null, function (response) {
|
||||||
|
if (response) {
|
||||||
|
$(".fence-not-exist").hide();
|
||||||
|
for (var index in response) {
|
||||||
|
var alert = response[index];
|
||||||
|
$("#stationary-alert-table > tbody").append(
|
||||||
|
"<tr class='viewGeoFenceRow'style='cursor: pointer' data-stationeryTime='" + alert.stationeryTime +
|
||||||
|
"'data-fluctuationRadius='" + alert.fluctuationRadius + "'data-areaName='" + alert.areaName +
|
||||||
|
"'data-queryName='" + alert.queryName + "'data-geoJson=" + alert.geoJson + ">" +
|
||||||
|
"<td>" + alert.areaName + "</td><td>" + alert.stationeryTime + "</td><td>" + alert.fluctuationRadius +
|
||||||
|
"<td>" + alert.queryName + "</td><td>" + alert.createdTime + "</td><td" +
|
||||||
|
" onClick=removeGeoFence(this.parentElement,'Stationery') data-toggle=" +
|
||||||
|
" 'tooltip' title='Remove fence' ><i class='fa fa-trash-o'></i></td></tr>")
|
||||||
|
}
|
||||||
|
} else{
|
||||||
|
$(".fence-not-exist").show();
|
||||||
|
}
|
||||||
|
$('.viewGeoFenceRow td:not(:last-child)').click(function () {
|
||||||
|
viewFence(this.parentElement,'Stationery');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
initStationaryAlert();
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
|
||||||
|
*
|
||||||
|
* WSO2 Inc. licenses this file to you under the Apache License,
|
||||||
|
* Version 2.0 (the "License"); you may not use this file except
|
||||||
|
* in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing,
|
||||||
|
* software distributed under the License is distributed on an
|
||||||
|
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||||
|
* KIND, either express or implied. See the License for the
|
||||||
|
* specific language governing permissions and limitations
|
||||||
|
* under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
function initializeWithin() {
|
||||||
|
$(".removeGeoFence").tooltip();
|
||||||
|
var serverUrl = "/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/get_alerts.jag?executionPlanType=Within&deviceId=" + deviceId;
|
||||||
|
$.get(serverUrl, null, function (response) {
|
||||||
|
if (response) {
|
||||||
|
$(".fence-not-exist").hide();
|
||||||
|
for (var index in response) {
|
||||||
|
var alert = response[index];
|
||||||
|
$("#within-alert > tbody").append(
|
||||||
|
"<tr class='viewGeoFenceRow' style='cursor: pointer' data-areaName='" + alert.areaName +
|
||||||
|
"' data-queryName='" + alert.queryName + "'data-geoJson="+ alert.geoJson +"><td>" + alert.areaName + "</td>" +
|
||||||
|
"<td>" + alert.queryName + "</td><td>" + alert.createdTime + "</td>" +
|
||||||
|
"<td onClick=removeGeoFence(this.parentElement,'WithIn') class='removeGeoFence'" +
|
||||||
|
" data-toggle='tooltip' title='Remove fence' ><i class='fa fa-trash-o'></i></td></tr>");
|
||||||
|
}
|
||||||
|
} else{
|
||||||
|
$(".fence-not-exist").show();
|
||||||
|
}
|
||||||
|
$('.viewGeoFenceRow td:not(:last-child)').click(function () {
|
||||||
|
viewFence(this.parentElement,'WithIn');
|
||||||
|
});
|
||||||
|
|
||||||
|
});
|
||||||
|
}
|
||||||
|
initializeWithin();
|
||||||
@ -29,6 +29,7 @@ var waitTime = 1000;
|
|||||||
var webSocketURL, alertWebSocketURL, trafficStreamWebSocketURL;
|
var webSocketURL, alertWebSocketURL, trafficStreamWebSocketURL;
|
||||||
var deviceId;
|
var deviceId;
|
||||||
var deviceType;
|
var deviceType;
|
||||||
|
var isBatchModeOn = false;
|
||||||
|
|
||||||
function processPointMessage(geoJsonFeature) {
|
function processPointMessage(geoJsonFeature) {
|
||||||
if (geoJsonFeature.id in currentSpatialObjects) {
|
if (geoJsonFeature.id in currentSpatialObjects) {
|
||||||
@ -72,6 +73,10 @@ function SpatialObject(json) {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function popupDateRange() {
|
||||||
|
$('#dateRangePopup').attr('title', 'Device ID - ' + deviceId + " Device Type - " + deviceType).dialog();
|
||||||
|
}
|
||||||
|
|
||||||
SpatialObject.prototype.update = function (geoJSON) {
|
SpatialObject.prototype.update = function (geoJSON) {
|
||||||
this.latitude = geoJSON.geometry.coordinates[1];
|
this.latitude = geoJSON.geometry.coordinates[1];
|
||||||
this.longitude = geoJSON.geometry.coordinates[0];
|
this.longitude = geoJSON.geometry.coordinates[0];
|
||||||
@ -161,8 +166,18 @@ function angleToHeading(angle) {
|
|||||||
SpatialObject.prototype.removeFromMap = function () {
|
SpatialObject.prototype.removeFromMap = function () {
|
||||||
this.removePath();
|
this.removePath();
|
||||||
this.marker.closePopup();
|
this.marker.closePopup();
|
||||||
|
map.removeLayer(this.marker);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function clearMap() {
|
||||||
|
for (var spacialObject in currentSpatialObjects) {
|
||||||
|
console.log(spacialObject);
|
||||||
|
currentSpatialObjects[spacialObject].removePath();
|
||||||
|
currentSpatialObjects[spacialObject].removeFromMap();
|
||||||
|
}
|
||||||
|
currentSpatialObjects = {};
|
||||||
|
}
|
||||||
|
|
||||||
SpatialObject.prototype.createLineStringFeature = function (state, information, coordinates) {
|
SpatialObject.prototype.createLineStringFeature = function (state, information, coordinates) {
|
||||||
return {
|
return {
|
||||||
"type": "Feature",
|
"type": "Feature",
|
||||||
@ -269,7 +284,6 @@ function processTrafficMessage(json) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function processAlertMessage(json) {
|
function processAlertMessage(json) {
|
||||||
//console.log(json);
|
|
||||||
if (json.state != "NORMAL" && json.state != "MINIMAL") {
|
if (json.state != "NORMAL" && json.state != "MINIMAL") {
|
||||||
console.log(json);
|
console.log(json);
|
||||||
notifyAlert("Object ID: <span style='color: blue;cursor: pointer' onclick='focusOnSpatialObject(" + json.id + ")'>" + json.id + "</span> change state to: <span style='color: red'>" + json.state + "</span> Info : " + json.information);
|
notifyAlert("Object ID: <span style='color: blue;cursor: pointer' onclick='focusOnSpatialObject(" + json.id + ")'>" + json.id + "</span> change state to: <span style='color: red'>" + json.state + "</span> Info : " + json.information);
|
||||||
@ -553,11 +567,13 @@ var webSocketOnAlertOpen = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var webSocketOnAlertMessage = function processMessage(message) {
|
var webSocketOnAlertMessage = function processMessage(message) {
|
||||||
var json = $.parseJSON(message.data);
|
if (!isBatchModeOn) {
|
||||||
if (json.messageType == "Alert") {
|
var json = $.parseJSON(message.data);
|
||||||
processAlertMessage(json);
|
if (json.messageType == "Alert") {
|
||||||
} else {
|
processAlertMessage(json);
|
||||||
console.log("Message type not supported.");
|
} else {
|
||||||
|
console.log("Message type not supported.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -595,18 +611,19 @@ var webSocketOnOpen = function () {
|
|||||||
};
|
};
|
||||||
|
|
||||||
var webSocketOnMessage = function (message) {
|
var webSocketOnMessage = function (message) {
|
||||||
var json = $.parseJSON(message.data);
|
if (!isBatchModeOn) {
|
||||||
if (json.messageType == "Point") {
|
var json = $.parseJSON(message.data);
|
||||||
processPointMessage(json);
|
if (json.messageType == "Point") {
|
||||||
} else if (json.messageType == "Prediction") {
|
processPointMessage(json);
|
||||||
//processPredictionMessage(json);
|
} else if (json.messageType == "Prediction") {
|
||||||
} else {
|
//processPredictionMessage(json);
|
||||||
console.log("Message type not supported.");
|
} else {
|
||||||
|
console.log("Message type not supported.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
var webSocketOnClose = function (e) {
|
var webSocketOnClose = function (e) {
|
||||||
|
|
||||||
if (websocket.get_opened()) {
|
if (websocket.get_opened()) {
|
||||||
$.UIkit.notify({
|
$.UIkit.notify({
|
||||||
message: 'Connection lost with server!!',
|
message: 'Connection lost with server!!',
|
||||||
@ -669,7 +686,7 @@ function initializeOnAlertWebSocket() {
|
|||||||
|
|
||||||
function intializeWebsocketUrls() {
|
function intializeWebsocketUrls() {
|
||||||
var username;
|
var username;
|
||||||
wso2.gadgets.state.getGlobalState(function(state) {
|
wso2.gadgets.state.getGlobalState(function (state) {
|
||||||
deviceId = state.device.id;
|
deviceId = state.device.id;
|
||||||
deviceType = state.device.type;
|
deviceType = state.device.type;
|
||||||
if (deviceId && deviceType) {
|
if (deviceId && deviceType) {
|
||||||
@ -688,7 +705,8 @@ function intializeWebsocketUrls() {
|
|||||||
ApplicationOptions.constance.PATH_SEPARATOR + ApplicationOptions.constance
|
ApplicationOptions.constance.PATH_SEPARATOR + ApplicationOptions.constance
|
||||||
.CEP_ON_ALERT_WEB_SOCKET_OUTPUT_ADAPTOR_NAME + ApplicationOptions.constance.PATH_SEPARATOR + ApplicationOptions.constance.VERSION
|
.CEP_ON_ALERT_WEB_SOCKET_OUTPUT_ADAPTOR_NAME + ApplicationOptions.constance.PATH_SEPARATOR + ApplicationOptions.constance.VERSION
|
||||||
+ "?deviceId=" + deviceId + "&deviceType=" + deviceType;
|
+ "?deviceId=" + deviceId + "&deviceType=" + deviceType;
|
||||||
document.cookie = "websocket-token=f98d6142-e988-3c7f-a8c9-7e6d74da7113; path=/";
|
document.cookie = "websocket-token=619e6170-10e8-31f0-904b-b7770d53e545; path=/";
|
||||||
|
$("#proximity_alert").hide();
|
||||||
initializeWebSocket();
|
initializeWebSocket();
|
||||||
initializeOnAlertWebSocket();
|
initializeOnAlertWebSocket();
|
||||||
});
|
});
|
||||||
@ -705,7 +723,6 @@ function intializeWebsocketUrls() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
intializeWebsocketUrls();
|
intializeWebsocketUrls();
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@ -0,0 +1,4 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<artifact name="Geo-EventSink-FusedStream" version="1.0.0" type="analytics/eventstore" serverRole="GeoDashboard">
|
||||||
|
<file>org_wso2_geo_FusedSpatialEvent.xml</file>
|
||||||
|
</artifact>
|
||||||
@ -0,0 +1,90 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<EventStoreConfiguration>
|
||||||
|
<TableSchema>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>id</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>true</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>STRING</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>latitude</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>DOUBLE</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>longitude</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>DOUBLE</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>timeStamp</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>true</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>LONG</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>type</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>true</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>STRING</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>speed</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>FLOAT</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>heading</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>FLOAT</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>state</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>true</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>STRING</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>information</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>true</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>STRING</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>notify</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>true</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>BOOLEAN</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
</TableSchema>
|
||||||
|
<Source>
|
||||||
|
<StreamId>org.wso2.geo.FusedSpatialEvent:1.0.0</StreamId>
|
||||||
|
</Source>
|
||||||
|
<MergeSchema>false</MergeSchema>
|
||||||
|
<RecordStoreName>EVENT_STORE</RecordStoreName>
|
||||||
|
</EventStoreConfiguration>
|
||||||
@ -9,7 +9,7 @@
|
|||||||
"type": "Feature",
|
"type": "Feature",
|
||||||
"id": {{id}},
|
"id": {{id}},
|
||||||
"deviceId": {{id}},
|
"deviceId": {{id}},
|
||||||
"deviceType" : "{{type}}",
|
"deviceType" : {{type}},
|
||||||
"state": {{state}},
|
"state": {{state}},
|
||||||
"information": {{information}},
|
"information": {{information}},
|
||||||
"longitude" : {{longitude}},
|
"longitude" : {{longitude}},
|
||||||
|
|||||||
@ -27,6 +27,7 @@
|
|||||||
<dependency artifact="ThemeGeoDashboard" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
<dependency artifact="ThemeGeoDashboard" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
||||||
<!-- CEP Artifacts -->
|
<!-- CEP Artifacts -->
|
||||||
<dependency artifact="Geo-Dashboard-Http-Receiver" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
<dependency artifact="Geo-Dashboard-Http-Receiver" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
||||||
|
<dependency artifact="Geo-EventSink-FusedStream" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
||||||
<dependency artifact="Geo-ExecutionPlan-EventsFusionGenerateNotifications" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
<dependency artifact="Geo-ExecutionPlan-EventsFusionGenerateNotifications" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
||||||
<dependency artifact="Geo-ExecutionPlan-InputStandardizer" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
<dependency artifact="Geo-ExecutionPlan-InputStandardizer" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
||||||
<dependency artifact="Geo-ExecutionPlan-Pass_through" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
<dependency artifact="Geo-ExecutionPlan-Pass_through" version="1.0.0" include="true" serverRole="GeoDashboard"/>
|
||||||
|
|||||||
@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
package org.wso2.carbon.iot.android.sense.event.streams.data;
|
package org.wso2.carbon.iot.android.sense.event.streams.data;
|
||||||
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
public class NetworkData {
|
public class NetworkData {
|
||||||
|
|
||||||
//Mobile or Wifi
|
//Mobile or Wifi
|
||||||
|
|||||||
@ -33,7 +33,6 @@ public class SmsDataReceiver extends BroadcastReceiver {
|
|||||||
final Bundle bundle = intent.getExtras();
|
final Bundle bundle = intent.getExtras();
|
||||||
|
|
||||||
if (bundle != null) {
|
if (bundle != null) {
|
||||||
|
|
||||||
final Object[] pdusObj = (Object[]) bundle.get("pdus");
|
final Object[] pdusObj = (Object[]) bundle.get("pdus");
|
||||||
|
|
||||||
for (int i = 0; i < pdusObj.length; i++) {
|
for (int i = 0; i < pdusObj.length; i++) {
|
||||||
|
|||||||
@ -148,6 +148,7 @@ public class SenseDataReceiverManager {
|
|||||||
smsDataReceiver = new SmsDataReceiver();
|
smsDataReceiver = new SmsDataReceiver();
|
||||||
IntentFilter intentFilter = new IntentFilter();
|
IntentFilter intentFilter = new IntentFilter();
|
||||||
intentFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
|
intentFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
|
||||||
|
intentFilter.addAction(Telephony.Sms.Intents.SMS_DELIVER_ACTION);
|
||||||
context.registerReceiver(smsDataReceiver, intentFilter);
|
context.registerReceiver(smsDataReceiver, intentFilter);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
/* Enter a unique ExecutionPlan */
|
/* Enter a unique ExecutionPlan */
|
||||||
@Plan:name('Andriod-Audio-Filter-ExecutionPlan')
|
@Plan:name('Android-Audio-Filter-ExecutionPlan')
|
||||||
|
|
||||||
/* Enter a unique description for ExecutionPlan */
|
/* Enter a unique description for ExecutionPlan */
|
||||||
@Plan:description('This converts the true/false params of the orgininal stream into ON/OFF')
|
@Plan:description('This converts the true/false params of the orgininal stream into ON/OFF')
|
||||||
@ -9,7 +9,7 @@
|
|||||||
@Import('org.wso2.iot.android.audio:1.0.0')
|
@Import('org.wso2.iot.android.audio:1.0.0')
|
||||||
define stream AudioStream (meta_owner string, meta_deviceId string, meta_timestamp long, audio_playing bool, headset_on bool, music_volume int);
|
define stream AudioStream (meta_owner string, meta_deviceId string, meta_timestamp long, audio_playing bool, headset_on bool, music_volume int);
|
||||||
|
|
||||||
@Export('org.wso2.iot.andriod.filtered.audio:1.0.0')
|
@Export('org.wso2.iot.android.filtered.audio:1.0.0')
|
||||||
define stream FilteredAudioStream (meta_owner string, meta_deviceId string, meta_timestamp long, audio string, headset string, music_volume int);
|
define stream FilteredAudioStream (meta_owner string, meta_deviceId string, meta_timestamp long, audio string, headset string, music_volume int);
|
||||||
|
|
||||||
from AudioStream select meta_owner, meta_deviceId, meta_timestamp, ifThenElse(audio_playing, 'ON', 'OFF') as audio,
|
from AudioStream select meta_owner, meta_deviceId, meta_timestamp, ifThenElse(audio_playing, 'ON', 'OFF') as audio,
|
||||||
@ -17,7 +17,8 @@
|
|||||||
~ under the License.
|
~ under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_andriod_audio_filter_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
<artifact name= "android_android_audio_filter_executionplan" version="1.0.0" type="event/execution-plan"
|
||||||
<file>Andriod-Audio-Filter-ExecutionPlan.siddhiql</file>
|
serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-Audio-Filter-ExecutionPlan.siddhiql</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Analytics>
|
<Analytics>
|
||||||
<Editable>true</Editable>
|
<Editable>true</Editable>
|
||||||
<Name>AndriodCallScript</Name>
|
<Name>AndroidBatteryScript</Name>
|
||||||
<Script> CREATE TEMPORARY TABLE AndroidBatteryData USING CarbonAnalytics OPTIONS(tableName
|
<Script> CREATE TEMPORARY TABLE AndroidBatteryData USING CarbonAnalytics OPTIONS(tableName
|
||||||
"ORG_WSO2_IOT_ANDROID_BATTERY_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_BATTERY_STATS, DAY");
|
"ORG_WSO2_IOT_ANDROID_BATTERY_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_BATTERY_STATS, DAY");
|
||||||
|
|
||||||
@ -11,7 +11,7 @@
|
|||||||
timestamp STRING", primaryKeys "year, month, day, deviceId, owner, type", mergeSchema "false");
|
timestamp STRING", primaryKeys "year, month, day, deviceId, owner, type", mergeSchema "false");
|
||||||
|
|
||||||
INSERT INTO TABLE Android_Battery_Stat_Per_Day
|
INSERT INTO TABLE Android_Battery_Stat_Per_Day
|
||||||
SELECT meta_owner as owner, meta_deviceId as deviceId, type, avg(level) as level, year, month, day,
|
SELECT meta_owner as owner, meta_deviceId as deviceId, type, sum(level) as level, year, month, day,
|
||||||
getDateStartingTime(year, month, day) as timestamp
|
getDateStartingTime(year, month, day) as timestamp
|
||||||
FROM AndroidBatteryData
|
FROM AndroidBatteryData
|
||||||
GROUP BY year, month, day, meta_deviceId, meta_owner, type ORDER BY timestamp DESC;
|
GROUP BY year, month, day, meta_deviceId, meta_owner, type ORDER BY timestamp DESC;
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Analytics>
|
<Analytics>
|
||||||
<Editable>true</Editable>
|
<Editable>true</Editable>
|
||||||
<Name>AndriodCallScript</Name>
|
<Name>AndroidCallScript</Name>
|
||||||
<Script> CREATE TEMPORARY TABLE AndroidCallData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_CALL_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_CALL_STATS, DAY");
|
<Script> CREATE TEMPORARY TABLE AndroidCallData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_CALL_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_CALL_STATS, DAY");
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE Android_Call_Stat_Per_Day USING CarbonAnalytics
|
CREATE TEMPORARY TABLE Android_Call_Stat_Per_Day USING CarbonAnalytics
|
||||||
@ -18,6 +18,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_call_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
<artifact name= "android_call_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
<file>AndriodCallScript.xml</file>
|
<file>AndroidCallScript.xml</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Analytics>
|
<Analytics>
|
||||||
<Editable>true</Editable>
|
<Editable>true</Editable>
|
||||||
<Name>AndriodDataScript</Name>
|
<Name>AndroidDataScript</Name>
|
||||||
<Script> CREATE TEMPORARY TABLE AndroidDataData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_DATA_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_DATA_STATS, DAY");
|
<Script> CREATE TEMPORARY TABLE AndroidDataData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_DATA_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_DATA_STATS, DAY");
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE Android_Data_Stat_Per_Day USING CarbonAnalytics
|
CREATE TEMPORARY TABLE Android_Data_Stat_Per_Day USING CarbonAnalytics
|
||||||
@ -18,6 +18,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_data_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
<artifact name= "android_data_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
<file>AndriodDataScript.xml</file>
|
<file>AndroidDataScript.xml</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
|
|||||||
@ -10,6 +10,6 @@
|
|||||||
"limit": "1",
|
"limit": "1",
|
||||||
"provider-name": "batch",
|
"provider-name": "batch",
|
||||||
"query": "meta_username: \"admin\" AND id: \"123456\"",
|
"query": "meta_username: \"admin\" AND id: \"123456\"",
|
||||||
"tableName": "ORG_WSO2_IOT_ANDRIOD_DEVICE_DETAILS"
|
"tableName": "ORG_WSO2_IOT_ANDROID_DEVICE_DETAILS"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -93,8 +93,8 @@ $(function () {
|
|||||||
if (deviceDetails.hasOwnProperty('meta_username')){
|
if (deviceDetails.hasOwnProperty('meta_username')){
|
||||||
deviceDetailsTable += getDeviceDetailTableEntry('Owner:', deviceDetails.meta_username)
|
deviceDetailsTable += getDeviceDetailTableEntry('Owner:', deviceDetails.meta_username)
|
||||||
}
|
}
|
||||||
if (deviceDetails.hasOwnProperty('andriod_version')){
|
if (deviceDetails.hasOwnProperty('android_version')){
|
||||||
deviceDetailsTable += getDeviceDetailTableEntry('Andriod Version:', deviceDetails.andriod_version)
|
deviceDetailsTable += getDeviceDetailTableEntry('Android Version:', deviceDetails.android_version)
|
||||||
}
|
}
|
||||||
if (deviceDetails.hasOwnProperty('memory')){
|
if (deviceDetails.hasOwnProperty('memory')){
|
||||||
deviceDetailsTable += getDeviceDetailTableEntry('Memory:', deviceDetails.memory)
|
deviceDetailsTable += getDeviceDetailTableEntry('Memory:', deviceDetails.memory)
|
||||||
|
|||||||
@ -18,6 +18,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_device_details_event_sink" version="1.0.0" type="analytics/eventstore" serverRole="DataAnalyticsServer">
|
<artifact name= "android_device_details_event_sink" version="1.0.0" type="analytics/eventstore" serverRole="DataAnalyticsServer">
|
||||||
<file>org_wso2_iot_andriod_device_details.xml</file>
|
<file>org_wso2_iot_android_device_details.xml</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
|
|||||||
@ -10,7 +10,7 @@
|
|||||||
<Type>STRING</Type>
|
<Type>STRING</Type>
|
||||||
</ColumnDefinition>
|
</ColumnDefinition>
|
||||||
<ColumnDefinition>
|
<ColumnDefinition>
|
||||||
<Name>andriod_version</Name>
|
<Name>android_version</Name>
|
||||||
<IsFacet>false</IsFacet>
|
<IsFacet>false</IsFacet>
|
||||||
<EnableIndexing>false</EnableIndexing>
|
<EnableIndexing>false</EnableIndexing>
|
||||||
<IsPrimaryKey>false</IsPrimaryKey>
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
@ -83,7 +83,7 @@
|
|||||||
</ColumnDefinition>
|
</ColumnDefinition>
|
||||||
</TableSchema>
|
</TableSchema>
|
||||||
<Source>
|
<Source>
|
||||||
<StreamId>org.wso2.iot.andriod.device.details:1.0.0</StreamId>
|
<StreamId>org.wso2.iot.android.device.details:1.0.0</StreamId>
|
||||||
</Source>
|
</Source>
|
||||||
<MergeSchema>false</MergeSchema>
|
<MergeSchema>false</MergeSchema>
|
||||||
<RecordStoreName>EVENT_STORE</RecordStoreName>
|
<RecordStoreName>EVENT_STORE</RecordStoreName>
|
||||||
@ -18,6 +18,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_device_details_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
<artifact name= "android_device_details_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
||||||
<file>org.wso2.iot.andriod.device.details_1.0.0.json</file>
|
<file>org.wso2.iot.android.device.details_1.0.0.json</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
|
|||||||
@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "org.wso2.iot.andriod.device.details",
|
"name": "org.wso2.iot.android.device.details",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"nickName": "",
|
"nickName": "",
|
||||||
"description": "Details of the Andriod Device",
|
"description": "Details of the Android Device",
|
||||||
"metaData": [
|
"metaData": [
|
||||||
{
|
{
|
||||||
"name": "username",
|
"name": "username",
|
||||||
@ -11,7 +11,7 @@
|
|||||||
],
|
],
|
||||||
"payloadData": [
|
"payloadData": [
|
||||||
{
|
{
|
||||||
"name": "andriod_version",
|
"name": "android_version",
|
||||||
"type": "STRING"
|
"type": "STRING"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@ -18,6 +18,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name="android_filtered_audio_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
<artifact name="android_filtered_audio_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
||||||
<file>org.wso2.iot.andriod.filtered.audio_1.0.0.json</file>
|
<file>org.wso2.iot.android.filtered.audio_1.0.0.json</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
|
|||||||
@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"name": "org.wso2.iot.andriod.filtered.audio",
|
"name": "org.wso2.iot.android.filtered.audio",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"nickName": "",
|
"nickName": "",
|
||||||
"description": "",
|
"description": "",
|
||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<eventPublisher name="org.wso2.iot.android.filtered.audio.ui.publisher"
|
<eventPublisher name="org.wso2.iot.android.filtered.audio.ui.publisher"
|
||||||
processing="enable" statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
|
processing="enable" statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
|
||||||
<from streamName="org.wso2.iot.andriod.filtered.audio" version="1.0.0"/>
|
<from streamName="org.wso2.iot.android.filtered.audio" version="1.0.0"/>
|
||||||
<mapping customMapping="disable" type="wso2event"/>
|
<mapping customMapping="disable" type="wso2event"/>
|
||||||
<to eventAdapterType="ui"/>
|
<to eventAdapterType="ui"/>
|
||||||
</eventPublisher>
|
</eventPublisher>
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Analytics>
|
<Analytics>
|
||||||
<Editable>true</Editable>
|
<Editable>true</Editable>
|
||||||
<Name>AndriodFrequentContactsScript</Name>
|
<Name>AndroidFrequentContactsScript</Name>
|
||||||
<Script> CREATE TEMPORARY TABLE AndroidFrequentCallData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_CALL_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_CALL_STATS, DAY");
|
<Script> CREATE TEMPORARY TABLE AndroidFrequentCallData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_CALL_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_CALL_STATS, DAY");
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE AndroidFrequentSmsData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SMS_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SMS_STATS, DAY");
|
CREATE TEMPORARY TABLE AndroidFrequentSmsData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SMS_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SMS_STATS, DAY");
|
||||||
@ -18,6 +18,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_frequentcontacts_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
<artifact name= "android_frequentcontacts_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
<file>AndriodFrequentContactsScript.xml</file>
|
<file>AndroidFrequentContactsScript.xml</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Analytics>
|
<Analytics>
|
||||||
<Editable>true</Editable>
|
<Editable>true</Editable>
|
||||||
<Name>Android_Sense_Script</Name>
|
<Name>HeadsetScript</Name>
|
||||||
<Script>CREATE TEMPORARY TABLE AndroidHeadsetData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_HEADSET_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_HEADSET_STATS, DAY");
|
<Script>CREATE TEMPORARY TABLE AndroidHeadsetData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_HEADSET_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_HEADSET_STATS, DAY");
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE Android_Headset_Stat_Per_Day USING CarbonAnalytics
|
CREATE TEMPORARY TABLE Android_Headset_Stat_Per_Day USING CarbonAnalytics
|
||||||
@ -17,7 +17,7 @@
|
|||||||
~ under the License.
|
~ under the License.
|
||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_sense_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
<artifact name= "android_headset_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
<file>Android_Sense_Script.xml</file>
|
<file>HeadsetScript.xml</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"provider-conf": {
|
"provider-conf": {
|
||||||
"streamName": "org.wso2.iot.andriod.filtered.audio:1.0.0",
|
"streamName": "org.wso2.iot.android.filtered.audio:1.0.0",
|
||||||
"provider-name": "realtime"
|
"provider-name": "realtime"
|
||||||
},
|
},
|
||||||
"chart-conf": {
|
"chart-conf": {
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Analytics>
|
<Analytics>
|
||||||
<Editable>true</Editable>
|
<Editable>true</Editable>
|
||||||
<Name>AndriodScreenScript</Name>
|
<Name>AndroidScreenScript</Name>
|
||||||
<Script> CREATE TEMPORARY TABLE AndroidScreenData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SCREEN_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SCREEN_STATS, DAY");
|
<Script> CREATE TEMPORARY TABLE AndroidScreenData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SCREEN_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SCREEN_STATS, DAY");
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE Android_Screen_Stat_Per_Day USING CarbonAnalytics
|
CREATE TEMPORARY TABLE Android_Screen_Stat_Per_Day USING CarbonAnalytics
|
||||||
@ -18,6 +18,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_screen_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
<artifact name= "android_screen_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
<file>AndriodScreenScript.xml</file>
|
<file>AndroidScreenScript.xml</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
|
|||||||
@ -1,7 +1,7 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
<Analytics>
|
<Analytics>
|
||||||
<Editable>true</Editable>
|
<Editable>true</Editable>
|
||||||
<Name>AndriodSmsScript</Name>
|
<Name>AndroidSmsScript</Name>
|
||||||
<Script> CREATE TEMPORARY TABLE AndroidSmsData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SMS_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SMS_STATS, DAY");
|
<Script> CREATE TEMPORARY TABLE AndroidSmsData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SMS_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SMS_STATS, DAY");
|
||||||
|
|
||||||
CREATE TEMPORARY TABLE Android_Sms_Stat_Per_Day USING CarbonAnalytics
|
CREATE TEMPORARY TABLE Android_Sms_Stat_Per_Day USING CarbonAnalytics
|
||||||
@ -15,5 +15,7 @@
|
|||||||
FROM AndroidSmsData
|
FROM AndroidSmsData
|
||||||
GROUP BY year, month, day, meta_deviceId, meta_owner, type ORDER BY timestamp DESC;
|
GROUP BY year, month, day, meta_deviceId, meta_owner, type ORDER BY timestamp DESC;
|
||||||
|
|
||||||
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_SMS_STATS; </Script>
|
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_SMS_STATS;
|
||||||
|
</Script>
|
||||||
|
<CronExpression>0 0/5 * * * ?</CronExpression>
|
||||||
</Analytics>
|
</Analytics>
|
||||||
@ -18,6 +18,6 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifact name= "android_sms_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
<artifact name= "android_sms_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
<file>AndriodSmsScript.xml</file>
|
<file>AndroidSmsScript.xml</file>
|
||||||
</artifact>
|
</artifact>
|
||||||
|
|
||||||
|
|||||||
@ -18,7 +18,7 @@
|
|||||||
-->
|
-->
|
||||||
|
|
||||||
<artifacts>
|
<artifacts>
|
||||||
<artifact name="android_analytics" version="1.0.0" type="carbon/application">
|
<artifact name="androidsense" version="1.0.0" type="carbon/application">
|
||||||
<dependency artifact="android_active_stack_chart_gadget" version="1.0.0" include="true"
|
<dependency artifact="android_active_stack_chart_gadget" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_active_time_chart_gadget" version="1.0.0" include="true"
|
<dependency artifact="android_active_time_chart_gadget" version="1.0.0" include="true"
|
||||||
@ -32,7 +32,7 @@
|
|||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_activity_streams" version="1.0.0" include="true"
|
<dependency artifact="android_activity_streams" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_andriod_audio_filter_executionplan" version="1.0.0" include="true"
|
<dependency artifact="android_android_audio_filter_executionplan" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_android_activity_executionplan" version="1.0.0" include="true"
|
<dependency artifact="android_android_activity_executionplan" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
@ -54,22 +54,20 @@
|
|||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_audio_script" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
<dependency artifact="android_audio_script" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_audio_streams" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
<dependency artifact="android_audio_streams" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_battery_level_chart_gadget" version="1.0.0" include="true"
|
|
||||||
serverRole="DataAnalyticsServer"/>
|
|
||||||
<dependency artifact="android_battery_history_chart_gadget" version="1.0.0" include="true"
|
<dependency artifact="android_battery_history_chart_gadget" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_battery_percentage_chart_gadget" version="1.0.0" include="true"
|
<dependency artifact="android_battery_percentage_chart_gadget" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_battery_script" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
<!--<dependency artifact="android_battery_script" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>-->
|
||||||
<dependency artifact="android_battery_stats_event_sink" version="1.0.0" include="true"
|
<dependency artifact="android_battery_stats_event_sink" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_battery_stats_streams" version="1.0.0" include="true"
|
<dependency artifact="android_battery_stats_streams" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_battery_streams" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
|
||||||
<dependency artifact="android_battery_ui_event_publisher" version="1.0.0" include="true"
|
|
||||||
serverRole="DataAnalyticsServer"/>
|
|
||||||
<dependency artifact="android_battery_stats_ui_event_publisher" version="1.0.0" include="true"
|
<dependency artifact="android_battery_stats_ui_event_publisher" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
|
<dependency artifact="android_battery_ui_event_publisher" version="1.0.0" include="true"
|
||||||
|
serverRole="DataAnalyticsServer"/>
|
||||||
|
<dependency artifact="android_battery_streams" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_call_script" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
<dependency artifact="android_call_script" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_call_stats_event_sink" version="1.0.0" include="true"
|
<dependency artifact="android_call_stats_event_sink" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
@ -162,7 +160,7 @@
|
|||||||
<dependency artifact="android_screen_ui_event_publisher" version="1.0.0" include="true"
|
<dependency artifact="android_screen_ui_event_publisher" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_sense_dashboard" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
<dependency artifact="android_sense_dashboard" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_sense_script" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
<dependency artifact="android_headset_script" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_sense_streams" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
<dependency artifact="android_sense_streams" version="1.0.0" include="true" serverRole="DataAnalyticsServer"/>
|
||||||
<dependency artifact="android_sms_chart_gadget" version="1.0.0" include="true"
|
<dependency artifact="android_sms_chart_gadget" version="1.0.0" include="true"
|
||||||
serverRole="DataAnalyticsServer"/>
|
serverRole="DataAnalyticsServer"/>
|
||||||
|
|||||||
@ -147,15 +147,15 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">01</span>
|
<span class="badge">01</span>
|
||||||
Connect Android device to network.
|
Connect Android device to network.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">02</span>
|
<span class="badge">02</span>
|
||||||
Start Android Sense app in your device.
|
Start Android Sense app in your device.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">03</span>
|
<span class="badge">03</span>
|
||||||
Fill login form with the credentials.
|
Fill login form with the credentials.
|
||||||
<i>(Use server URL as [ https://<WSO2_IoT_SERVER_HOST>:<
|
<i>(Use server URL as [ https://<WSO2_IoT_SERVER_HOST>:<
|
||||||
HTTPS_SERVER_PORT> ] and click on
|
HTTPS_SERVER_PORT> ] and click on
|
||||||
@ -169,7 +169,7 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">04</span>
|
<span class="badge">04</span>
|
||||||
Once the device is enrolled, click on <strong>[+]</strong> button to
|
Once the device is enrolled, click on <strong>[+]</strong> button to
|
||||||
select the sensors.
|
select the sensors.
|
||||||
<a href="{{@unit.publicUri}}/images/selectSensorView.png" target="_blank"
|
<a href="{{@unit.publicUri}}/images/selectSensorView.png" target="_blank"
|
||||||
@ -178,7 +178,7 @@
|
|||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">05</span>
|
<span class="badge">05</span>
|
||||||
Click on <i>[Publish data]</i> button to publish sensor readings to
|
Click on <i>[Publish data]</i> button to publish sensor readings to
|
||||||
IoT server.
|
IoT server.
|
||||||
<a href="{{@unit.publicUri}}/images/publishDataView.png" target="_blank"
|
<a href="{{@unit.publicUri}}/images/publishDataView.png" target="_blank"
|
||||||
@ -190,41 +190,47 @@
|
|||||||
<br>
|
<br>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 padding-double">
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 padding-double">
|
||||||
<h3 class="uppercase">Try Out</h3>
|
<div class="row">
|
||||||
<hr>
|
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 padding-double">
|
||||||
<ul class="list-unstyled">
|
<h3 class="uppercase">Try Out</h3>
|
||||||
<li class="padding-top-double">
|
<hr>
|
||||||
<span class="fw-stack fw-lg margin-right">
|
<ul class="list-unstyled">
|
||||||
|
<li class="padding-top-double">
|
||||||
|
<span class="fw-stack margin-right">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||||
</span>
|
</span>
|
||||||
You can view all your connected devices
|
You can view all your connected devices
|
||||||
<a href="{{@app.context}}/devices">[Device Management]</a> page.
|
<a href="{{@app.context}}/devices">[Device Management]</a> page.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="fw-stack fw-lg margin-right">
|
<span class="fw-stack margin-right">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||||
</span>
|
</span>
|
||||||
You can select any one of your connected devices for available
|
You can select any one of your connected devices for available
|
||||||
operations and Real-Time data monitoring.
|
operations and Real-Time data monitoring.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="fw-stack fw-lg margin-right">
|
<span class="fw-stack margin-right">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||||
</span> For historical analytics of sensor data navigate to device
|
</span> For historical analytics of sensor data navigate to device
|
||||||
analytics page.
|
analytics page.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
<br/>
|
<br/>
|
||||||
<p class="grey margin-top">Click on the image to zoom</p>
|
</div>
|
||||||
<center>
|
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 padding-double">
|
||||||
<a href="{{@unit.publicUri}}/images/myDevices_analytics.png" target="_blank">
|
<p class="grey margin-top">Click on the image to zoom</p>
|
||||||
<img src="{{@unit.publicUri}}/images/myDevices_analytics.png" class="img-responsive">
|
<center>
|
||||||
</a>
|
<a href="{{@unit.publicUri}}/images/myDevices_analytics.png" target="_blank">
|
||||||
</center>
|
<img src="{{@unit.publicUri}}/images/myDevices_analytics.png" class="img-responsive">
|
||||||
|
</a>
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div id="qr-code-modal" data-enrollment-url="{{hostName}}{{@unit.publicUri}}/asset/androidsense.apk" class="hidden">
|
<div id="qr-code-modal" data-enrollment-url="{{hostName}}{{@unit.publicUri}}/asset/androidsense.apk" class="hidden">
|
||||||
|
|||||||
@ -196,11 +196,11 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">01</span>
|
<span class="badge">01</span>
|
||||||
Wifi-Shield mounted onto the Arduino-UNO board
|
Wifi-Shield mounted onto the Arduino-UNO board
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">02</span>
|
<span class="badge">02</span>
|
||||||
Connect LED bulb to arduino as follows
|
Connect LED bulb to arduino as follows
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
<a href="{{@unit.publicUri}}/images/schematicsGuide.png" target="_blank">
|
<a href="{{@unit.publicUri}}/images/schematicsGuide.png" target="_blank">
|
||||||
@ -210,20 +210,20 @@
|
|||||||
</li>
|
</li>
|
||||||
|
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">03</span>
|
<span class="badge">03</span>
|
||||||
Download Arduino-Sketch from [Download Sketch] link above.
|
Download Arduino-Sketch from [Download Sketch] link above.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">04</span>
|
<span class="badge">04</span>
|
||||||
Unzip the downloaded Arduino Agent
|
Unzip the downloaded Arduino Agent
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">05</span>
|
<span class="badge">05</span>
|
||||||
Create a folder called "ArduinoBoardSketch" and move all source files
|
Create a folder called "ArduinoBoardSketch" and move all source files
|
||||||
inside
|
inside
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">06</span>
|
<span class="badge">06</span>
|
||||||
Open ArduinoBoardSketch.h and provide appropriate values for
|
Open ArduinoBoardSketch.h and provide appropriate values for
|
||||||
<i>[WLAN_SSID]</i>,
|
<i>[WLAN_SSID]</i>,
|
||||||
<i>[WLAN_PASS]</i>,
|
<i>[WLAN_PASS]</i>,
|
||||||
@ -233,19 +233,19 @@
|
|||||||
variables according to your network.
|
variables according to your network.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">07</span>
|
<span class="badge">07</span>
|
||||||
Burn the sketch onto your Arduino board and let the program run.
|
Burn the sketch onto your Arduino board and let the program run.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
|
|
||||||
<span class="fw-stack fw-lg margin-right">
|
<span class="fw-stack margin-right">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||||
</span>
|
</span>
|
||||||
Arduino will publish it's internal temperature to WSO2-IoT-Server
|
Arduino will publish it's internal temperature to WSO2-IoT-Server
|
||||||
<br/><br/>
|
<br/><br/>
|
||||||
|
|
||||||
<span class="fw-stack fw-lg margin-right">
|
<span class="fw-stack margin-right">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||||
</span>
|
</span>
|
||||||
@ -256,36 +256,38 @@
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 padding-double">
|
<div class="col-xs-12 col-sm-12 col-md-12 col-lg-12 padding-double">
|
||||||
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 padding-double">
|
<div class="row">
|
||||||
<h3 class="uppercase">Try Out</h3>
|
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 padding-double">
|
||||||
<hr>
|
<h3 class="uppercase">Try Out</h3>
|
||||||
<ul class="list-unstyled">
|
<hr>
|
||||||
<li class="padding-top-double">
|
<ul class="list-unstyled">
|
||||||
<span class="circle">01</span>
|
<li class="padding-top-double">
|
||||||
You can view all your connected devices at
|
<span class="badge">01</span>
|
||||||
<a href="{{@app.context}}/devices">[Device Management]</a> page.
|
You can view all your connected devices at
|
||||||
</li>
|
<a href="{{@app.context}}/devices">[Device Management]</a> page.
|
||||||
<li class="padding-top-double">
|
</li>
|
||||||
<span class="circle">02</span>
|
<li class="padding-top-double">
|
||||||
Select one of connected devices and check for available control
|
<span class="badge">02</span>
|
||||||
operations and monitor Real-Time data.
|
Select one of connected devices and check for available control
|
||||||
</li>
|
operations and monitor Real-Time data.
|
||||||
<li class="padding-top-double">
|
</li>
|
||||||
<span class="circle">03</span>
|
<li class="padding-top-double">
|
||||||
You can also view analytics of the data published to IoT-Server by
|
<span class="badge">03</span>
|
||||||
navigating to Device Analytics page.
|
You can also view analytics of the data published to IoT-Server by
|
||||||
</li>
|
navigating to Device Analytics page.
|
||||||
</ul>
|
</li>
|
||||||
<br/>
|
</ul>
|
||||||
</div>
|
<br/>
|
||||||
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 padding-double">
|
</div>
|
||||||
<p class="grey margin-top">Click on the image to zoom</p>
|
<div class="col-xs-6 col-sm-6 col-md-6 col-lg-6 padding-double">
|
||||||
<center>
|
<p class="grey margin-top">Click on the image to zoom</p>
|
||||||
<a href="{{@unit.publicUri}}/images/myDevices_analytics.png" target="_blank">
|
<center>
|
||||||
<img src="{{@unit.publicUri}}/images/myDevices_analytics.png"
|
<a href="{{@unit.publicUri}}/images/myDevices_analytics.png" target="_blank">
|
||||||
class="img-responsive">
|
<img src="{{@unit.publicUri}}/images/myDevices_analytics.png"
|
||||||
</a>
|
class="img-responsive">
|
||||||
</center>
|
</a>
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|||||||
@ -192,31 +192,31 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">01</span>
|
<span class="badge">01</span>
|
||||||
Connect RaspberryPi, DHT11 Temperature sensor and LED as per the
|
Connect RaspberryPi, DHT11 Temperature sensor and LED as per the
|
||||||
schematic below.
|
schematic below.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">02</span>
|
<span class="badge">02</span>
|
||||||
Ensure your RaspberryPi Board can connect to Internet.
|
Ensure your RaspberryPi Board can connect to Internet.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">03</span>
|
<span class="badge">03</span>
|
||||||
Download RaspberryPi Agent via [Download Agent] button above.
|
Download RaspberryPi Agent via [Download Agent] button above.
|
||||||
(Alternatively you can use the "curl" command to directly download the Agent to your
|
(Alternatively you can use the "curl" command to directly download the Agent to your
|
||||||
RaspberryPi.)
|
RaspberryPi.)
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">04</span>
|
<span class="badge">04</span>
|
||||||
Copy downloaded Agent into your RaspberryPi.
|
Copy downloaded Agent into your RaspberryPi.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">05</span>
|
<span class="badge">05</span>
|
||||||
Unzip the downloaded Agent and start terminal to run below commands.
|
Unzip the downloaded Agent and start terminal to run below commands.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
|
|
||||||
<span class="fw-stack fw-lg margin-right">
|
<span class="fw-stack margin-right">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||||
</span>
|
</span>
|
||||||
@ -225,7 +225,7 @@
|
|||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
|
|
||||||
<span class="fw-stack fw-lg margin-right">
|
<span class="fw-stack margin-right">
|
||||||
<i class="fw fw-ring fw-stack-2x"></i>
|
<i class="fw fw-ring fw-stack-2x"></i>
|
||||||
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
<i class="fw fw-right-arrow fw-stack-1x"></i>
|
||||||
</span>
|
</span>
|
||||||
@ -251,17 +251,17 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">01</span>
|
<span class="badge">01</span>
|
||||||
You can view all your connected devices at
|
You can view all your connected devices at
|
||||||
<a href="{{@app.context}}/devices">[Device Management]</a> page.
|
<a href="{{@app.context}}/devices">[Device Management]</a> page.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">02</span>
|
<span class="badge">02</span>
|
||||||
Select one of connected devices and check for available control
|
Select one of connected devices and check for available control
|
||||||
operations and monitor Real-Time data.
|
operations and monitor Real-Time data.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">03</span>
|
<span class="badge">03</span>
|
||||||
You can also view analytics of the data published to IoT-Server by
|
You can also view analytics of the data published to IoT-Server by
|
||||||
navigating to Device Analytics page.
|
navigating to Device Analytics page.
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -205,19 +205,15 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">01</span>
|
<span class="badge">01</span>
|
||||||
Download your VirtualFireAlarm using [Download Agent] button above.
|
|
||||||
</li>
|
|
||||||
<li class="padding-top-double">
|
|
||||||
<span class="circle">02</span>
|
|
||||||
Unzip the downloaded Agent.
|
Unzip the downloaded Agent.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">03</span>
|
<span class="badge">02</span>
|
||||||
Move into the unzipped Agent folder in the terminal.
|
Move into the unzipped Agent folder in the terminal.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">04</span>
|
<span class="badge">03</span>
|
||||||
Unzip the downloaded Agent and start terminal to run this command: [sh
|
Unzip the downloaded Agent and start terminal to run this command: [sh
|
||||||
start-device.sh]
|
start-device.sh]
|
||||||
</li>
|
</li>
|
||||||
@ -240,17 +236,17 @@
|
|||||||
<hr>
|
<hr>
|
||||||
<ul class="list-unstyled">
|
<ul class="list-unstyled">
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">01</span>
|
<span class="badge">01</span>
|
||||||
You can view all your connected devices at
|
You can view all your connected devices at
|
||||||
<a href="{{@app.context}}/devices">[Device Management]</a> page.
|
<a href="{{@app.context}}/devices">[Device Management]</a> page.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">02</span>
|
<span class="badge">02</span>
|
||||||
Select one of connected devices and check for available control
|
Select one of connected devices and check for available control
|
||||||
operations and monitor Real-Time data.
|
operations and monitor Real-Time data.
|
||||||
</li>
|
</li>
|
||||||
<li class="padding-top-double">
|
<li class="padding-top-double">
|
||||||
<span class="circle">03</span>
|
<span class="badge">03</span>
|
||||||
You can also view analytics of the data published to IoT-Server by
|
You can also view analytics of the data published to IoT-Server by
|
||||||
navigating to Device Analytics page.
|
navigating to Device Analytics page.
|
||||||
</li>
|
</li>
|
||||||
|
|||||||
@ -76,6 +76,7 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
|
|||||||
.target(ApiApplicationRegistrationService.class,
|
.target(ApiApplicationRegistrationService.class,
|
||||||
deviceMgtServerUrl + API_APPLICATION_REGISTRATION_CONTEXT);
|
deviceMgtServerUrl + API_APPLICATION_REGISTRATION_CONTEXT);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void apply(RequestTemplate template) {
|
public void apply(RequestTemplate template) {
|
||||||
if (tokenInfo == null) {
|
if (tokenInfo == null) {
|
||||||
@ -95,9 +96,11 @@ public class OAuthRequestInterceptor implements RequestInterceptor {
|
|||||||
tokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password);
|
tokenInfo = tokenIssuerService.getToken(PASSWORD_GRANT_TYPE, username, password);
|
||||||
tokenInfo.setExpires_in(System.currentTimeMillis() + tokenInfo.getExpires_in());
|
tokenInfo.setExpires_in(System.currentTimeMillis() + tokenInfo.getExpires_in());
|
||||||
}
|
}
|
||||||
if (System.currentTimeMillis() + refreshTimeOffset > tokenInfo.getExpires_in()) {
|
synchronized(tokenInfo) {
|
||||||
tokenInfo = tokenIssuerService.getToken(REFRESH_GRANT_TYPE, tokenInfo.getRefresh_token());
|
if (System.currentTimeMillis() + refreshTimeOffset > tokenInfo.getExpires_in()) {
|
||||||
tokenInfo.setExpires_in(System.currentTimeMillis() + tokenInfo.getExpires_in());
|
tokenInfo = tokenIssuerService.getToken(REFRESH_GRANT_TYPE, tokenInfo.getRefresh_token());
|
||||||
|
tokenInfo.setExpires_in(System.currentTimeMillis() + tokenInfo.getExpires_in());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
String headerValue = "Bearer " + tokenInfo.getAccess_token();
|
String headerValue = "Bearer " + tokenInfo.getAccess_token();
|
||||||
template.header("Authorization", headerValue);
|
template.header("Authorization", headerValue);
|
||||||
|
|||||||
@ -37,6 +37,26 @@
|
|||||||
<br/><br/>
|
<br/><br/>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-sm-12 col-md-8 col-lg-12 padding-double grey-bg">
|
||||||
|
<h3 class="uppercase">Prepare</h3><hr>
|
||||||
|
<ul class="list-unstyled">
|
||||||
|
<li class="padding-top-double"><span class="badge">01</span> Download Device Agent into your Android Mobile.</li>
|
||||||
|
<li><span class="badge">02</span> Install Agent APK file.</li>
|
||||||
|
<li><span class="badge">03</span> Configure Agent App</li>
|
||||||
|
</ul>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="col-xs-12 col-sm-6 col-md-6 col-lg-6 padding-double">
|
||||||
|
<p class="grey margin-top">Click on the image to zoom</p>
|
||||||
|
<center>
|
||||||
|
<a href="{{@unit.publicUri}}/images/android_device.png" target="_blank">
|
||||||
|
<img src="{{@unit.publicUri}}/images/android_device.png" class="img-responsive">
|
||||||
|
</a>
|
||||||
|
</center>
|
||||||
|
</div>
|
||||||
|
|
||||||
<br/>
|
<br/>
|
||||||
|
|
||||||
{{#zone "topCss"}}
|
{{#zone "topCss"}}
|
||||||
@ -45,4 +65,4 @@
|
|||||||
|
|
||||||
{{#zone "bottomJs"}}
|
{{#zone "bottomJs"}}
|
||||||
{{js "js/type-view.js"}}
|
{{js "js/type-view.js"}}
|
||||||
{{/zone}}
|
{{/zone}}
|
||||||
|
|||||||