forked from community/device-mgt-plugins
parent
722593a51f
commit
f3fc531a53
@ -0,0 +1,38 @@
|
|||||||
|
<?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 name="create-android-sense-capps" default="zip" basedir=".">
|
||||||
|
|
||||||
|
<property name="project-name" value="${ant.project.name}"/>
|
||||||
|
<property name="target-dir" value="target/carbonapps"/>
|
||||||
|
<property name="src-dir" value="src/main/resources/carbonapps"/>
|
||||||
|
|
||||||
|
<property name="Android_Sense_dir" value="android_analytics"/>
|
||||||
|
|
||||||
|
<target name="clean">
|
||||||
|
<delete dir="${target-dir}" />
|
||||||
|
</target>
|
||||||
|
|
||||||
|
<target name="zip" depends="clean">
|
||||||
|
<mkdir dir="${target-dir}"/>
|
||||||
|
<zip destfile="${target-dir}/${Android_Sense_dir}.car">
|
||||||
|
<zipfileset dir="${src-dir}/${Android_Sense_dir}"/>
|
||||||
|
</zip>
|
||||||
|
</target>
|
||||||
|
</project>
|
@ -0,0 +1,75 @@
|
|||||||
|
<?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>
|
||||||
|
<artifactId>androidsense-plugin</artifactId>
|
||||||
|
<groupId>org.wso2.carbon.devicemgt-plugins</groupId>
|
||||||
|
<version>3.0.1-SNAPSHOT</version>
|
||||||
|
<relativePath>../pom.xml</relativePath>
|
||||||
|
</parent>
|
||||||
|
|
||||||
|
<modelVersion>4.0.0</modelVersion>
|
||||||
|
<artifactId>org.wso2.carbon.device.mgt.iot.androidsense.analytics</artifactId>
|
||||||
|
<name>WSO2 Carbon - IoT Server Android Sense Analytics capp</name>
|
||||||
|
<packaging>pom</packaging>
|
||||||
|
|
||||||
|
<build>
|
||||||
|
<plugins>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-antrun-plugin</artifactId>
|
||||||
|
<version>1.7</version>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<phase>process-resources</phase>
|
||||||
|
<configuration>
|
||||||
|
<target>
|
||||||
|
<ant antfile="build.xml" target="zip" />
|
||||||
|
</target>
|
||||||
|
</configuration>
|
||||||
|
<goals>
|
||||||
|
<goal>run</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
<plugin>
|
||||||
|
<artifactId>maven-assembly-plugin</artifactId>
|
||||||
|
<version>2.5.5</version>
|
||||||
|
<configuration>
|
||||||
|
<finalName>${project.artifactId}-${carbon.devicemgt.plugins.version}</finalName>
|
||||||
|
<appendAssemblyId>false</appendAssemblyId>
|
||||||
|
<descriptors>
|
||||||
|
<descriptor>src/assembly/src.xml</descriptor>
|
||||||
|
</descriptors>
|
||||||
|
</configuration>
|
||||||
|
<executions>
|
||||||
|
<execution>
|
||||||
|
<id>create-archive</id>
|
||||||
|
<phase>package</phase>
|
||||||
|
<goals>
|
||||||
|
<goal>single</goal>
|
||||||
|
</goals>
|
||||||
|
</execution>
|
||||||
|
</executions>
|
||||||
|
</plugin>
|
||||||
|
</plugins>
|
||||||
|
</build>
|
||||||
|
|
||||||
|
</project>
|
@ -0,0 +1,36 @@
|
|||||||
|
<!--
|
||||||
|
~ 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.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<assembly
|
||||||
|
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||||
|
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
|
||||||
|
<id>src</id>
|
||||||
|
<formats>
|
||||||
|
<format>zip</format>
|
||||||
|
</formats>
|
||||||
|
<includeBaseDirectory>false</includeBaseDirectory>
|
||||||
|
<baseDirectory>${basedir}/src</baseDirectory>
|
||||||
|
<fileSets>
|
||||||
|
<fileSet>
|
||||||
|
<directory>${basedir}/target/carbonapps</directory>
|
||||||
|
<outputDirectory>/</outputDirectory>
|
||||||
|
<useDefaultExcludes>true</useDefaultExcludes>
|
||||||
|
</fileSet>
|
||||||
|
</fileSets>
|
||||||
|
</assembly>
|
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"chart-conf": {
|
||||||
|
"chart-name": "bar-chart",
|
||||||
|
"color": "action",
|
||||||
|
"gadget-name": "Android Active Stack Chart",
|
||||||
|
"maxLength": "45",
|
||||||
|
"mode": "stack",
|
||||||
|
"x": "timestamp",
|
||||||
|
"y": "duration"
|
||||||
|
},
|
||||||
|
"provider-conf": {
|
||||||
|
"limit": "45",
|
||||||
|
"provider-name": "batch",
|
||||||
|
"query": "",
|
||||||
|
"tableName": "ANDROID_ACTIVE_STAT_PER_DAY"
|
||||||
|
}
|
||||||
|
}
|
@ -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,14 @@
|
|||||||
|
{
|
||||||
|
"id": "Android_Active_Stack_Chart",
|
||||||
|
"title": "Android Active Stack Chart",
|
||||||
|
"type": "gadget",
|
||||||
|
"thumbnail": "gadget/Android_Active_Stack_Chart/thumbnail.png",
|
||||||
|
"data": {
|
||||||
|
"url": "gadget/Android_Active_Stack_Chart/gadget.xml"
|
||||||
|
},
|
||||||
|
"toolbarButtons":{
|
||||||
|
"default":{
|
||||||
|
"maximize": false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<Module>
|
||||||
|
<ModulePrefs title="Android Active Stack Chart" description="This is a template gadget">
|
||||||
|
<Require feature="dynamic-height"/>
|
||||||
|
<Require feature="wso2-gadgets-identity"/>
|
||||||
|
</ModulePrefs>
|
||||||
|
|
||||||
|
<UserPref name="refreshInterval"
|
||||||
|
display_name="Refresh Interval"
|
||||||
|
default_value="1000000"/>
|
||||||
|
|
||||||
|
<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 -->
|
||||||
|
|
||||||
|
<!-- 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/gadget-util.js"></script>
|
||||||
|
<script src="js/core/bar-chart-api.js"></script>
|
||||||
|
<script src="js/core/gadget-core.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="canvas"></div>
|
||||||
|
</body>
|
||||||
|
]]>
|
||||||
|
</Content>
|
||||||
|
</Module>
|
@ -0,0 +1,147 @@
|
|||||||
|
/*
|
||||||
|
* 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 + '/bar-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) {
|
||||||
|
var schema = toVizGrammarSchema(_schema);
|
||||||
|
var view = {
|
||||||
|
id: "chart-0",
|
||||||
|
schema: schema,
|
||||||
|
chartConfig: buildChartConfig(chartConfig),
|
||||||
|
data: function() {
|
||||||
|
if(data) {
|
||||||
|
var result = [];
|
||||||
|
data.forEach(function(item) {
|
||||||
|
var row = [];
|
||||||
|
schema[0].metadata.names.forEach(function(name) {
|
||||||
|
if(name === chartConfig.x){
|
||||||
|
var date = new Date(item[name]);
|
||||||
|
var month = date.getMonth() + 1;
|
||||||
|
month = ("0" + month).slice(-2);
|
||||||
|
row.push(date.getDate()+'/'+month+'/'+ date.getFullYear());
|
||||||
|
// row.push(item[name]);
|
||||||
|
} else{
|
||||||
|
if(name === chartConfig.y){
|
||||||
|
row.push(item[name] / (1000*60*60));
|
||||||
|
} else{
|
||||||
|
row.push(item[name]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
result.push(row);
|
||||||
|
});
|
||||||
|
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.charts = [];
|
||||||
|
conf.maxLength = _chartConfig.maxLength;
|
||||||
|
conf.charts[0] = {
|
||||||
|
type : "bar",
|
||||||
|
y: _chartConfig.y
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_chartConfig.color != "None") {
|
||||||
|
conf.charts[0].color = _chartConfig.color;
|
||||||
|
conf.charts[0].mode = _chartConfig.mode;
|
||||||
|
}
|
||||||
|
conf.legendOffset = -30;
|
||||||
|
conf.padding = {"top": 10, "left": 100, "bottom": 70, "right": 0};
|
||||||
|
conf.xTitle = "Date";
|
||||||
|
conf.yTitle = "Duration (Hours)";
|
||||||
|
conf.xAxisAngle = "true";
|
||||||
|
console.log('chart config : ');
|
||||||
|
console.log(conf);
|
||||||
|
return conf;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}());
|
@ -0,0 +1,195 @@
|
|||||||
|
/*
|
||||||
|
* 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 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);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* require the existing config.json and push any dynamic fields that needs to be populated in the UI
|
||||||
|
*/
|
||||||
|
getConfig = function() {
|
||||||
|
var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
|
||||||
|
var tables;
|
||||||
|
try {
|
||||||
|
tables = JSON.parse(connector.getTableList(loggedInUser).getMessage());
|
||||||
|
} catch (e) {
|
||||||
|
log.error(e);
|
||||||
|
}
|
||||||
|
var configs = formConfig.config;
|
||||||
|
configs.forEach(function(config) {
|
||||||
|
if (config.fieldName === TABLE_NAME) {
|
||||||
|
config.valueSet = tables;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
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 "PULL";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns an array of column names & types
|
||||||
|
* @param providerConfig
|
||||||
|
*/
|
||||||
|
getSchema = function(providerConfig) {
|
||||||
|
var schema = [];
|
||||||
|
var tableName = providerConfig["tableName"];
|
||||||
|
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";
|
||||||
|
// log.info(columns[name]);
|
||||||
|
if(name === 'timestamp'){
|
||||||
|
type = 'string';
|
||||||
|
}
|
||||||
|
else 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(providerConfig, limit) {
|
||||||
|
var tableName = providerConfig.tableName;
|
||||||
|
var query = providerConfig.query;
|
||||||
|
var limit = 100;
|
||||||
|
if (providerConfig.limit) {
|
||||||
|
limit = providerConfig.limit;
|
||||||
|
}
|
||||||
|
var result;
|
||||||
|
//if there's a filter present, we should perform a Lucene search instead of reading the table
|
||||||
|
if (query) {
|
||||||
|
var filter = {
|
||||||
|
"query": query,
|
||||||
|
"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);
|
||||||
|
}
|
||||||
|
//log.info(data);
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
|
||||||
|
}());
|
@ -0,0 +1,85 @@
|
|||||||
|
/*
|
||||||
|
* 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 refreshInterval;
|
||||||
|
var providerData;
|
||||||
|
|
||||||
|
var CHART_CONF = 'chart-conf';
|
||||||
|
var PROVIDER_CONF = 'provider-conf';
|
||||||
|
|
||||||
|
var REFRESH_INTERVAL = 'refreshInterval';
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
getProviderData();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var getProviderData = function (){
|
||||||
|
$.ajax({
|
||||||
|
url: gadgetLocation + '/gadget-controller.jag?action=getData',
|
||||||
|
method: "POST",
|
||||||
|
data: JSON.stringify(conf),
|
||||||
|
contentType: "application/json",
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
providerData = data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return providerData;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var drawGadget = function (){
|
||||||
|
|
||||||
|
draw('#canvas', conf[CHART_CONF], schema, providerData);
|
||||||
|
setInterval(function() {
|
||||||
|
draw('#canvas', conf[CHART_CONF], schema, getProviderData());
|
||||||
|
},pref.getInt(REFRESH_INTERVAL));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
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_Active_Stack_Chart";
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 9.8 KiB |
@ -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_active_stack_chart_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android_Active_Stack_Chart</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"chart-conf": {
|
||||||
|
"chart-name": "line-chart",
|
||||||
|
"color": "None",
|
||||||
|
"gadget-name": "Android Active Time Chart",
|
||||||
|
"maxLength": "15",
|
||||||
|
"x": "timestamp",
|
||||||
|
"xType": "time",
|
||||||
|
"y": "duration",
|
||||||
|
"yType": "default"
|
||||||
|
},
|
||||||
|
"provider-conf": {
|
||||||
|
"limit": "15",
|
||||||
|
"provider-name": "batch",
|
||||||
|
"query": "",
|
||||||
|
"tableName": "ANDROID_ACTIVE_STAT_PER_DAY"
|
||||||
|
}
|
||||||
|
}
|
@ -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_Active_Time_Chart",
|
||||||
|
"title": "Android Active Time Chart",
|
||||||
|
"type": "gadget",
|
||||||
|
"thumbnail": "gadget/Android_Active_Time_Chart/thumbnail.png",
|
||||||
|
"data": {
|
||||||
|
"url": "gadget/Android_Active_Time_Chart/gadget.xml"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<Module>
|
||||||
|
<ModulePrefs title="Android Active Time Chart" description="This is a template gadget">
|
||||||
|
<Require feature="dynamic-height"/>
|
||||||
|
<Require feature="wso2-gadgets-identity"/>
|
||||||
|
</ModulePrefs>
|
||||||
|
|
||||||
|
<UserPref name="refreshInterval"
|
||||||
|
display_name="Refresh Interval"
|
||||||
|
default_value="1000000"/>
|
||||||
|
|
||||||
|
<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 -->
|
||||||
|
|
||||||
|
<!-- 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/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,190 @@
|
|||||||
|
/*
|
||||||
|
* 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 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);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* require the existing config.json and push any dynamic fields that needs to be populated in the UI
|
||||||
|
*/
|
||||||
|
getConfig = function() {
|
||||||
|
var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
|
||||||
|
var tables;
|
||||||
|
try {
|
||||||
|
tables = JSON.parse(connector.getTableList(loggedInUser).getMessage());
|
||||||
|
} catch (e) {
|
||||||
|
log.error(e);
|
||||||
|
}
|
||||||
|
var configs = formConfig.config;
|
||||||
|
configs.forEach(function(config) {
|
||||||
|
if (config.fieldName === TABLE_NAME) {
|
||||||
|
config.valueSet = tables;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
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 "PULL";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns an array of column names & types
|
||||||
|
* @param providerConfig
|
||||||
|
*/
|
||||||
|
getSchema = function(providerConfig) {
|
||||||
|
var schema = [];
|
||||||
|
var tableName = providerConfig["tableName"];
|
||||||
|
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(providerConfig, limit) {
|
||||||
|
var tableName = providerConfig.tableName;
|
||||||
|
var query = providerConfig.query;
|
||||||
|
var limit = 100;
|
||||||
|
if (providerConfig.limit) {
|
||||||
|
limit = providerConfig.limit;
|
||||||
|
}
|
||||||
|
var result;
|
||||||
|
//if there's a filter present, we should perform a Lucene search instead of reading the table
|
||||||
|
if (query) {
|
||||||
|
var filter = {
|
||||||
|
"query": query,
|
||||||
|
"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);
|
||||||
|
}
|
||||||
|
console.log(data);
|
||||||
|
return data;
|
||||||
|
};
|
||||||
|
}());
|
@ -0,0 +1,88 @@
|
|||||||
|
/*
|
||||||
|
* 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 refreshInterval;
|
||||||
|
var providerData;
|
||||||
|
|
||||||
|
var CHART_CONF = 'chart-conf';
|
||||||
|
var PROVIDER_CONF = 'provider-conf';
|
||||||
|
|
||||||
|
var REFRESH_INTERVAL = 'refreshInterval';
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
getProviderData();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var getProviderData = function (){
|
||||||
|
$.ajax({
|
||||||
|
url: gadgetLocation + '/gadget-controller.jag?action=getData',
|
||||||
|
method: "POST",
|
||||||
|
data: JSON.stringify(conf),
|
||||||
|
contentType: "application/json",
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
data.forEach(function(entry) {
|
||||||
|
entry.duration = entry.duration / 3600000; // Convert to hours
|
||||||
|
});
|
||||||
|
providerData = data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return providerData;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var drawGadget = function (){
|
||||||
|
|
||||||
|
draw('#canvas', conf[CHART_CONF], schema, providerData);
|
||||||
|
setInterval(function() {
|
||||||
|
draw('#canvas', conf[CHART_CONF], schema, getProviderData());
|
||||||
|
},pref.getInt(REFRESH_INTERVAL));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
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_Active_Time_Chart";
|
||||||
|
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,132 @@
|
|||||||
|
/*
|
||||||
|
* 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 = [];
|
||||||
|
data.forEach(function(item) {
|
||||||
|
var row = [];
|
||||||
|
schema[0].metadata.names.forEach(function(name) {
|
||||||
|
row.push(item[name]);
|
||||||
|
});
|
||||||
|
result.push(row);
|
||||||
|
});
|
||||||
|
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;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}());
|
After Width: | Height: | Size: 18 KiB |
@ -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_active_time_chart_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android_Active_Time_Chart</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,15 @@
|
|||||||
|
{
|
||||||
|
"chart-conf": {
|
||||||
|
"chart-name": "donut-chart",
|
||||||
|
"color": "action",
|
||||||
|
"gadget-name": "Android Activity Chart",
|
||||||
|
"maxLength": "30",
|
||||||
|
"x": "duration"
|
||||||
|
},
|
||||||
|
"provider-conf": {
|
||||||
|
"limit": "",
|
||||||
|
"provider-name": "batch",
|
||||||
|
"query": "",
|
||||||
|
"tableName": "ANDROID_ACTIVITY_STAT_PER_DAY"
|
||||||
|
}
|
||||||
|
}
|
@ -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_Activity_Chart",
|
||||||
|
"title": "Android Activity Chart",
|
||||||
|
"type": "gadget",
|
||||||
|
"thumbnail": "gadget/Android_Activity_Chart/thumbnail.png",
|
||||||
|
"data": {
|
||||||
|
"url": "gadget/Android_Activity_Chart/gadget.xml"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<Module>
|
||||||
|
<ModulePrefs title="Android Activity Chart" description="This is a template gadget">
|
||||||
|
<Require feature="dynamic-height"/>
|
||||||
|
<Require feature="wso2-gadgets-identity"/>
|
||||||
|
</ModulePrefs>
|
||||||
|
|
||||||
|
<UserPref name="refreshInterval"
|
||||||
|
display_name="Refresh Interval"
|
||||||
|
default_value="1000000"/>
|
||||||
|
|
||||||
|
<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 -->
|
||||||
|
|
||||||
|
<!-- 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/gadget-util.js"></script>
|
||||||
|
<script src="js/core/donut-chart-api.js"></script>
|
||||||
|
<script src="js/core/gadget-core.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="canvas"></div>
|
||||||
|
</body>
|
||||||
|
]]>
|
||||||
|
</Content>
|
||||||
|
</Module>
|
@ -0,0 +1,190 @@
|
|||||||
|
/*
|
||||||
|
* 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 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);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* require the existing config.json and push any dynamic fields that needs to be populated in the UI
|
||||||
|
*/
|
||||||
|
getConfig = function() {
|
||||||
|
var formConfig = require(PROVIDERS_LOCATION + '/' + PROVIDER_NAME + '/config.json');
|
||||||
|
var tables;
|
||||||
|
try {
|
||||||
|
tables = JSON.parse(connector.getTableList(loggedInUser).getMessage());
|
||||||
|
} catch (e) {
|
||||||
|
log.error(e);
|
||||||
|
}
|
||||||
|
var configs = formConfig.config;
|
||||||
|
configs.forEach(function(config) {
|
||||||
|
if (config.fieldName === TABLE_NAME) {
|
||||||
|
config.valueSet = tables;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
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 "PULL";
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* returns an array of column names & types
|
||||||
|
* @param providerConfig
|
||||||
|
*/
|
||||||
|
getSchema = function(providerConfig) {
|
||||||
|
var schema = [];
|
||||||
|
var tableName = providerConfig["tableName"];
|
||||||
|
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(providerConfig, limit) {
|
||||||
|
var tableName = providerConfig.tableName;
|
||||||
|
var query = providerConfig.query;
|
||||||
|
var limit = 100;
|
||||||
|
if (providerConfig.limit) {
|
||||||
|
limit = providerConfig.limit;
|
||||||
|
}
|
||||||
|
var result;
|
||||||
|
//if there's a filter present, we should perform a Lucene search instead of reading the table
|
||||||
|
if (query) {
|
||||||
|
var filter = {
|
||||||
|
"query": query,
|
||||||
|
"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;
|
||||||
|
};
|
||||||
|
|
||||||
|
}());
|
@ -0,0 +1,111 @@
|
|||||||
|
/*
|
||||||
|
* 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 + '/donut-chart/config.json').config;
|
||||||
|
/*
|
||||||
|
dynamic logic goes here
|
||||||
|
*/
|
||||||
|
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) {
|
||||||
|
var schema = toVizGrammarSchema(_schema);
|
||||||
|
var view = {
|
||||||
|
id: "chart-0",
|
||||||
|
schema: schema,
|
||||||
|
chartConfig: buildChartConfig(chartConfig),
|
||||||
|
data: function() {
|
||||||
|
if(data) {
|
||||||
|
var result = [];
|
||||||
|
data.forEach(function(item) {
|
||||||
|
var row = [];
|
||||||
|
schema[0].metadata.names.forEach(function(name) {
|
||||||
|
row.push(item[name]);
|
||||||
|
});
|
||||||
|
result.push(row);
|
||||||
|
});
|
||||||
|
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.maxLength = _chartConfig.maxLength;
|
||||||
|
conf.charts = [];
|
||||||
|
conf.charts[0] = {
|
||||||
|
type : "arc",
|
||||||
|
color: _chartConfig.color,
|
||||||
|
mode: "donut"
|
||||||
|
};
|
||||||
|
conf.legendOffset = -30;
|
||||||
|
return conf;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}());
|
@ -0,0 +1,101 @@
|
|||||||
|
/*
|
||||||
|
* 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 refreshInterval;
|
||||||
|
var providerData;
|
||||||
|
|
||||||
|
var CHART_CONF = 'chart-conf';
|
||||||
|
var PROVIDER_CONF = 'provider-conf';
|
||||||
|
|
||||||
|
var REFRESH_INTERVAL = 'refreshInterval';
|
||||||
|
|
||||||
|
var init = function () {
|
||||||
|
$.ajax({
|
||||||
|
url: gadgetLocation + '/conf.json',
|
||||||
|
method: "GET",
|
||||||
|
contentType: "application/json",
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
conf = JSON.parse(data);
|
||||||
|
// Update the date to yesterday
|
||||||
|
var currentTime = new Date();
|
||||||
|
|
||||||
|
// returns the month (from 0 to 11)
|
||||||
|
var month = currentTime.getMonth() + 1
|
||||||
|
|
||||||
|
// returns the day of the month (from 1 to 31)
|
||||||
|
var day = currentTime.getDate() - 1 // Yesterday
|
||||||
|
|
||||||
|
// returns the year (four digits)
|
||||||
|
var year = currentTime.getFullYear()
|
||||||
|
|
||||||
|
conf['provider-conf'].query = "year: " + year + " AND month: " + month + " AND day: " + day;
|
||||||
|
$.ajax({
|
||||||
|
url: gadgetLocation + '/gadget-controller.jag?action=getSchema',
|
||||||
|
method: "POST",
|
||||||
|
data: JSON.stringify(conf),
|
||||||
|
contentType: "application/json",
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
schema = data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
getProviderData();
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
var getProviderData = function (){
|
||||||
|
$.ajax({
|
||||||
|
url: gadgetLocation + '/gadget-controller.jag?action=getData',
|
||||||
|
method: "POST",
|
||||||
|
data: JSON.stringify(conf),
|
||||||
|
contentType: "application/json",
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
data.forEach(function(entry) {
|
||||||
|
entry.duration = entry.duration / 60000; // Convert to minutes
|
||||||
|
});
|
||||||
|
providerData = data;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return providerData;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
var drawGadget = function (){
|
||||||
|
|
||||||
|
draw('#canvas', conf[CHART_CONF], schema, providerData);
|
||||||
|
setInterval(function() {
|
||||||
|
draw('#canvas', conf[CHART_CONF], schema, getProviderData());
|
||||||
|
},pref.getInt(REFRESH_INTERVAL));
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
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_Activity_Chart";
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 15 KiB |
@ -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_activity_chart_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android_Activity_Chart</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<Analytics>
|
||||||
|
<Editable>true</Editable>
|
||||||
|
<Name>AndroidActivityScript</Name>
|
||||||
|
<Script> CREATE TEMPORARY TABLE AndroidActivityData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_ACTIVITY_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_ACTIVITY_STATS, DAY");
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE Android_Activity_Stat_Per_Day USING CarbonAnalytics
|
||||||
|
OPTIONS (tableName "Android_Activity_Stat_Per_Day",
|
||||||
|
schema "owner STRING, deviceId STRING, action STRING, duration LONG -i, year INT -i, month INT -i, day INT -i, _timestamp LONG -i",
|
||||||
|
primaryKeys "year, month, day, deviceId, action, owner",
|
||||||
|
mergeSchema "false");
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE Android_Active_Stat_Per_Day USING CarbonAnalytics
|
||||||
|
OPTIONS (tableName "Android_Active_Stat_Per_Day",
|
||||||
|
schema "owner STRING, deviceId STRING, action STRING, duration LONG -i, year INT -i, month INT -i, day INT -i, timestamp LONG -i",
|
||||||
|
primaryKeys "year, month, day, deviceId, owner, action",
|
||||||
|
mergeSchema "false");
|
||||||
|
|
||||||
|
INSERT INTO TABLE Android_Activity_Stat_Per_Day
|
||||||
|
SELECT meta_owner as owner, meta_deviceId as deviceId, action, sum(duration) as duration, year, month, day, getDateStartingTime(year, month, day) as _timestamp
|
||||||
|
FROM AndroidActivityData
|
||||||
|
GROUP BY year, month, day, meta_deviceId, action, meta_owner ORDER BY _timestamp DESC;
|
||||||
|
|
||||||
|
INSERT INTO TABLE Android_Active_Stat_Per_Day
|
||||||
|
SELECT meta_owner as owner, meta_deviceId as deviceId, action, sum(duration) as duration, year, month, day, getDateStartingTime(year, month, day) as timestamp
|
||||||
|
FROM AndroidActivityData WHERE action = 'RUNNING' OR action = 'WALKING' OR action = 'CYCLING'
|
||||||
|
GROUP BY year, month, day, meta_deviceId, action, meta_owner ORDER BY timestamp ASC;
|
||||||
|
|
||||||
|
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_ACTIVITY_STATS; </Script>
|
||||||
|
</Analytics>
|
@ -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_activity_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
|
<file>AndroidActivityScript.xml</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_activity_stats_event_sink" version="1.0.0" type="analytics/eventstore" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org_wso2_iot_android_activity_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>action</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>STRING</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>duration</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>LONG</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.activity.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_activity_stats_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org.wso2.iot.android.activity.stats_1.0.0.json</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,50 @@
|
|||||||
|
{
|
||||||
|
"name": "org.wso2.iot.android.activity.stats",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"nickName": "",
|
||||||
|
"description": "",
|
||||||
|
"metaData": [
|
||||||
|
{
|
||||||
|
"name": "owner",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deviceId",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timestamp",
|
||||||
|
"type": "LONG"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"payloadData": [
|
||||||
|
{
|
||||||
|
"name": "action",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "duration",
|
||||||
|
"type": "LONG"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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_activity_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org.wso2.iot.android.activity_1.0.0.json</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
{
|
||||||
|
"name": "org.wso2.iot.android.activity",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"nickName": "",
|
||||||
|
"description": "",
|
||||||
|
"metaData": [
|
||||||
|
{
|
||||||
|
"name": "owner",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deviceId",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timestamp",
|
||||||
|
"type": "LONG"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"payloadData": [
|
||||||
|
{
|
||||||
|
"name": "action",
|
||||||
|
"type": "STRING"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
/* Enter a unique ExecutionPlan */
|
||||||
|
@Plan:name('Andriod-Audio-Filter-ExecutionPlan')
|
||||||
|
|
||||||
|
/* Enter a unique description for ExecutionPlan */
|
||||||
|
@Plan:description('This converts the true/false params of the orgininal stream into ON/OFF')
|
||||||
|
|
||||||
|
/* define streams/tables and write queries here ... */
|
||||||
|
|
||||||
|
@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')
|
||||||
|
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,
|
||||||
|
ifThenElse(headset_on, 'ON', 'OFF') as headset, music_volume insert into FilteredAudioStream;
|
@ -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_andriod_audio_filter_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Andriod-Audio-Filter-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,22 @@
|
|||||||
|
@Plan:name('Android-Activity-ExecutionPlan')
|
||||||
|
|
||||||
|
@Plan:description('Identify the start and end of each activities')
|
||||||
|
|
||||||
|
@Import('org.wso2.iot.android.activity:1.0.0')
|
||||||
|
define stream ActivitySream (meta_owner string, meta_deviceId string, meta_timestamp long, action string);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.activity.stats:1.0.0')
|
||||||
|
define stream ActivityStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, action string, duration long, year int, month int, day int, hour int, minute int);
|
||||||
|
|
||||||
|
partition with (meta_deviceId of ActivitySream)
|
||||||
|
begin
|
||||||
|
from every preActivity = ActivitySream, postActivity = ActivitySream[preActivity.action != action AND preActivity.meta_timestamp <= meta_timestamp]
|
||||||
|
select preActivity.meta_owner as meta_owner, preActivity.meta_deviceId as meta_deviceId,
|
||||||
|
preActivity.action as preAction, postActivity.action as postAction, preActivity.meta_timestamp as preTimestamp, postActivity.meta_timestamp as postTimestamp
|
||||||
|
insert into #ActivityChangeEventStream;
|
||||||
|
|
||||||
|
from every preEvent = #ActivityChangeEventStream, postEvent = #ActivityChangeEventStream[preEvent.postAction == preAction]
|
||||||
|
select preEvent.meta_owner as meta_owner, preEvent.meta_deviceId as meta_deviceId, postEvent.preTimestamp as meta_timestamp, preEvent.postAction as action, (postEvent.postTimestamp - preEvent.postTimestamp) as duration,
|
||||||
|
time:extract(postEvent.preTimestamp, 'year') as year, time:extract(postEvent.preTimestamp, 'month') as month, time:extract(postEvent.preTimestamp, 'day') as day, time:extract(postEvent.preTimestamp, 'hour') as hour, time:extract(postEvent.preTimestamp, 'minute') as minute
|
||||||
|
insert into ActivityStatsStream;
|
||||||
|
end;
|
@ -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_android_activity_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-Activity-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
/* Enter a unique ExecutionPlan */
|
||||||
|
@Plan:name('Android-Audio-ExecutionPlan')
|
||||||
|
|
||||||
|
@Plan:description('Find the audio listening through head set')
|
||||||
|
|
||||||
|
|
||||||
|
@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.android.headset.stats:1.0.0')
|
||||||
|
define stream HeadsetStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, duration long, year int, month int, day int, hour int, minute int);
|
||||||
|
|
||||||
|
partition with (meta_deviceId of AudioStream)
|
||||||
|
begin
|
||||||
|
from every preEvent = AudioStream[audio_playing AND headset_on], postEvent = AudioStream[(NOT audio_playing OR NOT headset_on) AND preEvent.meta_timestamp <= meta_timestamp]
|
||||||
|
select preEvent.meta_owner as meta_owner, preEvent.meta_deviceId as meta_deviceId, postEvent.meta_timestamp as timestamp, 'ACTIVE' as state
|
||||||
|
insert into #StateChangeEventStream;
|
||||||
|
|
||||||
|
from every preEvent = AudioStream[NOT audio_playing OR NOT headset_on], postEvent = AudioStream[audio_playing AND headset_on AND preEvent.meta_timestamp <= meta_timestamp]
|
||||||
|
select preEvent.meta_owner as meta_owner, preEvent.meta_deviceId as meta_deviceId, postEvent.meta_timestamp as timestamp, 'INACTIVE' as state
|
||||||
|
insert into #StateChangeEventStream;
|
||||||
|
|
||||||
|
from every preEvent = #StateChangeEventStream[state == 'ACTIVE'], postEvent = #StateChangeEventStream[state == 'INACTIVE']
|
||||||
|
select preEvent.meta_owner as meta_owner, preEvent.meta_deviceId as meta_deviceId, preEvent.timestamp as meta_timestamp, (postEvent.timestamp - preEvent.timestamp) as duration,
|
||||||
|
time:extract(preEvent.timestamp, 'year') as year, time:extract(preEvent.timestamp, 'month') as month, time:extract(preEvent.timestamp, 'day') as day, time:extract(preEvent.timestamp, 'hour') as hour, time:extract(preEvent.timestamp, 'minute') as minute
|
||||||
|
insert into HeadsetStatsStream;
|
||||||
|
end;
|
@ -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_android_audio_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-Audio-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,17 @@
|
|||||||
|
@Plan:name('Android-Call-ExecutionPlan')
|
||||||
|
|
||||||
|
@Plan:description('Identify the call durations of incoming and outgoing calls')
|
||||||
|
|
||||||
|
|
||||||
|
@Import('org.wso2.iot.android.call:1.0.0')
|
||||||
|
define stream CallStream (meta_owner string, meta_deviceId string, meta_timestamp long, number string, type string, startTime long, endTime long);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.call.stats:1.0.0')
|
||||||
|
define stream CallStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, number string, type string, duration long, year int, month int, day int, hour int, minute int);
|
||||||
|
|
||||||
|
partition with (meta_deviceId of CallStream)
|
||||||
|
begin
|
||||||
|
from CallStream[type == 'INCOMING' OR type == 'OUTGOING']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, number, type, (endTime - startTime) as duration, 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 CallStatsStream;
|
||||||
|
end;
|
@ -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_android_call_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-Call-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
@Plan:name('Android-Data-ExecutionPlan')
|
||||||
|
|
||||||
|
@Plan:description('Calculate the total network usage of mobile data and others')
|
||||||
|
|
||||||
|
@Import('org.wso2.iot.android.data:1.0.0')
|
||||||
|
define stream DataStream (meta_owner string, meta_deviceId string, meta_timestamp long, type string, received long, sent long);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.data.stats:1.0.0')
|
||||||
|
define stream DataStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, type string, total long, year int, month int, day int, hour int, minute int);
|
||||||
|
|
||||||
|
partition with (meta_deviceId of DataStream)
|
||||||
|
begin
|
||||||
|
from DataStream
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, type, (received + sent) as total, 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 DataStatsStream;
|
||||||
|
end;
|
@ -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_android_data_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-Data-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
@Plan:name('Android-Location-ExecutionPlan')
|
||||||
|
|
||||||
|
@Plan:description('Find the street name of the location and add to a new stream')
|
||||||
|
|
||||||
|
@Import('org.wso2.iot.android.location:1.0.0')
|
||||||
|
define stream LocationStream (meta_owner string, meta_deviceId string, meta_timestamp long, latitude double, longitude double);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.location.stats:1.0.0')
|
||||||
|
define stream LocationStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, latitude double, longitude double, streetName string, year int, month int, day int, hour int, minute int);
|
||||||
|
|
||||||
|
partition with (meta_deviceId of LocationStream)
|
||||||
|
begin
|
||||||
|
from LocationStream
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, convert(math:round(latitude * 10000), 'double') / 10000.0 as latitude, convert(math:round(longitude * 10000), 'double') / 10000.0 as longitude, "" as streetName, time:extract(preState.meta_timestamp, 'year') as year, time:extract(preState.meta_timestamp, 'month') as month, time:extract(preState.meta_timestamp, 'day') as day, time:extract(preState.meta_timestamp, 'hour') as hour, time:extract(preState.meta_timestamp, 'minute') as minute
|
||||||
|
insert into LocationStatsStream;
|
||||||
|
end;
|
@ -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_android_location_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-Location-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,19 @@
|
|||||||
|
/* Enter a unique ExecutionPlan */
|
||||||
|
@Plan:name('Android-Screen-ExecutionPlan')
|
||||||
|
|
||||||
|
@Plan:description('Identify screen on duration')
|
||||||
|
|
||||||
|
|
||||||
|
@Import('org.wso2.iot.android.screen:1.0.0')
|
||||||
|
define stream ScreenStream (meta_owner string, meta_deviceId string, meta_timestamp long, state string);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.screen.stats:1.0.0')
|
||||||
|
define stream ScreenStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, duration long, year int, month int, day int, hour int, minute int);
|
||||||
|
|
||||||
|
partition with (meta_deviceId of ScreenStream)
|
||||||
|
begin
|
||||||
|
from every preState = ScreenStream[state == 'on'], postState = ScreenStream[state == 'off' AND preState.meta_timestamp <= meta_timestamp]
|
||||||
|
select preState.meta_owner as meta_owner, preState.meta_deviceId as meta_deviceId, preState.meta_timestamp as meta_timestamp, (postState.meta_timestamp - preState.meta_timestamp) as duration,
|
||||||
|
time:extract(preState.meta_timestamp, 'year') as year, time:extract(preState.meta_timestamp, 'month') as month, time:extract(preState.meta_timestamp, 'day') as day, time:extract(preState.meta_timestamp, 'hour') as hour, time:extract(preState.meta_timestamp, 'minute') as minute
|
||||||
|
insert into ScreenStatsStream;
|
||||||
|
end;
|
@ -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_android_screen_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-Screen-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,63 @@
|
|||||||
|
@Plan:name('Android-Sense-ExecutionPlan')
|
||||||
|
|
||||||
|
@Plan:description('ExecutionPlan')
|
||||||
|
|
||||||
|
@Import('org.wso2.iot.android.sense:1.0.0')
|
||||||
|
define stream AndroidSense (meta_owner string, meta_deviceId string, meta_type string, meta_timestamp long, battery int, battery_state string, battery_status string, battery_temperature int, gps_lat double, gps_long double, accelerometer_x float, accelerometer_y float, accelerometer_z float, speed_limit float, turn_way string, magnetic_x float, magnetic_y float, magnetic_z float, gyroscope_x float, gyroscope_y float, gyroscope_z float, light float, pressure float, proximity float, gravity_x float, gravity_y float, gravity_z float, rotation_x float, rotation_y float, rotation_z float, word string, word_sessionId string, word_status string, beacon_major int, beacon_minor int, beacon_proximity string, beacon_uuid int, call_number string, call_type string, call_start_time long, call_end_time long, screen_state string, audio_playing bool, headset_on bool, music_volume int, activity_type int, confidence int, sms_number string, application_name string, action string, data_type string, data_sent long, data_received long);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.data:1.0.0')
|
||||||
|
define stream DataStream (meta_owner string, meta_deviceId string, meta_timestamp long, type string, received long, sent long);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.activity:1.0.0')
|
||||||
|
define stream ActivityStream (meta_owner string, meta_deviceId string, meta_timestamp long, action string);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.call:1.0.0')
|
||||||
|
define stream CallStream (meta_owner string, meta_deviceId string, meta_timestamp long, number string, type string, startTime long, endTime long);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.screen:1.0.0')
|
||||||
|
define stream ScreenStream (meta_owner string, meta_deviceId string, meta_timestamp long, state string);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.location:1.0.0')
|
||||||
|
define stream LocationStream (meta_owner string, meta_deviceId string, meta_timestamp long, latitude double, longitude double);
|
||||||
|
|
||||||
|
@Export('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.android.battery:1.0.0')
|
||||||
|
define stream BatteryStream (meta_owner string, meta_deviceId string, meta_timestamp long, level int, state string, status string, temperature int);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.sms:1.0.0')
|
||||||
|
define stream SmsStream (meta_owner string, meta_deviceId string, meta_timestamp long, number string, type string, body string);
|
||||||
|
|
||||||
|
|
||||||
|
from AndroidSense[meta_type == 'sms']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, sms_number as number, action as type, "" as body
|
||||||
|
insert into SmsStream;
|
||||||
|
|
||||||
|
from AndroidSense[meta_type == 'battery']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, battery as level, battery_state as state, battery_status as status, battery_temperature as temperature
|
||||||
|
insert into BatteryStream;
|
||||||
|
|
||||||
|
from AndroidSense[meta_type == 'audio']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, audio_playing, headset_on, music_volume
|
||||||
|
insert into AudioStream;
|
||||||
|
|
||||||
|
from AndroidSense[meta_type == 'location']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, gps_lat as latitude, gps_long as longitude
|
||||||
|
insert into LocationStream;
|
||||||
|
|
||||||
|
from AndroidSense[meta_type == 'screen']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, screen_state as state
|
||||||
|
insert into ScreenStream;
|
||||||
|
|
||||||
|
from AndroidSense[meta_type == 'call']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, call_number as number, call_type as type, call_start_time as startTime, call_end_time as endTime
|
||||||
|
insert into CallStream;
|
||||||
|
|
||||||
|
from AndroidSense[meta_type == 'activity']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, action
|
||||||
|
insert into ActivityStream;
|
||||||
|
|
||||||
|
from AndroidSense[meta_type == 'data']
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, data_type as type, data_received as received, data_sent as sent
|
||||||
|
insert into DataStream;
|
@ -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_android_sense_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-Sense-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,16 @@
|
|||||||
|
@Plan:name('Android-SMS-ExecutionPlan')
|
||||||
|
|
||||||
|
@Plan:description('Process received and sent SMS details')
|
||||||
|
|
||||||
|
@Import('org.wso2.iot.android.sms:1.0.0')
|
||||||
|
define stream SmsStream (meta_owner string, meta_deviceId string, meta_timestamp long, number string, type string, body string);
|
||||||
|
|
||||||
|
@Export('org.wso2.iot.android.sms.stats:1.0.0')
|
||||||
|
define stream SmsStatsStream (meta_owner string, meta_deviceId string, meta_timestamp long, number string, type string, year int, month int, day int, hour int, minute int);
|
||||||
|
|
||||||
|
partition with (meta_deviceId of SmsStream)
|
||||||
|
begin
|
||||||
|
from SmsStream
|
||||||
|
select meta_owner, meta_deviceId, meta_timestamp, number, type, 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 SmsStatsStream;
|
||||||
|
end;
|
@ -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_android_sms_executionplan" version="1.0.0" type="event/execution-plan" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android-SMS-ExecutionPlan.siddhiql</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<Analytics>
|
||||||
|
<Editable>true</Editable>
|
||||||
|
<Name>AndroidAudioScript</Name>
|
||||||
|
<Script> CREATE TEMPORARY TABLE AndroidHeadsetData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_HEADSET_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_HEADSET_STATS, DAY");
|
||||||
|
|
||||||
|
CREATE TEMPORARY TABLE Android_Headset_Stat_Per_Day USING CarbonAnalytics
|
||||||
|
OPTIONS (tableName "Android_Headset_Stat_Per_Day",
|
||||||
|
schema "owner STRING -i, deviceId STRING -i, duration LONG -i, year INT -i, month INT -i, day INT -i, timestamp STRING -i",
|
||||||
|
primaryKeys "year, month, day, deviceId, owner",
|
||||||
|
mergeSchema "false");
|
||||||
|
|
||||||
|
INSERT INTO TABLE Android_Headset_Stat_Per_Day
|
||||||
|
SELECT meta_owner as owner, meta_deviceId as deviceId, sum(duration) as duration, year, month, day, getDateStartingTime(year, month, day) as timestamp
|
||||||
|
FROM AndroidHeadsetData
|
||||||
|
GROUP BY year, month, day, meta_deviceId, meta_owner ORDER BY timestamp DESC;
|
||||||
|
|
||||||
|
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_HEADSET_STATS; </Script>
|
||||||
|
</Analytics>
|
@ -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_audio_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
|
<file>AndroidAudioScript.xml</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_audio_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org.wso2.iot.android.audio_1.0.0.json</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
{
|
||||||
|
"name": "org.wso2.iot.android.audio",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"nickName": "",
|
||||||
|
"description": "Intermediate stream to map Android sense stream to audio execution plan",
|
||||||
|
"metaData": [
|
||||||
|
{
|
||||||
|
"name": "owner",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deviceId",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timestamp",
|
||||||
|
"type": "LONG"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"payloadData": [
|
||||||
|
{
|
||||||
|
"name": "audio_playing",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "headset_on",
|
||||||
|
"type": "BOOL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "music_volume",
|
||||||
|
"type": "INT"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
@ -0,0 +1,17 @@
|
|||||||
|
{
|
||||||
|
"provider-conf": {
|
||||||
|
"streamName": "org.wso2.iot.android.battery:1.0.0",
|
||||||
|
"provider-name": "realtime"
|
||||||
|
},
|
||||||
|
"chart-conf": {
|
||||||
|
"x": "TIMESTAMP",
|
||||||
|
"xType": "time",
|
||||||
|
"y": "level",
|
||||||
|
"yType": "number",
|
||||||
|
"color": "None",
|
||||||
|
"mode": "stack",
|
||||||
|
"maxLength": "30",
|
||||||
|
"gadget-name": "Android Battery Level Chart",
|
||||||
|
"chart-name": "area-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_Battery_Level_Chart",
|
||||||
|
"title": "Android Battery Level Chart",
|
||||||
|
"type": "gadget",
|
||||||
|
"thumbnail": "gadget/Android_Battery_Level_Chart/thumbnail.png",
|
||||||
|
"data": {
|
||||||
|
"url": "gadget/Android_Battery_Level_Chart/gadget.xml"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<Module>
|
||||||
|
<ModulePrefs title="Android Battery Level Chart" 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/area-chart-api.js"></script>
|
||||||
|
<script src="js/core/gadget-core.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="canvas"></div>
|
||||||
|
</body>
|
||||||
|
]]>
|
||||||
|
</Content>
|
||||||
|
</Module>
|
@ -0,0 +1,135 @@
|
|||||||
|
/*
|
||||||
|
* 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 + '/area-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 : "area",
|
||||||
|
y: _chartConfig.y
|
||||||
|
};
|
||||||
|
|
||||||
|
if (_chartConfig.color != "None") {
|
||||||
|
conf.charts[0].color = _chartConfig.color;
|
||||||
|
conf.charts[0].mode = _chartConfig.mode;
|
||||||
|
}
|
||||||
|
|
||||||
|
return conf;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}());
|
@ -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_Battery_Level_Chart";
|
||||||
|
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,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,262 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web socket On Open
|
||||||
|
*/
|
||||||
|
|
||||||
|
var webSocketOnOpen = function () {
|
||||||
|
var filterPropNames = ["meta_deviceId"];
|
||||||
|
var filterPropVals = ["htc"];
|
||||||
|
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);
|
||||||
|
|
||||||
|
}
|
After Width: | Height: | Size: 10 KiB |
@ -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_battery_level_chart_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android_Battery_Level_Chart</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,13 @@
|
|||||||
|
{
|
||||||
|
"chart-conf": {
|
||||||
|
"chart-name": "donut-chart",
|
||||||
|
"color": "owner",
|
||||||
|
"gadget-name": "Android Battery Percentage Chart",
|
||||||
|
"maxLength": "2",
|
||||||
|
"x": "level"
|
||||||
|
},
|
||||||
|
"provider-conf": {
|
||||||
|
"provider-name": "realtime",
|
||||||
|
"streamName": "org.wso2.iot.android.battery:1.0.0"
|
||||||
|
}
|
||||||
|
}
|
@ -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_Battery_Percentage_Chart",
|
||||||
|
"title": "Android Battery Percentage Chart",
|
||||||
|
"type": "gadget",
|
||||||
|
"thumbnail": "gadget/Android_Battery_Percentage_Chart/thumbnail.png",
|
||||||
|
"data": {
|
||||||
|
"url": "gadget/Android_Battery_Percentage_Chart/gadget.xml"
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,60 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<Module>
|
||||||
|
<ModulePrefs title="Android Battery Percentage Chart" 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/donut-chart-api.js"></script>
|
||||||
|
<script src="js/core/gadget-core.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div id="canvas"></div>
|
||||||
|
</body>
|
||||||
|
]]>
|
||||||
|
</Content>
|
||||||
|
</Module>
|
@ -0,0 +1,115 @@
|
|||||||
|
/*
|
||||||
|
* 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 + '/donut-chart/config.json').config;
|
||||||
|
/*
|
||||||
|
dynamic logic goes here
|
||||||
|
*/
|
||||||
|
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) {
|
||||||
|
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.maxLength = _chartConfig.maxLength;
|
||||||
|
conf.charts = [];
|
||||||
|
conf.charts[0] = {
|
||||||
|
type : "arc",
|
||||||
|
color: _chartConfig.color
|
||||||
|
};
|
||||||
|
conf.tooltip = {"enabled":false}
|
||||||
|
conf.legend = false;
|
||||||
|
conf.percentage = true;
|
||||||
|
conf.colorScale = ["#50B432", "#eefaeb"];
|
||||||
|
return conf;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
}());
|
@ -0,0 +1,69 @@
|
|||||||
|
/*
|
||||||
|
* 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) {
|
||||||
|
var dummyData = jQuery.extend(true, {}, providerData[0]);
|
||||||
|
providerData[0][1] = "YES";
|
||||||
|
dummyData[4] = (100 - dummyData[4]);
|
||||||
|
dummyData[1] = "NO";
|
||||||
|
providerData.push(dummyData);
|
||||||
|
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_Battery_Percentage_Chart";
|
||||||
|
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,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,261 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2015, 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');
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Web socket On Open
|
||||||
|
*/
|
||||||
|
|
||||||
|
var webSocketOnOpen = function () {
|
||||||
|
var filterPropNames = ["meta_deviceId"];
|
||||||
|
var filterPropVals = ["htc"];
|
||||||
|
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);
|
||||||
|
|
||||||
|
}
|
After Width: | Height: | Size: 15 KiB |
@ -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_battery_percentage_chart_gadget" version="1.0.0" type="dashboards/gadget" serverRole="DataAnalyticsServer">
|
||||||
|
<file>Android_Battery_Percentage_Chart</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_battery_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org.wso2.iot.android.battery_1.0.0.json</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"name": "org.wso2.iot.android.battery",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"nickName": "",
|
||||||
|
"description": "Intermediate stream to map Android sense stream to battery execution plan",
|
||||||
|
"metaData": [
|
||||||
|
{
|
||||||
|
"name": "owner",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deviceId",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timestamp",
|
||||||
|
"type": "LONG"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"payloadData": [
|
||||||
|
{
|
||||||
|
"name": "level",
|
||||||
|
"type": "INT"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "state",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "status",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "temperature",
|
||||||
|
"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_battery_ui_event_publisher" version="1.0.0" type="event/publisher" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org.wso2.iot.android.battery.ui.publisher.xml</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<eventPublisher name="org.wso2.iot.android.battery.ui.publisher"
|
||||||
|
statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
|
||||||
|
<from streamName="org.wso2.iot.android.battery" version="1.0.0"/>
|
||||||
|
<mapping customMapping="disable" type="wso2event"/>
|
||||||
|
<to eventAdapterType="ui"/>
|
||||||
|
</eventPublisher>
|
@ -0,0 +1,19 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<Analytics>
|
||||||
|
<Editable>true</Editable>
|
||||||
|
<Name>AndriodCallScript</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
|
||||||
|
OPTIONS (tableName "Android_Call_Stat_Per_Day",
|
||||||
|
schema "owner STRING, deviceId STRING, type STRING, duration LONG -i, year INT -i, month INT -i, day INT -i, timestamp STRING",
|
||||||
|
primaryKeys "year, month, day, deviceId, owner, type",
|
||||||
|
mergeSchema "false");
|
||||||
|
|
||||||
|
INSERT INTO TABLE Android_Call_Stat_Per_Day
|
||||||
|
SELECT meta_owner as owner, meta_deviceId as deviceId, type, sum(duration) as duration, year, month, day, getDateStartingTime(year, month, day) as timestamp
|
||||||
|
FROM AndroidCallData
|
||||||
|
GROUP BY year, month, day, meta_deviceId, meta_owner, type ORDER BY timestamp DESC;
|
||||||
|
|
||||||
|
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_CALL_STATS; </Script>
|
||||||
|
</Analytics>
|
@ -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_call_script" version="1.0.0" type="analytics/spark" serverRole="DataAnalyticsServer">
|
||||||
|
<file>AndriodCallScript.xml</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_call_stats_event_sink" version="1.0.0" type="analytics/eventstore" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org_wso2_iot_android_call_stats.xml</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,98 @@
|
|||||||
|
<?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>number</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>STRING</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>type</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>STRING</Type>
|
||||||
|
</ColumnDefinition>
|
||||||
|
<ColumnDefinition>
|
||||||
|
<Name>duration</Name>
|
||||||
|
<IsFacet>false</IsFacet>
|
||||||
|
<EnableIndexing>false</EnableIndexing>
|
||||||
|
<IsPrimaryKey>false</IsPrimaryKey>
|
||||||
|
<EnableScoreParam>false</EnableScoreParam>
|
||||||
|
<Type>LONG</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.call.stats:1.0.0</StreamId>
|
||||||
|
</Source>
|
||||||
|
<MergeSchema>false</MergeSchema>
|
||||||
|
<RecordStoreName>PROCESSED_DATA_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_call_stats_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org.wso2.iot.android.call.stats_1.0.0.json</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,54 @@
|
|||||||
|
{
|
||||||
|
"name": "org.wso2.iot.android.call.stats",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"nickName": "",
|
||||||
|
"description": "",
|
||||||
|
"metaData": [
|
||||||
|
{
|
||||||
|
"name": "owner",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "deviceId",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "timestamp",
|
||||||
|
"type": "LONG"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"payloadData": [
|
||||||
|
{
|
||||||
|
"name": "number",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "type",
|
||||||
|
"type": "STRING"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "duration",
|
||||||
|
"type": "LONG"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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_call_stats_ui_event_publisher" version="1.0.0" type="event/publisher" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org.wso2.iot.android.call.stats.ui.publisher.xml</file>
|
||||||
|
</artifact>
|
||||||
|
|
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<eventPublisher name="org.wso2.iot.android.call.stats.ui.publisher"
|
||||||
|
processing="enable" statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
|
||||||
|
<from streamName="org.wso2.iot.android.call.stats" version="1.0.0"/>
|
||||||
|
<mapping customMapping="disable" type="wso2event"/>
|
||||||
|
<to eventAdapterType="ui"/>
|
||||||
|
</eventPublisher>
|
@ -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_call_streams" version="1.0.0" type="event/stream" serverRole="DataAnalyticsServer">
|
||||||
|
<file>org.wso2.iot.android.call_1.0.0.json</file>
|
||||||
|
</artifact>
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue