Fixed conflicts and merged

revert-dabc3590
Milan Perera 8 years ago
commit 45162ac155

@ -21,7 +21,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-analytics</artifactId>
<version>3.0.4-SNAPSHOT</version>
<version>3.0.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -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>

@ -21,7 +21,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-analytics</artifactId>
<version>3.0.4-SNAPSHOT</version>
<version>3.0.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -21,7 +21,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>iot-analytics</artifactId>
<version>3.0.4-SNAPSHOT</version>
<version>3.0.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -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>

@ -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.
*/
var log = new Log();
var dataStore = require('../include/commons.jag').dataStore;
var verb = request.getMethod();
var method = request.getMethod();
var resourceName = request.getParameter('name');
var webService = request.getParameter('service');
if(webService) {
response.contentType = 'application/json';
response.characterEncoding = 'UTF-8';
response.content = { resource : get(resourceName) };
}
function get(name){
if(name == 'within'){
try{
var res = dataStore.get("geo/alerts/within/");
function getRegistry () {
var carbon = require("carbon");
var server = new carbon.server.Server();
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;
}
var allFences = [];
for each (var resource in res.getChildren()) {
var fence = {};
if (resource) {
for each(var res in resource.content) {
var childResource = registry.get(res);
var properties = registry.properties(res);
fence = {};
try {
fence['geoJson'] = JSON.parse(dataStore.get(resource).content.replace(/'/g, '"'));
fence['queryName'] = dataStore.get(resource).getProperty('queryName');
fence['areaName'] = dataStore.get(resource).getProperty('areaName');
fence['createdTime'] = dataStore.get(resource).createdTime.toString();
fence[constants.GEO_JSON] = JSON.parse(childResource.content);
fence[constants.QUERY_NAME] = properties[constants.QUERY_NAME][0];
fence[constants.AREA_NAME] = properties[constants.AREA_NAME][0];
fence[constants.CREATED_TIME] = childResource.created.time.toString();
allFences.push(fence);
}
catch (e) {
log.info("Error: "+e+'\n');
log.error("Error: " + e + '\n');
}
}
}
return allFences;
} else if(name == 'speed'){
var resource;
} else if(executionPlanType == constants.EXECUTION_PLAN_TYPE_SPEED){
try{
resource = dataStore.get(name+'.json');
resource = registry.get(constants.REGISTRY_PATH_FOR_ALERTS + constants
.EXECUTION_PLAN_TYPE_SPEED + "/" + deviceId );
} catch(e){
resource = {'content': false};
}
log.info("DEBUG:***** name = "+name);
if (log.isDebugEnabled()) {
log.info("DEBUG:***** name = " + executionPlanType);
log.info("DEBUG:***** resource.content = " + resource.content);
}
return JSON.parse(resource.content);
} else if(name == 'proximity'){
} else if(executionPlanType == constants.EXECUTION_PLAN_TYPE_PROXIMITY){
var result;
try{
var resource = dataStore.get("/geo/alerts/proximity/proximity.json");
result={proximityDistance: resource.getProperty("proximityDistance"), proximityTime: resource.getProperty("proximityTime")};
resource = registry.properties(constants.REGISTRY_PATH_FOR_ALERTS + constants.EXECUTION_PLAN_TYPE_PROXIMITY +
"/" + deviceId);
result = {
proximityDistance: resource[constants.PROXIMITY_DISTANCE],
proximityTime: resource[constants.PROXIMITY_TIME]
};
}catch(e){
result = {'content': false};
}
return result;
} else if(name == 'stationery'){
var res;
} else if(executionPlanType == constants.EXECUTION_PLAN_TYPE_STATIONARY){
try{
res = dataStore.get("geo/alerts/stationery/");
resource = registry.get(constants.REGISTRY_PATH_FOR_ALERTS + constants.EXECUTION_PLAN_TYPE_STATIONARY +
"/" + deviceId);
}
catch(e){
log.info(e.message);
return false;
}
var allFences = [];
for each (var resource in res.getChildren()) {
if (resource) {
for each(var res in resource.content) {
var fence = {};
var childResource = registry.get(res);
var properties = registry.properties(res);
try {
fence['geoJson'] = JSON.parse(dataStore.get(resource).content.replace(/'/g, '"'));
fence['queryName'] = dataStore.get(resource).getProperty('queryName');
fence['areaName'] = dataStore.get(resource).getProperty('stationeryName');
fence['stationeryTime'] = dataStore.get(resource).getProperty('stationeryTime');
fence['fluctuationRadius'] = dataStore.get(resource).getProperty('fluctuationRadius');
fence['createdTime'] = dataStore.get(resource).createdTime.toString();
fence[constants.GEO_JSON] = JSON.parse(childResource.content);
fence[constants.QUERY_NAME] = properties[constants.QUERY_NAME][0];
fence[constants.AREA_NAME] = properties[constants.STATIONARY_NAME][0];
fence[constants.STATIONARY_TIME] = properties[constants.STATIONARY_TIME][0];
fence[constants.FLUCTUATION_RADIUS] = properties[constants.FLUCTUATION_RADIUS][0];
fence[constants.CREATED_TIME] = childResource.created.time.toString();
allFences.push(fence);
} catch (e) {
log.error("Error: " + e + '\n');
}
catch(e){
log.info("Error: "+e+'\n');
}
}
return allFences;
} else if( name == 'traffic'){
} else if( executionPlanType == constants.EXECUTION_PLAN_TYPE_TRAFFIC){
try{
var res = dataStore.get("geo/alerts/traffic/");
resource = registry.get(constants.REGISTRY_PATH_FOR_ALERTS + constants.EXECUTION_PLAN_TYPE_TRAFFIC +
"/" + deviceId + "/");
}
catch(e){
log.info(e.message);
return false;
}
var allFences = [];
for each (var resource in res.getChildren()) {
for each (var res in resource.content) {
var fence = {};
var childResource = registry.get(res);
var properties = registry.properties(res);
try{
fence['geoJson'] = JSON.parse(dataStore.get(resource).content.replace(/'/g, '"'));
fence['queryName'] = dataStore.get(resource).getProperty('queryName');
fence['areaName'] = dataStore.get(resource).getProperty('areaName');
fence['createdTime'] = dataStore.get(resource).createdTime.toString();
fence[constants.GEO_JSON] = JSON.parse(childResource.content);
fence[constants.QUERY_NAME] = properties[constants.QUERY_NAME][0];
fence[constants.AREA_NAME] = properties[constants.AREA_NAME][0];
fence[constants.CREATED.TIME] = childResource.created.time.toString();
allFences.push(fence);
}
catch(e){
@ -123,7 +157,6 @@ function get(name){
}
return allFences;
}
}
%>

@ -17,13 +17,10 @@
~ under the License.
*/
var db = require("../include/database.jag");
var configuration = require('../conf/database.json');
var constants = require("constants.jag");
var db = new Database(constants.DATA_SOURCE_NAME);
var log = new Log();
var db = new Database("jdbc:h2:repository/database/WSO2_GEO",configuration.username,configuration.password);
var objectId = request.getParameter("objectId");
var getHistory = "SELECT * FROM alerts_history WHERE id = \'" + objectId + "\' ORDER BY timeStamp DESC LIMIT 50";
try{
@ -38,5 +35,4 @@ catch(e){
finally{
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>
</head>
<%
var get = require('../get_alerts.jag').get;
%>
<body>
<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);">
@ -67,12 +64,12 @@ var get = require('../get_alerts.jag').get;
<div class="col-md-10 col-md-offset-1">
<form class="form-inline" role="form">
<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>
</div>
<div class="input-group input-group-sm">
<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>
</div>
</form>

@ -21,11 +21,6 @@
<title></title>
</head>
<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);">
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">&times;</button>
<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="input-group input-group-sm">
<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>
</div>
</div>
@ -48,5 +43,6 @@ var get = require('../get_alerts.jag').get;
</div>
</div>
</div>
<script src="/portal/store/carbon.super/fs/gadget/geo-dashboard/js/geo_speed.js"></script>
</body>
</html>

@ -24,18 +24,10 @@
</style>
<script>
$(".removeGeoFence").tooltip();
$('.viewGeoFenceRow td:not(:last-child)').click(function () {
viewFence(this.parentElement,'Stationery');
});
</script>
</head>
<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);">
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">
@ -47,7 +39,7 @@ var get = require('../get_alerts.jag').get;
<div class="row">
<p class="text-info text-center">View current fences</p>
<div class="">
<table class="table table-hover">
<table class="table table-hover" id = "stationary-alert-table">
<thead>
<tr >
<th>Stationery Name</th>
@ -59,32 +51,9 @@ var get = require('../get_alerts.jag').get;
</tr>
</thead>
<tbody>
<%
var alerts = get('stationery');
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">
<div class="alert alert-danger fence-not-exist" role="alert">
<strong>Oh snap!</strong> Can't find any geo-fence areas,please draw a new area or try again.
</div>
<%
}
%>
</tbody>
</table>
</div>
@ -101,5 +70,6 @@ var get = require('../get_alerts.jag').get;
</div>
</div>
</div>
<script src="/portal/store/carbon.super/fs/gadget/geo-dashboard/js/geo_stationary.js"></script>
</body>
</html>

@ -33,9 +33,6 @@
</script>
</head>
<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);">
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">

@ -22,20 +22,8 @@
<style>
.fa-trash-o:hover{color:red;}
</style>
<script>
$(".removeGeoFence").tooltip();
$('.viewGeoFenceRow td:not(:last-child)').click(function () {
viewFence(this.parentElement,'WithIn');
});
</script>
</head>
<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);">
<button class="close" type="button" data-dismiss="modal" aria-hidden="true">&times;</button>
<h4 class="modal-title">
@ -45,9 +33,9 @@ var get = require('../get_alerts.jag').get;
</div>
<div class="modal-body">
<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="">
<table class="table table-hover">
<table class="table table-hover" id ="within-alert">
<thead>
<tr >
<th>Fence Name</th>
@ -57,29 +45,10 @@ var get = require('../get_alerts.jag').get;
</tr>
</thead>
<tbody>
<%
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">
<div class="alert alert-danger fence-not-exist" role="alert">
<strong>Oh snap!</strong> Can't find any geo-fence areas,please draw a new area or try again.
</div>
<%
}
%>
</tbody>
</table>
</div>
@ -96,5 +65,6 @@ var get = require('../get_alerts.jag').get;
</div>
</div>
</div>
<script src="/portal/store/carbon.super/fs/gadget/geo-dashboard/js/geo_within.js"></script>
</body>
</html>

@ -31,8 +31,6 @@ var eventProcessorOption = eventsProcessorServiceClient.getOptions();
eventProcessorOption.setManageSession(true);
eventProcessorOption.setProperty(HTTPConstants.COOKIE_STRING, session.get('authToken'));
var cepInfo = require('../include/commons.jag').cepInfo;
var removeAlert = require('../include/store_alerts.jag').remove;
var ws = require('ws');
var process = require("process"), host = process.getProperty('server.host'),

@ -32,8 +32,6 @@ var eventsProcessorServiceClient = eventprocessorStub._getServiceClient();
var eventProcessorOption = eventsProcessorServiceClient.getOptions();
eventProcessorOption.setManageSession(true);
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 ws = require('ws');
var process = require("process"), host = process.getProperty('server.host'),
@ -90,7 +88,7 @@ if (verb == "POST") {
} else if (executionPlan == 'Traffic') {
var resourceContents = parseDataJson.geoFenceGeoJSON;
}
storeAlerts(parseKey, resourceContents, executionPlan, optionalArgs, deviceId);
storeAlerts(resourceContents, executionPlan, optionalArgs, deviceId);
var payload;
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
*/
var configuration = require('../conf/database.json');
var constants = require("constants.jag");
var db = new Database(constants.DATA_SOURCE_NAME);
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));
var tableName = "tileservers";
var db = new Database("jdbc:h2:repository/database/WSO2_GEO",configuration.username,configuration.password);
if(request.getMethod() == "GET"){
@ -46,7 +46,9 @@ if(request.getMethod() == "GET"){
var getAllTileServers = "select * from tileServers";
try{
var allTileServers = db.query(getAllTileServers);
log.info(allTileServers);
if (log.isDebugEnabled) {
log.debug(allTileServers);
}
response.contentType = "application/json";
response.characterEncoding = "UTF-8";
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 +"' );";
try{
db.query(insertTileServer);
log.info(name + ' tile server added successfully!');
print(name + ' tile server added successfully!');
if (log.isDebugEnabled()) {
log.debug(name + ' tile server added successfully!');
}
}
catch(e){
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
*/
var configuration = require('../conf/database.json');
var constants = require("constants.jag");
var db = new Database(constants.DATA_SOURCE_NAME);
var log = new Log();
var tableName = "webMapService";
var db = new Database("jdbc:h2:repository/database/WSO2_GEO",configuration.username,configuration.password);
if(request.getMethod() == "GET"){
@ -47,7 +46,9 @@ if(request.getMethod() == "GET"){
var getAllWmsEndPoints = "select * from webMapService";
try{
var allWmsEndPoints = db.query(getAllWmsEndPoints);
log.info(allWmsEndPoints);
if (log.isDebugEnabled()) {
log.debug(allWmsEndPoints);
}
response.contentType = "application/json";
response.characterEncoding = "UTF-8";
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 +"' );";
try{
db.query(insertWmsEndPoint);
if (log.isDebugEnabled()) {
log.info(serviceName + ' wms service added successfully!');
print(serviceName + 'added successfully!');
}
}
catch(e){
log.error(e.toString());
@ -102,7 +104,6 @@ function logToFile(message){
message = file.write(message);
file.close();
}
%>

@ -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);
}
.ui-dialog .ui-dialog-title {
word-break: keep-all !important;
word-wrap: normal !important;
white-space: normal !important;
}

@ -28,12 +28,4 @@ var escapeSiddhiql = function (s) {
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
var dataStore = require('../include/commons.jag').dataStore;
var log = new Log();
var deviceIdSeperator = "---";
function store(parameterKeyName, resourceContents, executionPlan, optional, deviceId) {
log.info("DEBUG:*** resourceContents:" + resourceContents);
if (executionPlan == "Speed") {
var currentLimit;
var speedFile = "speed" + deviceIdSeperator + ".json";
try {
currentLimit = dataStore.get(speedFile);
}
catch (e) {
log.info("DEBUG:*** Catch error:" + e.message);
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);
}
}
function remove(queryName, id, deviceId) {
var constants = require("../controllers/constants.jag");
var getRegistry = function() {
var carbon = require("carbon");
var server = new carbon.server.Server();
return new carbon.registry.Registry(server, {
system: true
});
};
/**
* 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;
}
} else {
throw "Alert type and ID are mandatory field to generate the relevant registry path";
}
};
/**
* 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
}
});
}
}
/**
* 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 = "";
try {
if (id == "WithIn") {
path = "geo/alerts/within/" + queryName + deviceIdSeperator + deviceId + ".json";
} else if (id == "Stationery") {
path = "geo/alerts/stationery/" + queryName + deviceIdSeperator + deviceId + ".json";
} else if (id == "Traffic") {
path = "geo/alerts/traffic/" + queryName + deviceIdSeperator + deviceId + ".json";
if (executionPlanType === constants.EXECUTION_PLAN_TYPE_SPEED || executionPlanType === constants.EXECUTION_PLAN_TYPE_PROXIMITY) {
path = registryPath(executionPlanType, deviceId);
} else {
path = registryPath(executionPlanType, deviceId, queryName);
}
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) {
log.info("The requested resource " + path + " was not found on this server. Thats 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 ) -->
<!-- ** comment out below imports if using minimized wso2_geo.min library ** -->
<script src="js/application_options.js"></script>
<script type="text/javascript">
function reformatRadius(val){
if(val != "" && !isNaN(val)){
@ -136,6 +135,11 @@
<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">
<li class="hidden-xs"><a href="#left_side_pannel" data-uk-offcanvas>
<i class="fa fa-list" style="color: #FF9900"></i></a>
@ -718,7 +722,17 @@
<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>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>

@ -82,7 +82,7 @@ function initializeMap() {
map = L.map("map", {
zoom: 14,
center:[51.548525, 0.111749],
center: [6.927078, 79.861243],
layers: [defaultOSM, defaultTFL],
zoomControl: false,
attributionControl: false,
@ -120,8 +120,6 @@ function initializeMap() {
}
});
}
/* Attribution control */
@ -264,6 +262,7 @@ $('#searchbox').typeahead({
});
var toggled = false;
function focusOnSpatialObject(objectId) {
console.log("Selecting" + objectId);
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
function clearFocus() {
if (selectedSpatialObject) {

@ -349,7 +349,7 @@ function updateDrawing(updatedGeoJson) {
}
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 areaName = $(geoFenceElement).attr('data-areaName');
var geometryShape;
@ -382,7 +382,7 @@ function viewFence(geoFenceElement,id) {
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');
popupTemplate.find('#exportGeoJson').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"){
$('#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');
popupTemplate.find('#exportGeoJson').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 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({
redraw: 'move'
}).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)
}
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") {
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 deviceId;
var deviceType;
var isBatchModeOn = false;
function processPointMessage(geoJsonFeature) {
if (geoJsonFeature.id in currentSpatialObjects) {
@ -72,6 +73,10 @@ function SpatialObject(json) {
return this;
}
function popupDateRange() {
$('#dateRangePopup').attr('title', 'Device ID - ' + deviceId + " Device Type - " + deviceType).dialog();
}
SpatialObject.prototype.update = function (geoJSON) {
this.latitude = geoJSON.geometry.coordinates[1];
this.longitude = geoJSON.geometry.coordinates[0];
@ -161,8 +166,18 @@ function angleToHeading(angle) {
SpatialObject.prototype.removeFromMap = function () {
this.removePath();
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) {
return {
"type": "Feature",
@ -552,12 +567,14 @@ var webSocketOnAlertOpen = function () {
};
var webSocketOnAlertMessage = function processMessage(message) {
if (!isBatchModeOn) {
var json = $.parseJSON(message.data);
if (json.messageType == "Alert") {
processAlertMessage(json);
} else {
console.log("Message type not supported.");
}
}
};
var webSocketOnAlertClose = function (e) {
@ -594,6 +611,7 @@ var webSocketOnOpen = function () {
};
var webSocketOnMessage = function (message) {
if (!isBatchModeOn) {
var json = $.parseJSON(message.data);
if (json.messageType == "Point") {
processPointMessage(json);
@ -602,10 +620,10 @@ var webSocketOnMessage = function (message) {
} else {
console.log("Message type not supported.");
}
}
};
var webSocketOnClose = function (e) {
if (websocket.get_opened()) {
$.UIkit.notify({
message: 'Connection lost with server!!',
@ -672,8 +690,8 @@ function intializeWebsocketUrls() {
deviceId = state.device.id;
deviceType = state.device.type;
if (deviceId && deviceType) {
//TODO need to get the token
wso2.gadgets.identity.getUsername(function (username) {
wso2.gadgets.identity.getAccessToken(function (accessToken) {
$.getJSON("/portal/store/carbon.super/fs/gadget/geo-dashboard/controllers/get_server_info.jag?username=" + username, function (data) {
webSocketURL = 'wss://' + data.ip + ':' + data.httpsPort + ApplicationOptions.constance.PATH_SEPARATOR + ApplicationOptions.constance
.CEP_WEB_SOCKET_OUTPUT_ADAPTOR_WEBAPP_NAME + ApplicationOptions.constance.PATH_SEPARATOR + ApplicationOptions
@ -687,12 +705,13 @@ function intializeWebsocketUrls() {
ApplicationOptions.constance.PATH_SEPARATOR + ApplicationOptions.constance
.CEP_ON_ALERT_WEB_SOCKET_OUTPUT_ADAPTOR_NAME + ApplicationOptions.constance.PATH_SEPARATOR + ApplicationOptions.constance.VERSION
+ "?deviceId=" + deviceId + "&deviceType=" + deviceType;
document.cookie = "websocket-token=f98d6142-e988-3c7f-a8c9-7e6d74da7113; path=/";
document.cookie = "websocket-token="+accessToken+"; path=/";
$("#proximity_alert").hide();
initializeWebSocket();
initializeOnAlertWebSocket();
});
});
});
} else {
$.UIkit.notify({
message: 'Invalid Access! No device information provided to track!',
@ -705,7 +724,6 @@ function 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>

@ -27,6 +27,7 @@
<dependency artifact="ThemeGeoDashboard" version="1.0.0" include="true" serverRole="GeoDashboard"/>
<!-- CEP Artifacts -->
<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-InputStandardizer" version="1.0.0" include="true" serverRole="GeoDashboard"/>
<dependency artifact="Geo-ExecutionPlan-Pass_through" version="1.0.0" include="true" serverRole="GeoDashboard"/>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>analytics</artifactId>
<version>3.0.4-SNAPSHOT</version>
<version>3.0.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -22,7 +22,7 @@
<parent>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<artifactId>carbon-device-mgt-plugins-parent</artifactId>
<version>3.0.4-SNAPSHOT</version>
<version>3.0.5-SNAPSHOT</version>
<relativePath>../../pom.xml</relativePath>
</parent>

@ -18,8 +18,6 @@
package org.wso2.carbon.iot.android.sense.event.streams.data;
import java.util.Date;
public class NetworkData {
//Mobile or Wifi

@ -33,7 +33,6 @@ public class SmsDataReceiver extends BroadcastReceiver {
final Bundle bundle = intent.getExtras();
if (bundle != null) {
final Object[] pdusObj = (Object[]) bundle.get("pdus");
for (int i = 0; i < pdusObj.length; i++) {

@ -148,6 +148,7 @@ public class SenseDataReceiverManager {
smsDataReceiver = new SmsDataReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Telephony.Sms.Intents.SMS_RECEIVED_ACTION);
intentFilter.addAction(Telephony.Sms.Intents.SMS_DELIVER_ACTION);
context.registerReceiver(smsDataReceiver, intentFilter);
}
}

@ -21,7 +21,7 @@
<parent>
<artifactId>androidsense-plugin</artifactId>
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
<version>3.0.4-SNAPSHOT</version>
<version>3.0.5-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

@ -0,0 +1,18 @@
@Plan:name('Android-Accelerometer-ExecutionPlan')
@Plan:description('Process accelerometer changes.')
@Import('org.wso2.iot.android.accelerometer:1.0.0')
define stream AccelerometerStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value
float);
@Export('org.wso2.iot.android.accelerometer.stats:1.0.0')
define stream AccelerometerStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value float, year int, month int, day int, hour int, minute int);
partition with (meta_deviceId of AccelerometerStream)
begin
from AccelerometerStream
select meta_owner, meta_deviceId, meta_timestamp, axis, value, time:extract
(meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
insert into AccelerometerStatsStream;
end;

@ -17,7 +17,7 @@
~ under the License.
-->
<artifact name= "android_andriod_audio_filter_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
<file>Andriod-Audio-Filter-ExecutionPlan.siddhiql</file>
<artifact name= "android_accelerometer_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
<file>Android-Accelerometer-ExecutionPlan.siddhiql</file>
</artifact>

@ -0,0 +1,16 @@
{
"provider-conf": {
"streamName": "org.wso2.iot.android.accelerometer:1.0.0",
"provider-name": "realtime"
},
"chart-conf": {
"x": "TIMESTAMP",
"xType": "time",
"y": "value",
"yType": "number",
"color": "axis",
"maxLength": "30",
"gadget-name": "ANDROID_ACCELETOMETER_GADGET",
"chart-name": "line-chart"
}
}

@ -0,0 +1,42 @@
<%
/**
* 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 PROVIDER_CONF = 'provider-conf';
var PROVIDER_NAME = 'provider-name';
var action = request.getParameter("action");
var data = request.getContent();
var providerConf = data[PROVIDER_CONF];
var providerAPI = require('js/core/' + providerConf[PROVIDER_NAME] + '-provider-api.js');
if (action === 'getSchema') {
print(providerAPI.getSchema(providerConf));
return;
} else if(action === 'getData'){
print(providerAPI.getData(providerConf));
return;
}
}());
%>

@ -0,0 +1,9 @@
{
"id": "ANDROID_ACCELETOMETER_GADGET",
"title": "ANDROID_ACCELETOMETER_GADGET",
"type": "gadget",
"thumbnail": "gadget/ANDROID_ACCELETOMETER_GADGET/thumbnail.png",
"data": {
"url": "gadget/ANDROID_ACCELETOMETER_GADGET/gadget.xml"
}
}

@ -0,0 +1,60 @@
<?xml version="1.0" encoding="UTF-8" ?>
<Module>
<ModulePrefs title="ANDROID_ACCELETOMETER_GADGET" description="This is a template gadget">
<Require feature="dynamic-height"/>
<Require feature="wso2-gadgets-identity"/>
</ModulePrefs>
<UserPref name="windowSize"
display_name="Window Size"
default_value="10"/>
<Content type="html">
<![CDATA[
<head>
<!-- shared css -->
<link href="/portal/libs/analytics-wso2-2.0.0/common.css" rel="stylesheet" type="text/css" >
<!-- chart vendor css -->
<!-- chart specific css -->
<!-- jQuery -->
<script src="/portal/libs/jquery_1.11.0/jquery-1.11.3.min.js"></script>
<!-- provider libs -->
<script src="js/provider-libs/ws-client.js"></script>
<!-- shared libs -->
<script src="/portal/libs/analytics-wso2-2.0.0/d3.min.js"></script>
<script src="/portal/libs/analytics-wso2-2.0.0/vega.js"></script>
<script src="/portal/libs/analytics-wso2-2.0.0/VizGrammar.min.js"></script>
<script src="/portal/libs/analytics-wso2-2.0.0/wso2gadgets.js"></script>
<script src="/portal/libs/analytics-wso2-2.0.0/chart-utils.js"></script>
<!-- chart specific vendor libs -->
<!-- chart specific js -->
<!--scripts copied by framework -->
<script src="js/core/provider-client.js"></script>
<script src="js/core/gadget-util.js"></script>
<script src="js/core/line-chart-api.js"></script>
<script src="js/core/gadget-core.js"></script>
</head>
<body>
<div id="canvas"></div>
</body>
]]>
</Content>
</Module>

@ -0,0 +1,64 @@
/*
* 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.
*/
$(function () {
var gadgetLocation;
var conf;
var schema;
var pref = new gadgets.Prefs();
var CHART_CONF = 'chart-conf';
var PROVIDER_CONF = 'provider-conf';
var init = function () {
$.ajax({
url: gadgetLocation + '/conf.json',
method: "GET",
contentType: "application/json",
async: false,
success: function (data) {
conf = JSON.parse(data);
$.ajax({
url: gadgetLocation + '/gadget-controller.jag?action=getSchema',
method: "POST",
data: JSON.stringify(conf),
contentType: "application/json",
async: false,
success: function (data) {
schema = data;
}
});
}
});
};
var drawGadget = function (){
draw('#canvas', conf[CHART_CONF], schema, null);
registerCallBackforPush(conf[PROVIDER_CONF], schema, function(providerData) {
update(providerData);
});
};
getGadgetLocation(function (gadget_Location) {
gadgetLocation = gadget_Location;
init();
drawGadget();
});
});

@ -0,0 +1,35 @@
/*
* 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 getGadgetLocation = function (callback) {
var gadgetLocation = "/portal/store/carbon.super/fs/gadget/ANDROID_ACCELEROMETER_GADGET";
var PATH_SEPERATOR = "/";
if (gadgetLocation.search("store") != -1) {
wso2.gadgets.identity.getTenantDomain(function (tenantDomain) {
var gadgetPath = gadgetLocation.split(PATH_SEPERATOR);
var modifiedPath = '';
for (var i = 1; i < gadgetPath.length; i++) {
if (i === 3) {
modifiedPath = modifiedPath.concat(PATH_SEPERATOR, tenantDomain);
} else {
modifiedPath = modifiedPath.concat(PATH_SEPERATOR, gadgetPath[i])
}
}
callback(modifiedPath);
});
} else {
callback(gadgetLocation);
}
}

@ -0,0 +1,134 @@
/*
* 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, isProviderRequired, draw, update;
(function() {
var CHART_LOCATION = '/extensions/chart-templates/';
/**
* return the config to be populated in the chart configuration UI
* @param schema
*/
getConfig = function(schema) {
var chartConf = require(CHART_LOCATION + '/line-chart/config.json').config;
/*
dynamic logic goes here
*/
var columns = [];
columns.push("None");
for(var i=0; i < schema.length; i++) {
columns.push(schema[i]["fieldName"]);
}
for(var i=0; i < chartConf.length; i++) {
if (chartConf[i]["fieldName"] == "color") {
chartConf[i]["valueSet"] = columns;
break;
}
}
return chartConf;
};
/**
* validate the user inout for the chart configuration
* @param chartConfig
*/
validate = function(chartConfig) {
return true;
};
/**
* TO be used when provider configuration steps need to be skipped
*/
isProviderRequired = function() {
}
/**
* return the gadget content
* @param chartConfig
* @param schema
* @param data
*/
draw = function(placeholder, chartConfig, _schema, data) {
_schema = updateUserPrefXYTypes(_schema, chartConfig);
var schema = toVizGrammarSchema(_schema);
var view = {
id: "chart-0",
schema: schema,
chartConfig: buildChartConfig(chartConfig),
data: function() {
if(data) {
var result = [];
console.log(data);
data.forEach(function(item) {
var row = [];
schema[0].metadata.names.forEach(function(name) {
row.push(item[name]);
});
result.push(row);
});
console.log(result);
wso2gadgets.onDataReady(result);
}
}
};
try {
wso2gadgets.init(placeholder, view);
var view = wso2gadgets.load("chart-0");
} catch (e) {
console.error(e);
}
};
/**
*
* @param data
*/
update = function(data) {
wso2gadgets.onDataReady(data,"append");
};
buildChartConfig = function (_chartConfig) {
var conf = {};
conf.x = _chartConfig.x;
conf.xType = _chartConfig.xType;
conf.yType = _chartConfig.yType;
conf.maxLength = _chartConfig.maxLength;
conf.charts = [];
conf.charts[0] = {
type : "line",
y: _chartConfig.y
};
if (_chartConfig.color != "None") {
conf.charts[0].color = _chartConfig.color;
}
return conf;
};
}());

@ -0,0 +1,51 @@
/*
* 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 registerCallBackforPush;
(function() {
var callback;
/**
* TODO Need to read hostname,port, and tenantId from providerConfig
* @param providerConfig
* @param schema
*/
registerCallBackforPush = function(providerConfig, schema, _callback) {
var streamId = providerConfig['streamName'];
var hostname = window.parent.location.hostname;
var port = window.parent.location.port;
subscribe(streamId.split(":")[0], streamId.split(":")[1],
'10',
onData, onError,
hostname,
port,
'WEBSOCKET'
);
callback = _callback;
};
function onData(streamId, data) {
callback(data);
};
function onError(error) {
console.error(error);
};
}());

@ -0,0 +1,154 @@
/*
* 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 = 'realtime';
var log = new Log();
var utils = require('/modules/utils.js');
var carbon = require("carbon");
var EventPublisherConstants = Packages.org.wso2.carbon.event.publisher.core.config.EventPublisherConstants;
var eventPublisherService = carbon.server.osgiService('org.wso2.carbon.event.publisher.core.EventPublisherService');
var eventStreamService = carbon.server.osgiService('org.wso2.carbon.event.stream.core.EventStreamService');
var typeMap = {
"bool": "string",
"boolean": "string",
"string": "string",
"int": "number",
"integer": "number",
"long": "number",
"double": "number",
"float": "number",
"time": "time"
};
getConfig = function() {
var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
var datasources = [];
try {
var eventPublisherConfigurationList = eventPublisherService.getAllActiveEventPublisherConfigurations();
for (var i = 0; i < eventPublisherConfigurationList.size(); i++) {
var eventPublisherConfiguration = eventPublisherService.getActiveEventPublisherConfiguration(
eventPublisherConfigurationList.get(i).getEventPublisherName());;
var mappingTypeIsWso2 = eventPublisherConfiguration.getOutputMapping()
.getMappingType().equals(EventPublisherConstants.EF_WSO2EVENT_MAPPING_TYPE);
var adapterType = null;
if (eventPublisherConfiguration.getToAdapterConfiguration() != null) {
adapterType = eventPublisherConfiguration.getToAdapterConfiguration().getType();
}
if (mappingTypeIsWso2 && adapterType.trim() == "ui") {
var streamName = eventPublisherConfiguration.getFromStreamName();
var streamVersion = eventPublisherConfiguration.getFromStreamVersion();
var streamId = streamName + ":" + streamVersion;
datasources.push(streamId);
}
}
var datasourceCfg = {
"fieldLabel": "Event Stream",
"fieldName": "streamName",
"fieldType": "dropDown"
};
datasourceCfg['valueSet'] = datasources;
} catch (e) {
log.error(e);
}
formConfig.config.push(datasourceCfg);
return formConfig;
};
/**
* validate the user input of provider configuration
* @param providerConfig
*/
validate = function(providerConfig) {
/*
validate the form and return
*/
return true;
};
/**
* returns the data mode either push or pull
*/
getMode = function() {
return 'push';
};
/**
* returns an array of column names & types
* @param providerConfig
*/
getSchema = function(providerConfig) {
var streamId = providerConfig["streamName"];
var output = [];
output.push({
fieldName: "TIMESTAMP",
fieldType: "time"
});
if (eventStreamService != null) {
var eventStreamConfiguration = eventStreamService.getEventStreamConfiguration(streamId);
if (eventStreamConfiguration != null) {
var metaData = eventStreamConfiguration.getStreamDefinition().getMetaData();
var correlationData = eventStreamConfiguration.getStreamDefinition().getCorrelationData();
var payloadData = eventStreamConfiguration.getStreamDefinition().getPayloadData();
if (metaData != null) {
for (var i = 0; i < metaData.size(); i++) {
var type = metaData.get(i).getType().toString().toLowerCase();
output.push({
fieldName: metaData.get(i).getName(),
fieldType: typeMap[type.toLowerCase()]
});
}
}
if (correlationData != null) {
for (var i = 0; i < correlationData.size(); i++) {
var type = correlationData.get(i).getType().toString().toLowerCase();
output.push({
fieldName: correlationData.get(i).getName(),
fieldType: typeMap[type.toLowerCase()]
});
}
}
if (payloadData != null) {
for (var i = 0; i < payloadData.size(); i++) {
var type = payloadData.get(i).getType().toString().toLowerCase();
output.push({
fieldName: payloadData.get(i).getName(),
fieldType: typeMap[type.toLowerCase()]
});
}
}
}
}
return output;
};
getData = function(providerConfig,limit) {
var data = [];
return data;
};
}());

@ -0,0 +1,286 @@
/*
* 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 CONSTANTS = {
urlSeperator: '/',
queryParamStreamName : '?streamname=',
queryParamStreamVersion : '&version=',
queryParamLastUpdatedTime : '&lastUpdatedTime=',
urlSecureTransportWebsocket : 'wss://',
urlSecureTransportHttp : 'https://',
colon : ':',
defaultIntervalTime : 10 * 1000,
defaultHostName : 'localhost',
defaultSecurePortNumber : '9443',
defaultMode : 'AUTO',
processModeHTTP : 'HTTP',
processModeWebSocket : 'WEBSOCKET',
processModeAuto : 'AUTO',
numThousand : 1000,
websocketTimeAppender : 400,
websocketSubscriptionEndpoint : 'portal/uipublisher/websocketSubscriptionEndpoint.jag',
httpEventRetrievalEndpoint : 'portal/uipublisher/httpEventRetrievalEndpoint.jag'
};
var websocket = null;
var webSocketUrl;
var httpUrl;
var cepHostName;
var cepPortNumber;
var isErrorOccured = false;
var lastUpdatedtime = -1;
var polingInterval;
var stream;
var streamVersion;
var firstPollingAttempt;
var processMode;
var onSuccessFunction;
var onErrorFunction;
var terminateWebsocketInstance = false;
var pollingContinue = true;
function subscribe(streamName,version,intervalTime,
listeningFuncSuccessData,listeningFuncErrorData,cepHost,cepPort,mode){
stopPollingProcesses();
stream = streamName;
streamVersion = version;
onSuccessFunction = listeningFuncSuccessData;
onErrorFunction = listeningFuncErrorData;
if(intervalTime == null || intervalTime == ""){
polingInterval = CONSTANTS.defaultIntervalTime;
} else{
polingInterval = intervalTime * CONSTANTS.numThousand;
}
if(cepHost == null || cepHost == ""){
cepHostName = CONSTANTS.defaultHostName;
} else{
cepHostName = cepHost;
}
if(cepPort == null || cepPort == ""){
cepPortNumber = CONSTANTS.defaultSecurePortNumber;
} else{
cepPortNumber = cepPort;
}
if(mode == null || mode == ""){
processMode = CONSTANTS.defaultMode;
} else{
processMode = mode;
}
webSocketUrl = CONSTANTS.urlSecureTransportWebsocket + cepHostName + CONSTANTS.colon + cepPortNumber +
CONSTANTS.urlSeperator + CONSTANTS.websocketSubscriptionEndpoint;
if(processMode == CONSTANTS.processModeHTTP){
firstPollingAttempt = true;
pollingContinue = true;
startPoll();
} else{
initializeWebSocket(webSocketUrl);
}
}
/**
* Initializing Web Socket
*/
function initializeWebSocket(webSocketUrl){
websocket = new WebSocket(webSocketUrl);
websocket.onopen = webSocketOnOpen;
websocket.onmessage = webSocketOnMessage;
websocket.onclose = webSocketOnClose;
websocket.onerror = webSocketOnError;
}
function getWebsocketSubscriptionMessage(streamName, streamVersion, streamProperties, streamValues) {
if (streamProperties.length === streamValues.length) {
var message = {};
message.streamName = streamName;
message.streamVersion = streamVersion;
var i;
for (i = 0; i < streamProperties.length; i++) {
message.filterProps = [];
message.filterProps.push({
'name': streamProperties[i],
'value': streamValues[i]
});
}
return JSON.stringify(message);
} else {
console.log('stream properties and values are not in equal size');
}
}
/**
* Get the parameters as query parameters.
* This method parses those parameters and returns.
* */
function getAllQueryParamsFromURL() {
var queryParamList = {}, qParam;
var urlQueryString = decodeURIComponent(window.top.location.search.substring(1));
if (urlQueryString) {
var queryStringPairs = urlQueryString.split('&');
for (var i = 0; i < queryStringPairs.length; i++) {
qParam = queryStringPairs[i].split('=');
queryParamList[qParam[0]] = qParam[1];
}
return queryParamList;
} else {
return null;
}
}
/**
* Web socket On Open
*/
var webSocketOnOpen = function () {
var params = getAllQueryParamsFromURL();
var deviceId;
var owner;
if (params) {
owner = params["owner"];
deviceId = params["deviceId"];
}
var filterPropNames = ["meta_owner", "meta_deviceId"];
var filterPropVals = [owner, deviceId];
var data = getWebsocketSubscriptionMessage(stream, streamVersion, filterPropNames, filterPropVals);
websocket.send(data);
};
/**
* On server sends a message
*/
var webSocketOnMessage = function (evt) {
var event = evt.data;
var array = JSON.parse(event);
constructPayload(array);
};
/**
* On server close
*/
var webSocketOnClose =function (e) {
if(isErrorOccured){
if(processMode != CONSTANTS.processModeWebSocket){
firstPollingAttempt = true;
pollingContinue = true;
startPoll();
}
} else{
if(!terminateWebsocketInstance){
waitForSocketConnection(websocket);
} else{
terminateWebsocketInstance = false;
}
}
};
/**
* On server Error
*/
var webSocketOnError = function (err) {
var error = "Error: Cannot connect to Websocket URL:" + webSocketUrl + " .Hence closing the connection!";
onErrorFunction(error);
isErrorOccured = true;
};
/**
* Gracefully increments the connection retry
*/
var waitTime = CONSTANTS.numThousand;
function waitForSocketConnection(socket, callback){
setTimeout(
function () {
if (socket.readyState === 1) {
initializeWebSocket(webSocketUrl);
console.log("Connection is made");
if(callback != null){
callback();
}
return;
} else {
websocket = new WebSocket(webSocketUrl);
waitTime += CONSTANTS.websocketTimeAppender;
waitForSocketConnection(websocket, callback);
}
}, waitTime);
}
/**
* Polling to retrieve events from http request periodically
*/
function startPoll(){
(function poll(){
setTimeout(function(){
httpUrl = CONSTANTS.urlSecureTransportHttp + cepHostName + CONSTANTS.colon + cepPortNumber +
CONSTANTS.urlSeperator + CONSTANTS.httpEventRetrievalEndpoint + CONSTANTS.queryParamStreamName + stream +
CONSTANTS.queryParamStreamVersion + streamVersion + CONSTANTS.queryParamLastUpdatedTime + lastUpdatedtime;;
$.getJSON(httpUrl, function(responseText) {
if(firstPollingAttempt){
/*var data = $("textarea#idConsole").val();
$("textarea#idConsole").val(data + "Successfully connected to HTTP.");*/
firstPollingAttempt = false;
}
var eventList = $.parseJSON(responseText.events);
if(eventList.length != 0){
lastUpdatedtime = responseText.lastEventTime;
for(var i=0;i<eventList.length;i++){
var arr = eventList[i];
constructPayload(arr);
}
}
if(pollingContinue){
startPoll();
}
})
.fail(function(errorData) {
var errorData = JSON.parse(errorData.responseText);
onErrorFunction(errorData.error);
});
}, polingInterval);
})()
}
function stopPollingProcesses(){
//stopping the Websocket
if(websocket != null){
terminateWebsocketInstance = true;
websocket.close();
}
//stopping the HTTPS Request
pollingContinue = false;
}
function constructPayload(eventsArray){
var streamId = stream + CONSTANTS.colon + streamVersion;
var twoDimentionalArray = [eventsArray];
onSuccessFunction(streamId,twoDimentionalArray);
}

@ -1,3 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
~ Copyright (c) 2016, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
~
@ -15,12 +16,8 @@
~ specific language governing permissions and limitations
~ under the License.
-->
<WindowsPlugin>
<AuthPolicy>Federated</AuthPolicy>
<Password>wso2carbon</Password>
<PrivateKeyPassword>cacert</PrivateKeyPassword>
<SignedCertCN>CN=mdmcn</SignedCertCN>
<SignedCertNotBefore>3</SignedCertNotBefore>
<SignedCertNotAfter>300</SignedCertNotAfter>
<domain>wso2.com</domain>
</WindowsPlugin>
<artifact name= "android_accelerometer_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
<file>ANDROID_ACCELEROMETER_GADGET</file>
</artifact>

@ -0,0 +1,23 @@
<?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.
-->
<artifact name= "android_accelerometer_stats_event_sink" version="1.0.0" type="analytics/eventstore" serverRole="DataAnalyticsServer">
<file>org_wso2_iot_android_accelerometer_stats.xml</file>
</artifact>

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EventStoreConfiguration>
<TableSchema>
<ColumnDefinition>
<Name>meta_owner</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>meta_deviceId</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>meta_timestamp</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>LONG</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>axis</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>value</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>FLOAT</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>year</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>INTEGER</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>month</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>INTEGER</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>day</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>INTEGER</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>hour</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>INTEGER</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>minute</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>INTEGER</Type>
</ColumnDefinition>
</TableSchema>
<Source>
<StreamId>org.wso2.iot.android.accelerometer.stats:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>
</EventStoreConfiguration>

@ -0,0 +1,23 @@
<?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.
-->
<artifact name= "android_accelerometer_stats_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
<file>org.wso2.iot.android.accelerometer.stats_1.0.0.json</file>
</artifact>

@ -0,0 +1,50 @@
{
"name": "org.wso2.iot.android.accelerometer.stats",
"version": "1.0.0",
"nickName": "",
"description": "",
"metaData": [
{
"name": "owner",
"type": "STRING"
},
{
"name": "deviceId",
"type": "STRING"
},
{
"name": "timestamp",
"type": "LONG"
}
],
"payloadData": [
{
"name": "axis",
"type": "STRING"
},
{
"name": "value",
"type": "FLOAT"
},
{
"name": "year",
"type": "INT"
},
{
"name": "month",
"type": "INT"
},
{
"name": "day",
"type": "INT"
},
{
"name": "hour",
"type": "INT"
},
{
"name": "minute",
"type": "INT"
}
]
}

@ -0,0 +1,23 @@
<?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.
-->
<artifact name= "android_accelerometer_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
<file>org.wso2.iot.android.accelerometer_1.0.0.json</file>
</artifact>

@ -0,0 +1,30 @@
{
"name": "org.wso2.iot.android.accelerometer",
"version": "1.0.0",
"nickName": "",
"description": "",
"metaData": [
{
"name": "owner",
"type": "STRING"
},
{
"name": "deviceId",
"type": "STRING"
},
{
"name": "timestamp",
"type": "LONG"
}
],
"payloadData": [
{
"name": "axis",
"type": "STRING"
},
{
"name": "value",
"type": "FLOAT"
}
]
}

@ -0,0 +1,24 @@
<?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.
-->
<artifact name= "android_accelerometer_ui_event_publisher" version="1.0.0" type="event/publisher"
serverRole="DataAnalyticsServer">
<file>org.wso2.iot.android.accelerometer.ui.publisher.xml</file>
</artifact>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="org.wso2.iot.android.accelerometer.ui.publisher"
processing="enable" statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="org.wso2.iot.android.accelerometer" version="1.0.0"/>
<mapping customMapping="disable" type="wso2event"/>
<to eventAdapterType="ui"/>
</eventPublisher>

@ -1,5 +1,5 @@
/* Enter a unique ExecutionPlan */
@Plan:name('Andriod-Audio-Filter-ExecutionPlan')
@Plan:name('Android-Audio-Filter-ExecutionPlan')
/* Enter a unique description for ExecutionPlan */
@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')
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);
from AudioStream select meta_owner, meta_deviceId, meta_timestamp, ifThenElse(audio_playing, 'ON', 'OFF') as audio,

@ -0,0 +1,24 @@
<?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.
-->
<artifact name= "android_android_audio_filter_executionplan" version="1.0.0" type="event/execution-plan"
serverRole="DataAnalyticsServer">
<file>Android-Audio-Filter-ExecutionPlan.siddhiql</file>
</artifact>

@ -32,6 +32,94 @@ define stream SmsStream (meta_owner string, meta_deviceId string, meta_timestamp
@Export('org.wso2.geo.LocationStream:1.0.0')
define stream geoLocationStream (id string, timeStamp long, latitude double, longitude double, type string, speed float, heading float);
@Export('org.wso2.iot.android.accelerometer:1.0.0')
define stream AccelerometerStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value float);
@Export('org.wso2.iot.android.gyroscope:1.0.0')
define stream GyroscopeStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value float);
@Export('org.wso2.iot.android.magnetic:1.0.0')
define stream MagneticStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value float);
@Export('org.wso2.iot.android.gravity:1.0.0')
define stream GravityStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
@Export('org.wso2.iot.android.rotation:1.0.0')
define stream RotationStream (meta_owner string, meta_deviceId string, meta_timestamp long, axis string, value float);
@Export('org.wso2.iot.android.pressure:1.0.0')
define stream PressureStream (meta_owner string, meta_deviceId string, meta_timestamp long, pressure float);
@Export('org.wso2.iot.android.light:1.0.0')
define stream LightStream (meta_owner string, meta_deviceId string, meta_timestamp long, light float);
@Export('org.wso2.iot.android.proximity:1.0.0')
define stream ProximityStream (meta_owner string, meta_deviceId string, meta_timestamp long, proximity float);
from AndroidSense[meta_type == 'accelerometer']
select meta_owner, meta_deviceId, meta_timestamp, 'X' as axis, accelerometer_x as value
insert into AccelerometerStream;
from AndroidSense[meta_type == 'accelerometer']
select meta_owner, meta_deviceId, meta_timestamp, 'Y' as axis, accelerometer_y as value
insert into AccelerometerStream;
from AndroidSense[meta_type == 'accelerometer']
select meta_owner, meta_deviceId, meta_timestamp, 'Z' as axis, accelerometer_z as value
insert into AccelerometerStream;
from AndroidSense[meta_type == 'gyroscope']
select meta_owner, meta_deviceId, meta_timestamp, 'X' as axis, gyroscope_x as value
insert into GyroscopeStream;
from AndroidSense[meta_type == 'gyroscope']
select meta_owner, meta_deviceId, meta_timestamp, 'Y' as axis, gyroscope_y as value
insert into GyroscopeStream;
from AndroidSense[meta_type == 'gyroscope']
select meta_owner, meta_deviceId, meta_timestamp, 'Z' as axis, gyroscope_z as value
insert into GyroscopeStream;
from AndroidSense[meta_type == 'magnetic']
select meta_owner, meta_deviceId, meta_timestamp, 'X' as axis, magnetic_x as value
insert into MagneticStream;
from AndroidSense[meta_type == 'magnetic']
select meta_owner, meta_deviceId, meta_timestamp, 'Y' as axis, magnetic_y as value
insert into MagneticStream;
from AndroidSense[meta_type == 'magnetic']
select meta_owner, meta_deviceId, meta_timestamp, 'Z' as axis, magnetic_z as value
insert into MagneticStream;
from AndroidSense[meta_type == 'gravity']
select meta_owner, meta_deviceId, meta_timestamp, gravity_x as x, gravity_y as y, gravity_z as z
insert into GravityStream;
from AndroidSense[meta_type == 'rotation']
select meta_owner, meta_deviceId, meta_timestamp, 'X' as axis, rotation_x as value
insert into RotationStream;
from AndroidSense[meta_type == 'rotation']
select meta_owner, meta_deviceId, meta_timestamp, 'Y' as axis, rotation_y as value
insert into RotationStream;
from AndroidSense[meta_type == 'rotation']
select meta_owner, meta_deviceId, meta_timestamp, 'Z' as axis, rotation_z as value
insert into RotationStream;
from AndroidSense[meta_type == 'pressure']
select meta_owner, meta_deviceId, meta_timestamp, pressure as pressure
insert into PressureStream;
from AndroidSense[meta_type == 'light']
select meta_owner, meta_deviceId, meta_timestamp, light as light
insert into LightStream;
from AndroidSense[meta_type == 'proximity']
select meta_owner, meta_deviceId, meta_timestamp, proximity as proximity
insert into ProximityStream;
from AndroidSense[meta_type == 'sms']
select meta_owner, meta_deviceId, meta_timestamp, sms_number as number, action as type, "" as body
insert into SmsStream;

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
* 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

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<Editable>true</Editable>
<Name>AndriodCallScript</Name>
<Name>AndroidBatteryScript</Name>
<Script> CREATE TEMPORARY TABLE AndroidBatteryData USING CarbonAnalytics OPTIONS(tableName
"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");
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
FROM AndroidBatteryData
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"?>
<Analytics>
<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");
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">
<file>AndriodCallScript.xml</file>
<file>AndroidCallScript.xml</file>
</artifact>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<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");
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">
<file>AndriodDataScript.xml</file>
<file>AndroidDataScript.xml</file>
</artifact>

@ -10,6 +10,6 @@
"limit": "1",
"provider-name": "batch",
"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')){
deviceDetailsTable += getDeviceDetailTableEntry('Owner:', deviceDetails.meta_username)
}
if (deviceDetails.hasOwnProperty('andriod_version')){
deviceDetailsTable += getDeviceDetailTableEntry('Andriod Version:', deviceDetails.andriod_version)
if (deviceDetails.hasOwnProperty('android_version')){
deviceDetailsTable += getDeviceDetailTableEntry('Android Version:', deviceDetails.android_version)
}
if (deviceDetails.hasOwnProperty('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">
<file>org_wso2_iot_andriod_device_details.xml</file>
<file>org_wso2_iot_android_device_details.xml</file>
</artifact>

@ -10,7 +10,7 @@
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>andriod_version</Name>
<Name>android_version</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
@ -83,7 +83,7 @@
</ColumnDefinition>
</TableSchema>
<Source>
<StreamId>org.wso2.iot.andriod.device.details:1.0.0</StreamId>
<StreamId>org.wso2.iot.android.device.details:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>

@ -18,6 +18,6 @@
-->
<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>

@ -1,8 +1,8 @@
{
"name": "org.wso2.iot.andriod.device.details",
"name": "org.wso2.iot.android.device.details",
"version": "1.0.0",
"nickName": "",
"description": "Details of the Andriod Device",
"description": "Details of the Android Device",
"metaData": [
{
"name": "username",
@ -11,7 +11,7 @@
],
"payloadData": [
{
"name": "andriod_version",
"name": "android_version",
"type": "STRING"
},
{

@ -18,6 +18,6 @@
-->
<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>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="org.wso2.iot.android.filtered.audio.ui.publisher"
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"/>
<to eventAdapterType="ui"/>
</eventPublisher>

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<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");
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">
<file>AndriodFrequentContactsScript.xml</file>
<file>AndroidFrequentContactsScript.xml</file>
</artifact>

@ -0,0 +1,18 @@
@Plan:name('Android-Gravity-ExecutionPlan')
@Plan:description('Process gravity changes.')
@Import('org.wso2.iot.android.gravity:1.0.0')
define stream GravityStream (meta_owner string, meta_deviceId string, meta_timestamp long, x float, y float, z float);
@Export('org.wso2.iot.android.gravity.stats:1.0.0')
define stream GravityStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, x
float, y float, z float, year int, month int, day int, hour int, minute int);
partition with (meta_deviceId of GravityStream)
begin
from GravityStream
select meta_owner, meta_deviceId, meta_timestamp, x, y, z, time:extract
(meta_timestamp, 'year') as year, time:extract(meta_timestamp, 'month') as month, time:extract(meta_timestamp, 'day') as day, time:extract(meta_timestamp, 'hour') as hour, time:extract(meta_timestamp, 'minute') as minute
insert into GravityStatsStream;
end;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save