Merge pull request #193 from charithag/IoTS-1.0.0

Synced with master
application-manager-new
Charitha Goonetilleke 8 years ago committed by GitHub
commit 310a87962b

@ -624,29 +624,83 @@
</includes>
</fileSet>
<!-- Copying the "portal" app specific modifications to the distribution pack-->
<fileSet>
<directory>
src/repository/jaggeryapps/portal/store/carbon.super/gadget
</directory>
<outputDirectory>
${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/store/carbon.super/gadget
</outputDirectory>
<includes>
<include>**/*</include>
</includes>
</fileSet>
<!-- End of "portal" app specific modifications -->
<!-- Adding analytics theme to extensions -->
<fileSet>
<directory>
src/repository/jaggeryapps/ues/themes
src/repository/jaggeryapps/portal/themes
</directory>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/extensions/themes</outputDirectory>
<includes>
<include>**/*</include>
</includes>
</fileSet>
<!-- TODO: Remove below Andriod Analytics -->
<!--<fileSet>-->
<!--<directory>-->
<!--src/repository/analytics/android/store-->
<!--</directory>-->
<!--<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/store</outputDirectory>-->
<!--<includes>-->
<!--<include>**/*</include>-->
<!--</includes>-->
<!--</fileSet>-->
<!--<fileSet>-->
<!--<directory>-->
<!--src/repository/analytics/android/streams-->
<!--</directory>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/deployment/server/eventstreams-->
<!--</outputDirectory>-->
<!--<includes>-->
<!--<include>**/*</include>-->
<!--</includes>-->
<!--</fileSet>-->
<!--<fileSet>-->
<!--<directory>-->
<!--src/repository/analytics/android/event-sink-->
<!--</directory>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/deployment/server/eventsink-->
<!--</outputDirectory>-->
<!--<includes>-->
<!--<include>**/*</include>-->
<!--</includes>-->
<!--</fileSet>-->
<!--<fileSet>-->
<!--<directory>-->
<!--src/repository/analytics/android/eventpublishers-->
<!--</directory>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/deployment/server/eventpublishers-->
<!--</outputDirectory>-->
<!--<includes>-->
<!--<include>**/*</include>-->
<!--</includes>-->
<!--</fileSet>-->
<!--<fileSet>-->
<!--<directory>-->
<!--src/repository/analytics/android/executionplans-->
<!--</directory>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/deployment/server/executionplans-->
<!--</outputDirectory>-->
<!--<includes>-->
<!--<include>**/*</include>-->
<!--</includes>-->
<!--</fileSet>-->
<!--<fileSet>-->
<!--<directory>-->
<!--src/repository/analytics/android/simulators-->
<!--</directory>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/deployment/server/eventsimulatorfiles-->
<!--</outputDirectory>-->
<!--<includes>-->
<!--<include>**/*</include>-->
<!--</includes>-->
<!--</fileSet>-->
</fileSets>
<dependencySets>
@ -679,24 +733,32 @@
</file>
<!-- Copying the "portal" app specific modifications to the distribution pack-->
<file>
<source>src/repository/jaggeryapps/portal/controllers/apis/analytics.jag</source>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/controllers/apis
</outputDirectory>
<fileMode>755</fileMode>
</file>
<file>
<source>src/repository/jaggeryapps/portal/js/outputAdapterUiLibrary.js</source>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/js
</outputDirectory>
<fileMode>755</fileMode>
</file>
<file>
<source>src/repository/jaggeryapps/portal/templates/gadgets/igviz/js/outputAdapterUiLibrary.js</source>
<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/templates/gadgets/igviz/js
</outputDirectory>
<fileMode>755</fileMode>
</file>
<!--<file>-->
<!--<source>src/repository/jaggeryapps/portal/controllers/apis/analytics.jag</source>-->
<!--<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/controllers/apis-->
<!--</outputDirectory>-->
<!--<fileMode>755</fileMode>-->
<!--</file>-->
<!--<file>-->
<!--<source>src/repository/jaggeryapps/portal/js/outputAdapterUiLibrary.js</source>-->
<!--<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/js-->
<!--</outputDirectory>-->
<!--<fileMode>755</fileMode>-->
<!--</file>-->
<!--<file>-->
<!--<source>src/repository/jaggeryapps/portal/templates/gadgets/igviz/js/outputAdapterUiLibrary.js</source>-->
<!--<outputDirectory>${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/templates/gadgets/igviz/js-->
<!--</outputDirectory>-->
<!--<fileMode>755</fileMode>-->
<!--</file>-->
<!-- TODO: Uncomment below -->
<!--<file>-->
<!--<source>src/repository/jaggeryapps/portal/uipublisher/websocketSubscriptionEndpoint.jag</source>-->
<!--<outputDirectory>-->
<!--${pom.artifactId}-${pom.version}/repository/deployment/server/jaggeryapps/portal/uipublisher/-->
<!--</outputDirectory>-->
<!--<fileMode>755</fileMode>-->
<!--</file>-->
<file>
<source>src/repository/jaggeryapps/portal/configs/designer.json</source>
<outputDirectory>

@ -0,0 +1,90 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<EventStoreConfiguration>
<TableSchema>
<ColumnDefinition>
<Name>meta_username</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>true</EnableIndexing>
<IsPrimaryKey>true</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>andriod_version</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>memory</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>storage</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>installed_apps</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>INTEGER</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>state</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>true</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>id</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>true</EnableIndexing>
<IsPrimaryKey>true</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>name</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>true</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>model</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>manufacturer</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
</TableSchema>
<Source>
<StreamId>org.wso2.iot.andriod.device.details:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>
</EventStoreConfiguration>

@ -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,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,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>type</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>total</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.data.stats:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>
</EventStoreConfiguration>

@ -0,0 +1,82 @@
<?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>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.headset.stats:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>
</EventStoreConfiguration>

@ -0,0 +1,50 @@
<?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>latitude</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>DOUBLE</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>longitude</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>DOUBLE</Type>
</ColumnDefinition>
</TableSchema>
<Source>
<StreamId>org.wso2.iot.android.location:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>
</EventStoreConfiguration>

@ -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>latitude</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>DOUBLE</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>longitude</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>DOUBLE</Type>
</ColumnDefinition>
<ColumnDefinition>
<Name>streetName</Name>
<IsFacet>false</IsFacet>
<EnableIndexing>false</EnableIndexing>
<IsPrimaryKey>false</IsPrimaryKey>
<EnableScoreParam>false</EnableScoreParam>
<Type>STRING</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.location.stats:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>
</EventStoreConfiguration>

@ -0,0 +1,82 @@
<?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>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.screen.stats:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>
</EventStoreConfiguration>

@ -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>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>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.sms.stats:1.0.0</StreamId>
</Source>
<MergeSchema>false</MergeSchema>
<RecordStoreName>EVENT_STORE</RecordStoreName>
</EventStoreConfiguration>

@ -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,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,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<eventPublisher name="org.wso2.iot.android.call.ui.publisher"
statistics="disable" trace="disable" xmlns="http://wso2.org/carbon/eventpublisher">
<from streamName="org.wso2.iot.android.call" version="1.0.0"/>
<mapping customMapping="disable" type="wso2event"/>
<to eventAdapterType="ui"/>
</eventPublisher>

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

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

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

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

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

@ -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,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,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,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,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,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,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,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,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,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<streamConfiguration type="csv">
<file>activity_data.csv</file>
<streamID>org.wso2.iot.android.activity:1.0.0</streamID>
<separateChar>,</separateChar>
<delayBetweenEventsInMilies>1</delayBetweenEventsInMilies>
</streamConfiguration>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<streamConfiguration type="csv">
<file>audio_data.csv</file>
<streamID>org.wso2.iot.android.audio:1.0.0</streamID>
<separateChar>,</separateChar>
<delayBetweenEventsInMilies>1000</delayBetweenEventsInMilies>
</streamConfiguration>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<streamConfiguration type="csv">
<file>battery_data.csv</file>
<streamID>org.wso2.iot.android.battery:1.0.0</streamID>
<separateChar>,</separateChar>
<delayBetweenEventsInMilies>1000</delayBetweenEventsInMilies>
</streamConfiguration>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<streamConfiguration type="csv">
<file>call_data.csv</file>
<streamID>org.wso2.iot.android.call:1.0.0</streamID>
<separateChar>,</separateChar>
<delayBetweenEventsInMilies>1000</delayBetweenEventsInMilies>
</streamConfiguration>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<streamConfiguration type="csv">
<file>location_data.csv</file>
<streamID>org.wso2.iot.android.location:1.0.0</streamID>
<separateChar>,</separateChar>
<delayBetweenEventsInMilies>1000</delayBetweenEventsInMilies>
</streamConfiguration>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<streamConfiguration type="csv">
<file>network_data.csv</file>
<streamID>org.wso2.iot.android.data:1.0.0</streamID>
<separateChar>,</separateChar>
<delayBetweenEventsInMilies>1</delayBetweenEventsInMilies>
</streamConfiguration>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<streamConfiguration type="csv">
<file>screen_data.csv</file>
<streamID>org.wso2.iot.android.screen:1.0.0</streamID>
<separateChar>,</separateChar>
<delayBetweenEventsInMilies>1000</delayBetweenEventsInMilies>
</streamConfiguration>

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<streamConfiguration type="csv">
<file>sms_data.csv</file>
<streamID>org.wso2.iot.android.sms:1.0.0</streamID>
<separateChar>,</separateChar>
<delayBetweenEventsInMilies>1000</delayBetweenEventsInMilies>
</streamConfiguration>

@ -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,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<Editable>true</Editable>
<Name>AndriodDataScript</Name>
<Script> CREATE TEMPORARY TABLE AndroidDataData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_DATA_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_DATA_STATS, DAY");
CREATE TEMPORARY TABLE Android_Data_Stat_Per_Day USING CarbonAnalytics
OPTIONS (tableName "Android_Data_Stat_Per_Day",
schema "owner STRING, deviceId STRING, type STRING, total 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_Data_Stat_Per_Day
SELECT meta_owner as owner, meta_deviceId as deviceId, type, sum(total) as total, year, month, day, getDateStartingTime(year, month, day) as timestamp
FROM AndroidDataData
GROUP BY year, month, day, meta_deviceId, meta_owner, type ORDER BY timestamp DESC;
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_DATA_STATS; </Script>
</Analytics>

@ -0,0 +1,53 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<Editable>true</Editable>
<Name>AndriodFrequentContactsScript</Name>
<Script> CREATE TEMPORARY TABLE AndroidFrequentCallData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_CALL_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_CALL_STATS, DAY");
CREATE TEMPORARY TABLE AndroidFrequentSmsData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SMS_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SMS_STATS, DAY");
CREATE TEMPORARY TABLE Android_Frequent_Contacts_Per_Day USING CarbonAnalytics
OPTIONS (tableName "Android_Frequent_Contacts_Per_Day",
schema "owner STRING -i, deviceId STRING -i, number STRING -i, callCount INT -i, smsCount INT -i, total INT -i, year INT -i, month INT -i, day INT -i, _timestamp LONG -i",
primaryKeys "deviceId, owner, number, year, month, day",
mergeSchema "false", incrementalParams "Android_Frequent_Contacts_Per_Day, MONTH");
CREATE TEMPORARY TABLE Android_Frequent_Contacts_Per_Month USING CarbonAnalytics
OPTIONS (tableName "Android_Frequent_Contacts_Per_Month",
schema "owner STRING -i, deviceId STRING -i, number STRING -i, callCount INT -i, smsCount INT -i, total INT -i, year INT -i, month INT -i, _timestamp LONG -i",
primaryKeys "deviceId, owner, number, year, month",
mergeSchema "false", incrementalParams "Android_Frequent_Contacts_Per_Month, YEAR");
CREATE TEMPORARY TABLE Android_Frequent_Contacts_Per_Year USING CarbonAnalytics
OPTIONS (tableName "Android_Frequent_Contacts_Per_Year",
schema "owner STRING -i, deviceId STRING -i, number STRING -i, callCount INT -i, smsCount INT -i, total INT -i, year INT -i",
primaryKeys "deviceId, owner, number, year",
mergeSchema "false");
INSERT INTO TABLE Android_Frequent_Contacts_Per_Day
SELECT IF(callData.owner is null,smsData.owner,callData.owner) as owner, IF(callData.deviceId is null,smsData.deviceId,callData.deviceId) as deviceId, IF(callData.number is null,smsData.number,callData.number) as number, IF(callData.callCount is null,0,callData.callCount) as callCount, IF(smsData.smsCount is null,0,smsData.smsCount) as smsCount, (IF(callData.callCount is null,0,callData.callCount) + IF(smsData.smsCount is null,0,smsData.smsCount)) as total, IF(callData.year is null,smsData.year,callData.year) as year, IF(callData.month is null,smsData.month,callData.month) as month, IF(callData.day is null,smsData.day,callData.day) as day, getDateStartingTime(IF(callData.year is null,smsData.year,callData.year), IF(callData.month is null,smsData.month,callData.month), IF(callData.day is null,smsData.day,callData.day)) as _timestamp
FROM (SELECT meta_owner as owner, meta_deviceId as deviceId, number, count(*) as callCount, year, month, day
FROM AndroidFrequentCallData
GROUP BY meta_deviceId, meta_owner, number, year, month, day) callData FULL OUTER JOIN
(SELECT meta_owner as owner, meta_deviceId as deviceId, number, count(*) as smsCount, year, month, day
FROM AndroidFrequentSmsData
GROUP BY meta_deviceId, meta_owner, number, year, month, day) smsData ON smsData.owner = callData.owner AND smsData.deviceId = callData.deviceId AND smsData.number = callData.number AND smsData.year = callData.year AND smsData.month = callData.month AND smsData.day = callData.day
ORDER BY total DESC;
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_CALL_STATS;
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_SMS_STATS;
INSERT INTO TABLE Android_Frequent_Contacts_Per_Month
SELECT owner, deviceId, number, sum(callCount) as callCount, sum(smsCount) as smsCount, sum(total) as total, year, month, getMonthStartingTime(year, month) as _timestamp
FROM Android_Frequent_Contacts_Per_Day
GROUP BY deviceId, owner, number, year, month
ORDER BY total DESC;
INCREMENTAL_TABLE_COMMIT Android_Frequent_Contacts_Per_Month;
INSERT INTO TABLE Android_Frequent_Contacts_Per_Year
SELECT owner, deviceId, number, sum(callCount) as callCount, sum(smsCount) as smsCount, sum(total) as total, year
FROM Android_Frequent_Contacts_Per_Month
GROUP BY deviceId, owner, number, year
ORDER BY total DESC; </Script>
</Analytics>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<Editable>true</Editable>
<Name>AndriodScreenScript</Name>
<Script> CREATE TEMPORARY TABLE AndroidScreenData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SCREEN_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SCREEN_STATS, DAY");
CREATE TEMPORARY TABLE Android_Screen_Stat_Per_Day USING CarbonAnalytics
OPTIONS (tableName "Android_Screen_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_Screen_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 AndroidScreenData
GROUP BY year, month, day, meta_deviceId, meta_owner ORDER BY timestamp DESC;
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_SCREEN_STATS; </Script>
</Analytics>

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<Editable>true</Editable>
<Name>AndriodSmsScript</Name>
<Script> CREATE TEMPORARY TABLE AndroidSmsData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_SMS_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_SMS_STATS, DAY");
CREATE TEMPORARY TABLE Android_Sms_Stat_Per_Day USING CarbonAnalytics
OPTIONS (tableName "Android_Sms_Stat_Per_Day",
schema "owner STRING, deviceId STRING, type STRING, count 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_Sms_Stat_Per_Day
SELECT meta_owner as owner, meta_deviceId as deviceId, type, count(*) as count, year, month, day, getDateStartingTime(year, month, day) as timestamp
FROM AndroidSmsData
GROUP BY year, month, day, meta_deviceId, meta_owner, type ORDER BY timestamp DESC;
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_SMS_STATS; </Script>
</Analytics>

@ -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,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,20 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<Editable>true</Editable>
<Name>Android_Sense_Script</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,43 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Analytics>
<Editable>true</Editable>
<Name>LocationScript</Name>
<Script> CREATE TEMPORARY TABLE AndroidLocationData USING CarbonAnalytics OPTIONS(tableName "ORG_WSO2_IOT_ANDROID_LOCATION_STATS", incrementalParams "ORG_WSO2_IOT_ANDROID_LOCATION_STATS, DAY");
CREATE TEMPORARY TABLE Android_Location_Stats_Per_Day USING CarbonAnalytics
OPTIONS (tableName "Android_Location_Stats_Per_Day",
schema "owner STRING, deviceId STRING, latitude DOUBLE -i, longitude DOUBLE -i, streetName STRING, noOfVisits INT -i, year INT -i, month INT -i, day INT -i, _timestamp LONG -i",
primaryKeys "deviceId, owner, streetName, latitude, longitude, year, month, day",
mergeSchema "false", incrementalParams "Android_Location_Stats_Per_Day, MONTH");
CREATE TEMPORARY TABLE Android_Location_Stats_Per_Month USING CarbonAnalytics
OPTIONS (tableName "Android_Location_Stats_Per_Month",
schema "owner STRING, deviceId STRING, latitude DOUBLE -i, longitude DOUBLE -i, streetName STRING, noOfVisits INT -i, year INT -i, month INT -i, _timestamp LONG -i",
primaryKeys "deviceId, owner, streetName, latitude, longitude, year, month",
mergeSchema "false", incrementalParams "Android_Location_Stats_Per_Month, YEAR");
CREATE TEMPORARY TABLE Android_Location_Stats_Per_Year USING CarbonAnalytics
OPTIONS (tableName "Android_Location_Stats_Per_Year",
schema "owner STRING, deviceId STRING, latitude DOUBLE -i, longitude DOUBLE -i, streetName STRING, noOfVisits INT -i, year INT -i",
primaryKeys "deviceId, owner, streetName, latitude, longitude, year",
mergeSchema "false");
INSERT INTO TABLE Android_Location_Stats_Per_Day
SELECT meta_owner as owner, meta_deviceId as deviceId, latitude, longitude, streetName, count(*) as noOfVisits, year, month, day, getDateStartingTime(year, month, day) as _timestamp
FROM AndroidLocationData
GROUP BY year, month, day, meta_deviceId, streetName, meta_owner, latitude, longitude;
INCREMENTAL_TABLE_COMMIT ORG_WSO2_IOT_ANDROID_LOCATION_STATS;
INSERT INTO TABLE Android_Location_Stats_Per_Month
SELECT owner, deviceId, latitude, longitude, streetName, sum(noOfVisits) as noOfVisits, year, month, getMonthStartingTime(year, month) as _timestamp
FROM Android_Location_Stats_Per_Day
GROUP BY deviceId, owner, year, month, streetName, latitude, longitude;
INCREMENTAL_TABLE_COMMIT Android_Location_Stats_Per_Month;
INSERT INTO TABLE Android_Location_Stats_Per_Year
SELECT owner, deviceId, latitude, longitude, streetName, sum(noOfVisits) as noOfVisits, year
FROM Android_Location_Stats_Per_Month
GROUP BY deviceId, owner, year, streetName, latitude, longitude; </Script>
</Analytics>

@ -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);
}
}

@ -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;
};
}());

@ -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);
}
}

@ -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;
};
}());

@ -1,6 +1,4 @@
/*
*
*
* Copyright (c) 2015, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
@ -16,34 +14,27 @@
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*
*/
var CONSTANTS = {
webAppName: 'outputui',
urlSeperator: '/',
urlGetParameter : '?lastUpdatedTime=',
urlQueryStringBegin : '?',
tenantUrlAttribute: 't',
urlUnsecureTransportHttp : 'http://',
urlUnsecureTransportWebsocket : 'ws://',
queryParamStreamName : '?streamname=',
queryParamStreamVersion : '&version=',
queryParamLastUpdatedTime : '&lastUpdatedTime=',
urlSecureTransportWebsocket : 'wss://',
urlSecureTransportHttp : 'https://',
colon : ':',
defaultIntervalTime : 10 * 1000,
defaultUserDomain : 'carbon.super',
defaultHostName : 'localhost',
defaultNonsecurePortNumber : '9763',
defaultSecurePortNumber : '9443',
defaultMode : 'AUTO',
processModeHTTP : 'HTTP',
processModeWebSocket : 'WEBSOCKET',
processModeAuto : 'AUTO',
domain : 'carbon.super',
numThousand : 1000,
websocketTimeAppender : 400,
secureMode : 'SECURED'
websocketSubscriptionEndpoint : 'portal/uipublisher/websocketSubscriptionEndpoint.jag',
httpEventRetrievalEndpoint : 'portal/uipublisher/httpEventRetrievalEndpoint.jag'
};
@ -61,40 +52,23 @@ var firstPollingAttempt;
var processMode;
var onSuccessFunction;
var onErrorFunction;
var userDomainUrl = "";
var terminateWebsocketInstance = false;
var pollingContinue = true;
var transportToBeUsedHttp;
var transportToBeUsedWebsocket;
function subscribe(streamName,version,intervalTime,domain,
listeningFuncSuccessData,listeningFuncErrorData,
cepHost,cepPort,mode,secureMode, queryParams){
function subscribe(streamName,version,intervalTime,
listeningFuncSuccessData,listeningFuncErrorData,cepHost,cepPort,mode){
stopPollingProcesses();
stream = streamName;
streamVersion = version;
onSuccessFunction = listeningFuncSuccessData;
onErrorFunction = listeningFuncErrorData;
if(secureMode == CONSTANTS.secureMode){
transportToBeUsedHttp = CONSTANTS.urlSecureTransportHttp;
transportToBeUsedWebsocket = CONSTANTS.urlSecureTransportWebsocket;
} else {
transportToBeUsedHttp = CONSTANTS.urlUnsecureTransportHttp;
transportToBeUsedWebsocket = CONSTANTS.urlUnsecureTransportWebsocket;
}
if(intervalTime == null || intervalTime == ""){
polingInterval = CONSTANTS.defaultIntervalTime;
} else{
polingInterval = intervalTime * CONSTANTS.numThousand;
}
if(domain == null || domain == ""){
domain = CONSTANTS.defaultUserDomain;
}
if(cepHost == null || cepHost == ""){
cepHostName = CONSTANTS.defaultHostName;
} else{
@ -102,11 +76,7 @@ function subscribe(streamName,version,intervalTime,domain,
}
if(cepPort == null || cepPort == ""){
if(secureMode == CONSTANTS.secureMode){
cepPortNumber = CONSTANTS.defaultSecurePortNumber;
} else{
cepPortNumber = CONSTANTS.defaultNonsecurePortNumber;
}
cepPortNumber = CONSTANTS.defaultSecurePortNumber;
} else{
cepPortNumber = cepPort;
}
@ -117,21 +87,8 @@ function subscribe(streamName,version,intervalTime,domain,
processMode = mode;
}
if(domain != CONSTANTS.domain){
userDomainUrl = CONSTANTS.tenantUrlAttribute + CONSTANTS.urlSeperator + domain + CONSTANTS.urlSeperator;
}
if (queryParams == null) {
queryParams = "";
} else if (queryParams != "") {
queryParams = CONSTANTS.urlQueryStringBegin + queryParams;
}
webSocketUrl = transportToBeUsedWebsocket + cepHostName + CONSTANTS.colon + cepPortNumber +
CONSTANTS.urlSeperator + CONSTANTS.webAppName+ CONSTANTS.urlSeperator + userDomainUrl + stream +
CONSTANTS.urlSeperator + streamVersion + queryParams;
webSocketUrl = CONSTANTS.urlSecureTransportWebsocket + cepHostName + CONSTANTS.colon + cepPortNumber +
CONSTANTS.urlSeperator + CONSTANTS.websocketSubscriptionEndpoint;
if(processMode == CONSTANTS.processModeHTTP){
firstPollingAttempt = true;
@ -154,13 +111,34 @@ function initializeWebSocket(webSocketUrl){
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 () {
// alert("Successfully connected to "+webSocketUrl);
//onErrorFunction("Successfully connected to URL:" + webSocketUrl + "\n");
var filterPropNames = ["meta_deviceId"];
var filterPropVals = ["htc"];
var data = getWebsocketSubscriptionMessage(stream, streamVersion, filterPropNames, filterPropVals);
websocket.send(data);
};
@ -234,17 +212,15 @@ function startPoll(){
(function poll(){
setTimeout(function(){
httpUrl = transportToBeUsedHttp + cepHostName + CONSTANTS.colon + cepPortNumber + CONSTANTS.urlSeperator
+ CONSTANTS.webAppName + CONSTANTS.urlSeperator + userDomainUrl + stream + CONSTANTS.urlSeperator +
streamVersion + CONSTANTS.urlGetParameter + lastUpdatedtime;
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;
@ -270,7 +246,7 @@ function stopPollingProcesses(){
//stopping the Websocket
if(websocket != null){
terminateWebsocketInstance = true;
websocket.onclose;
websocket.close();
}
//stopping the HTTPS Request
pollingContinue = false;
@ -278,8 +254,9 @@ function stopPollingProcesses(){
}
function constructPayload(eventsArray){
var streamId = stream + CONSTANTS.colon + streamVersion;
var twoDimentionalArray = [eventsArray];
onSuccessFunction(streamId,twoDimentionalArray);
}
}

@ -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;
};
}());

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

Loading…
Cancel
Save