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