You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@stratos.apache.org by im...@apache.org on 2015/09/28 15:15:05 UTC
[33/69] [abbrv] stratos git commit: Removed tenantId from queries and
refactore jaggery files
http://git-wip-us.apache.org/repos/asf/stratos/blob/9c1fdc75/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Count/Member_Count/js/main.js
----------------------------------------------------------------------
diff --git a/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Count/Member_Count/js/main.js b/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Count/Member_Count/js/main.js
new file mode 100644
index 0000000..d54087a
--- /dev/null
+++ b/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Count/Member_Count/js/main.js
@@ -0,0 +1,167 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+var datasource, type, columns, filter, maxUpdateValue;
+
+var REFRESH_INTERVAL = 5000;
+var dataLoaded = true;
+var timeInterval = '30 Min';
+var applicationId = '';
+var clusterId = '';
+
+//loading gadget configuration
+datasource = gadgetConfig.datasource;
+filter = gadgetConfig.filter;
+type = gadgetConfig.type;
+var counter = 0;
+maxUpdateValue = gadgetConfig.maxUpdateValue;
+
+gadgets.HubSettings.onConnect = function () {
+ gadgets.Hub.subscribe('member-status-filter', function (topic, data) {
+ clusterId = data['clusterId'];
+ applicationId = data['applicationId'];
+ timeInterval = data['timeInterval'];
+ console.log("Member Filter Value:" + JSON.stringify(data));
+ });
+};
+
+//first, fetch datasource schema
+getColumns();
+
+//load data immediately
+fetchData(drawChart);
+
+// then start periodic polling
+setInterval(function () {
+ fetchData(drawChart);
+}, REFRESH_INTERVAL);
+
+
+function getColumns() {
+ columns = gadgetConfig.columns;
+}
+
+function fetchData(callback) {
+ //if previous operation is not completed, DO NOT fetch data
+ if (!dataLoaded) {
+ console.log("Waiting for data...");
+ return;
+ }
+
+ var application = applicationId;
+ var cluster = clusterId;
+ var time = timeInterval;
+
+ console.log("ApplicationId:" + application);
+ console.log("ClusterId:" + cluster);
+ console.log("Time interval:" + timeInterval);
+
+ var request = {
+ tableName: datasource,
+ applicationId: application,
+ clusterId: cluster,
+ time: time
+ };
+ $.ajax({
+ url: "/portal/apis/member-count",
+ method: "GET",
+ data: request,
+ contentType: "application/json",
+ success: function (data) {
+ if (callback != null) {
+ callback(makeRows(JSON.parse(data)));
+ }
+ }
+ });
+ dataLoaded = false; //setting the latch to locked position so that we block data fetching until we receive the response from backend
+}
+
+function makeDataTable(data) {
+ var dataTable = new igviz.DataTable();
+ if (columns.length > 0) {
+ columns.forEach(function (column) {
+ var type = "N";
+ if (column.DATA_TYPE == "varchar" || column.DATA_TYPE == "VARCHAR") {
+ type = "C";
+ } else if (column.DATA_TYPE == "TIME" || column.DATA_TYPE == "time") {
+ type = "T";
+ }
+ dataTable.addColumn(column.COLUMN_NAME, type);
+ });
+ }
+ data.forEach(function (row, index) {
+ for (var i = 0; i < row.length; i++) {
+ if (dataTable.metadata.types[i] == "N") {
+ data[index][i] = parseInt(data[index][i]);
+ }
+ }
+ });
+ dataTable.addRows(data);
+ return dataTable;
+}
+
+function makeRows(data) {
+ var rows = [];
+ for (var i = 0; i < data.length; i++) {
+ var record = data[i];
+ var row = columns.map(function (column) {
+ return record[column.COLUMN_NAME];
+ });
+ rows.push(row);
+ }
+ return rows;
+}
+
+function drawChart(data) {
+ var dataTable = makeDataTable(data);
+ gadgetConfig.chartConfig.width = $("#placeholder").width();
+ gadgetConfig.chartConfig.height = $("#placeholder").height() - 65;
+ var chartType = gadgetConfig.chartConfig.chartType;
+ var xAxis = gadgetConfig.chartConfig.xAxis;
+ var chart;
+ jQuery("#noChart").html("");
+ if (chartType === "bar" && dataTable.metadata.types[xAxis] === "N") {
+ dataTable.metadata.types[xAxis] = "C";
+ }
+
+ if (gadgetConfig.chartConfig.chartType === "tabular" || gadgetConfig.chartConfig.chartType === "singleNumber") {
+ gadgetConfig.chartConfig.height = $("#placeholder").height();
+ chart = igviz.draw("#placeholder", gadgetConfig.chartConfig, dataTable);
+ chart.plot(dataTable.data);
+
+ } else {
+ chart = igviz.setUp("#placeholder", gadgetConfig.chartConfig, dataTable);
+ chart.setXAxis({
+ "labelAngle": -35,
+ "labelAlign": "right",
+ "labelDy": 0,
+ "labelDx": 0,
+ "titleDy": 25
+ })
+ .setYAxis({
+ "titleDy": -30
+ });
+ chart.plot(dataTable.data);
+ }
+ //releasing the latch so that we can request data again from the backend.
+ dataLoaded = true;
+}
+
+
http://git-wip-us.apache.org/repos/asf/stratos/blob/9c1fdc75/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Count/Member_Count/js/outputAdapterUiLibrary.js
----------------------------------------------------------------------
diff --git a/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Count/Member_Count/js/outputAdapterUiLibrary.js b/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Count/Member_Count/js/outputAdapterUiLibrary.js
new file mode 100644
index 0000000..646b464
--- /dev/null
+++ b/extensions/das/metering-service/capps/stratos-metering-service/Gadget_Member_Count/Member_Count/js/outputAdapterUiLibrary.js
@@ -0,0 +1,275 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+var CONSTANTS = {
+ webAppName: 'outputui',
+ urlSeperator: '/',
+ urlGetParameter: '?lastUpdatedTime=',
+ tenantUrlAttribute: 't',
+ urlUnsecureTransportHttp: 'http://',
+ urlUnsecureTransportWebsocket: 'ws://',
+ 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'
+};
+
+
+var websocket = null;
+var webSocketUrl;
+var httpUrl;
+var cepHostName;
+var cepPortNumber;
+var isErrorOccured = false;
+var lastUpdatedtime = -1;
+var polingInterval;
+var stream;
+var streamVersion;
+var firstPollingAttempt;
+var processMode;
+var onSuccessFunction;
+var onErrorFunction;
+var userDomainUrl = "";
+var terminateWebsocketInstance = false;
+var pollingContinue = true;
+var transportToBeUsedHttp;
+var transportToBeUsedWebsocket;
+
+function subscribe(streamName, version, intervalTime, domain,
+ listeningFuncSuccessData, listeningFuncErrorData, cepHost, cepPort, mode, secureMode) {
+
+ 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 {
+ cepHostName = cepHost;
+ }
+
+ if (cepPort == null || cepPort == "") {
+ if (secureMode == CONSTANTS.secureMode) {
+ cepPortNumber = CONSTANTS.defaultSecurePortNumber;
+ } else {
+ cepPortNumber = CONSTANTS.defaultNonsecurePortNumber;
+ }
+ } else {
+ cepPortNumber = cepPort;
+ }
+
+ if (mode == null || mode == "") {
+ processMode = CONSTANTS.defaultMode;
+ } else {
+ processMode = mode;
+ }
+
+ if (domain != CONSTANTS.domain) {
+ userDomainUrl = CONSTANTS.tenantUrlAttribute + CONSTANTS.urlSeperator + domain + CONSTANTS.urlSeperator;
+
+ }
+ webSocketUrl = transportToBeUsedWebsocket + cepHostName + CONSTANTS.colon + cepPortNumber +
+ CONSTANTS.urlSeperator + CONSTANTS.webAppName + CONSTANTS.urlSeperator + userDomainUrl + stream +
+ CONSTANTS.urlSeperator + streamVersion;
+
+ if (processMode == CONSTANTS.processModeHTTP) {
+ firstPollingAttempt = true;
+ pollingContinue = true;
+ startPoll();
+ } else {
+ initializeWebSocket(webSocketUrl);
+ }
+}
+
+
+/**
+ * Initializing Web Socket
+ */
+function initializeWebSocket(webSocketUrl) {
+ websocket = new WebSocket(webSocketUrl);
+ websocket.onopen = webSocketOnOpen;
+ websocket.onmessage = webSocketOnMessage;
+ websocket.onclose = webSocketOnClose;
+ websocket.onerror = webSocketOnError;
+}
+
+/**
+ * Web socket On Open
+ */
+
+var webSocketOnOpen = function () {
+ // alert("Successfully connected to "+webSocketUrl);
+ //onErrorFunction("Successfully connected to URL:" + webSocketUrl + "\n");
+};
+
+
+/**
+ * On server sends a message
+ */
+var webSocketOnMessage = function (evt) {
+ var event = evt.data;
+ var array = JSON.parse(event);
+ constructPayload(array);
+};
+
+/**
+ * On server close
+ */
+var webSocketOnClose = function (e) {
+
+ if (isErrorOccured) {
+ if (processMode != CONSTANTS.processModeWebSocket) {
+ firstPollingAttempt = true;
+ pollingContinue = true;
+ startPoll();
+ }
+ } else {
+ if (!terminateWebsocketInstance) {
+ waitForSocketConnection(websocket);
+ } else {
+ terminateWebsocketInstance = false;
+ }
+
+ }
+};
+
+/**
+ * On server Error
+ */
+var webSocketOnError = function (err) {
+ var error = "Error: Cannot connect to Websocket URL:" + webSocketUrl + " .Hence closing the connection!";
+
+ onErrorFunction(error);
+ isErrorOccured = true;
+
+};
+
+/**
+ * Gracefully increments the connection retry
+ */
+var waitTime = CONSTANTS.numThousand;
+function waitForSocketConnection(socket, callback) {
+ setTimeout(
+ function () {
+ if (socket.readyState === 1) {
+ initializeWebSocket(webSocketUrl);
+ console.log("Connection is made");
+ if (callback != null) {
+ callback();
+ }
+ return;
+ } else {
+ websocket = new WebSocket(webSocketUrl);
+ waitTime += CONSTANTS.websocketTimeAppender;
+ waitForSocketConnection(websocket, callback);
+ }
+ }, waitTime);
+}
+
+/**
+ * Polling to retrieve events from http request periodically
+ */
+function startPoll() {
+
+ (function poll() {
+ setTimeout(function () {
+ httpUrl = transportToBeUsedHttp + cepHostName + CONSTANTS.colon + cepPortNumber + CONSTANTS.urlSeperator
+ + CONSTANTS.webAppName + CONSTANTS.urlSeperator + userDomainUrl + stream + CONSTANTS.urlSeperator +
+ streamVersion + CONSTANTS.urlGetParameter + lastUpdatedtime;
+
+ $.getJSON(httpUrl, function (responseText) {
+ if (firstPollingAttempt) {
+ /*var data = $("textarea#idConsole").val();
+ $("textarea#idConsole").val(data + "Successfully connected to HTTP.");*/
+ firstPollingAttempt = false;
+ }
+
+ var eventList = $.parseJSON(responseText.events);
+ if (eventList.length != 0) {
+ lastUpdatedtime = responseText.lastEventTime;
+ for (var i = 0; i < eventList.length; i++) {
+ var arr = eventList[i];
+ constructPayload(arr);
+ }
+ }
+ if (pollingContinue) {
+ startPoll();
+ }
+ })
+ .fail(function (errorData) {
+ var errorData = JSON.parse(errorData.responseText);
+ onErrorFunction(errorData.error);
+ });
+ }, polingInterval);
+ })()
+}
+
+function stopPollingProcesses() {
+
+ //stopping the Websocket
+ if (websocket != null) {
+ terminateWebsocketInstance = true;
+ websocket.onclose;
+ }
+ //stopping the HTTPS Request
+ pollingContinue = false;
+
+}
+
+function constructPayload(eventsArray) {
+
+ var streamId = stream + CONSTANTS.colon + streamVersion;
+ var twoDimentionalArray = [eventsArray];
+ onSuccessFunction(streamId, twoDimentionalArray);
+
+}
\ No newline at end of file