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/29 11:10:56 UTC

[2/4] stratos git commit: Adding ues patch

Adding ues patch


Project: http://git-wip-us.apache.org/repos/asf/stratos/repo
Commit: http://git-wip-us.apache.org/repos/asf/stratos/commit/24adbc33
Tree: http://git-wip-us.apache.org/repos/asf/stratos/tree/24adbc33
Diff: http://git-wip-us.apache.org/repos/asf/stratos/diff/24adbc33

Branch: refs/heads/stratos-4.1.x
Commit: 24adbc33d4f4c10a564a0318b22bb3111c1cba0a
Parents: 8eb8de2
Author: Thanuja <th...@wso2.com>
Authored: Tue Sep 29 10:48:46 2015 +0530
Committer: Imesh Gunaratne <im...@apache.org>
Committed: Tue Sep 29 14:40:49 2015 +0530

----------------------------------------------------------------------
 .../das/metering-service/ues-patch/README.md    |   8 +
 .../metering-service/ues-patch/dashboard.jag    |  85 +++++++++
 .../ues-patch/ues-dashboards.js                 | 188 +++++++++++++++++++
 .../metering-service/ues-patch/ues-pubsub.js    |  27 +++
 4 files changed, 308 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/stratos/blob/24adbc33/extensions/das/metering-service/ues-patch/README.md
----------------------------------------------------------------------
diff --git a/extensions/das/metering-service/ues-patch/README.md b/extensions/das/metering-service/ues-patch/README.md
new file mode 100644
index 0000000..69e065c
--- /dev/null
+++ b/extensions/das/metering-service/ues-patch/README.md
@@ -0,0 +1,8 @@
+This folder (ues-patch) contains fix for DAS-3.0.0 analytics dashboard to  support reading request parameters from 
+dashboard url and publish the values to gadgets.
+
+You can find the related UES product jira here: https://wso2.org/jira/browse/UES-582
+Please follow below steps to apply the patch locally:
+
+1. Copy 'ues-dashboard.js' and 'ues-pubsub.js' files to <DAS-HOME>/repository/deployment/server/jaggeryapps/portal/js/ folder.
+2. Copy 'dashboard.jag' file to <DAS-HOME>/repository/deployment/server/jaggeryapps/portal/theme/templates/ folder.
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/24adbc33/extensions/das/metering-service/ues-patch/dashboard.jag
----------------------------------------------------------------------
diff --git a/extensions/das/metering-service/ues-patch/dashboard.jag b/extensions/das/metering-service/ues-patch/dashboard.jag
new file mode 100644
index 0000000..cccda65
--- /dev/null
+++ b/extensions/das/metering-service/ues-patch/dashboard.jag
@@ -0,0 +1,85 @@
+<!doctype html>
+<html lang="en">
+<head>
+    <meta charset="utf-8">
+    <meta http-equiv="X-UA-Compatible" content="IE=edge">
+    <meta name="viewport" content="width=device-width, initial-scale=1">
+    <link rel="icon" href="<%=urlPrefix%><%=utils.resolveUrl('images/favicon.png')%>" type="image/x-icon" />
+    <link rel="stylesheet" href="<%=urlPrefix%>css/bootstrap.min.css">
+    <link rel="stylesheet" href="<%=urlPrefix%>css/fontwso2.css">
+    <link rel="stylesheet" href="<%=urlPrefix%>css/fontwso2-extend.css">
+    <link rel="stylesheet" href="<%=urlPrefix%>css/OpenSans.css">
+    <link rel="stylesheet" href="<%=urlPrefix%>css/common.css">
+    <link rel="stylesheet" href="<%=urlPrefix%>css/dashboard.css">
+    <% include('/controllers/includes/theme-dashboard-styles.jag'); %>
+    <title>Dashboards</title>
+</head>
+<body>
+<div id="navigation" role="navigation" class="navbar navbar-inverse navbar-fixed-top">
+    <div class="container">
+        <div class="navbar-header">
+            <button data-target=".horizontal-bar" data-toggle="collapse" class="navbar-toggle" type="button">
+                <span class="sr-only">Toggle navigation</span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+                <span class="icon-bar"></span>
+            </button>
+            <a href="<%=dbRoot%>" class="navbar-brand"><%=dashboard.title%></a>
+        </div>
+        <div class="collapse navbar-collapse horizontal-bar">
+            <ul class="nav navbar-nav">
+                <li<% if(dashboard.landing === pageId) { %> class="active"<% } %>>
+                    <a href="<%=dbRoot%>">Home</a>
+                </li>
+                <%
+var pages = dashboard.pages;
+pages.forEach(function (p) {
+    if (dashboard.landing !== p.id) {
+        %>
+                <li<%if (p.id === pageId) { %> class="active"<% } %>>
+                            <a href="<%=dbRoot%><%=p.id%>"><%=p.title%></a>
+                        </li>
+                    <% } %>
+                <% }); %>
+            </ul>
+            <ul class="nav navbar-nav navbar-right">
+            <% if (user) { %>
+                <li>
+                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
+                               <%=user.username%> <span class="caret"></span>
+                    </a>
+                    <ul class="dropdown-menu" role="menu">
+                        <li><a href="<%=urlPrefix%>logout?destination=<%=dest%>">Logout</a></li>
+                    </ul>
+                </li>
+            <% } else { %>
+                <li><a href="<%=urlPrefix%>login?destination=<%=dest%>">Login</a></li>
+                <% } %>
+            </ul>
+        </div>
+           <!--/.nav-collapse -->
+     </div>
+</div>
+<div id="wrapper"></div>
+<!--<iframe id="sandbox" src="preview.jag"></iframe>-->
+<script src="<%=urlPrefix%>js/jquery-1.10.2.js"></script>
+<script src="<%=urlPrefix%>js/bootstrap.min.js"></script>
+<!-- TODO fix shindig url -->
+<script src="/shindig/gadgets/js/container:open-views:opensearch:rpc:xmlutil:pubsub-2.js?c=1&debug=1&container=default"></script>
+<script src="<%=urlPrefix%>js/ues.js"></script>
+<script src="<%=urlPrefix%>js/ues-prefs.js"></script>
+<% include('/controllers/includes/common-scripts.jag'); %>
+<% include('/controllers/includes/dashboard-scripts.jag'); %>
+<script src="<%=urlPrefix%>js/ues-gadgets.js"></script>
+<script src="<%=urlPrefix%>js/ues-dashboards.js"></script>
+<script src="<%=urlPrefix%>js/ues-pubsub.js"></script>
+<script src="<%=urlPrefix%>extensions/components/gadget/index.js"></script>
+<script src="<%=urlPrefix%>extensions/components/widget/index.js"></script>
+<script src="<%=urlPrefix%>extensions/uris/local/index.js"></script>
+<script src="<%=urlPrefix%>extensions/uris/store/index.js"></script>
+<% include('/controllers/includes/theme-dashboard-scripts.jag'); %>
+<script>
+    ues.dashboards.render($('#wrapper'), ues.global.dashboard, ues.global.page);
+</script>
+</body>
+</html>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/24adbc33/extensions/das/metering-service/ues-patch/ues-dashboards.js
----------------------------------------------------------------------
diff --git a/extensions/das/metering-service/ues-patch/ues-dashboards.js b/extensions/das/metering-service/ues-patch/ues-dashboards.js
new file mode 100644
index 0000000..9d0742e
--- /dev/null
+++ b/extensions/das/metering-service/ues-patch/ues-dashboards.js
@@ -0,0 +1,188 @@
+(function () {
+
+    var findPlugin = function (type) {
+        var plugin = ues.plugins.components[type];
+        if (!plugin) {
+            throw 'ues dashboard plugin for ' + type + ' cannot be found';
+        }
+        return plugin;
+    };
+
+    var createComponent = function (container, component, done) {
+        var type = component.content.type;
+        var plugin = findPlugin(type);
+        var sandbox = $('<div id="' + component.id + '" class="ues-component"></div>');
+        sandbox.appendTo(container);
+        plugin.create(sandbox, component, ues.hub, done);
+    };
+
+    var updateComponent = function (component, done) {
+        var plugin = findPlugin(component.content.type);
+        var container = $('#' + component.id);
+        plugin.update(container, component, ues.hub, done);
+    };
+
+    var destroyComponent = function (component, done) {
+        var plugin = findPlugin(component.content.type);
+        var container = $('#' + component.id);
+        plugin.destroy(container, component, ues.hub, done);
+    };
+
+    var componentId = function (clientId) {
+        return clientId.split('-').pop();
+    };
+
+    var wirings;
+
+    var publishForClient = ues.hub.publishForClient;
+    ues.hub.publishForClient = function (container, topic, data) {
+        console.log('publishing data container:%s, topic:%s, data:%j', container.getClientID(), topic, data);
+        var clientId = componentId(container.getClientID());
+        var channels = wirings[clientId + '.' + topic];
+        if (!channels) {
+            return;
+        }
+        channels.forEach(function (channel) {
+            publishForClient.apply(ues.hub, [container, channel, data]);
+        });
+    };
+
+
+    var publish = ues.hub.publish;
+    ues.hub.publish = function (topic, data){
+        $(".container").find('.ues-component').each(function () {
+            var id = $(this).attr('id');
+            var channel = id + "." + topic;
+            publish.apply(ues.hub, [channel, data]);
+        });
+    }
+
+    var wires = function (page) {
+        var content = page.content;
+        var area;
+        var blocks;
+        var wirez = {};
+
+        var wire = function (wirez, id, listeners) {
+            var event;
+            var listener;
+            for (event in listeners) {
+                if (listeners.hasOwnProperty(event)) {
+                    listener = listeners[event];
+                    if (!listener.on) {
+                        continue;
+                    }
+                    listener.on.forEach(function (notifier) {
+                        var channel = notifier.from + '.' + notifier.event;
+                        var wire = wirez[channel] || (wirez[channel] = []);
+                        wire.push(id + '.' + event);
+                    });
+                }
+            }
+        };
+
+        for (area in content) {
+            if (content.hasOwnProperty(area)) {
+                blocks = content[area];
+                blocks.forEach(function (block) {
+                    var listeners = block.content.listen;
+                    if (!listeners) {
+                        return;
+                    }
+                    wire(wirez, block.id, listeners);
+                });
+            }
+        }
+        console.log(wirez);
+        return wirez;
+    };
+
+    var setDocumentTitle = function (dashboard, page) {
+        document.title = dashboard.title + ' | ' + page.title;
+    };
+
+    var renderPage = function (element, dashboard, page, done) {
+        setDocumentTitle(dashboard, page);
+        wirings = wires(page);
+        var container;
+        var area;
+        var layout = $(page.layout.content);
+        var content = page.content;
+        element.html(layout);
+        for (area in content) {
+            if (content.hasOwnProperty(area)) {
+                container = $('#' + area, layout);
+                content[area].forEach(function (options) {
+                    createComponent(container, options, function (err) {
+                        if (err) {
+                            console.error(err);
+                        }
+                    });
+                });
+            }
+        }
+        if (!done) {
+            return;
+        }
+        done();
+    };
+
+    var findPage = function (dashboard, id) {
+        var i;
+        var page;
+        var pages = dashboard.pages;
+        var length = pages.length;
+        for (i = 0; i < length; i++) {
+            page = pages[i];
+            if (page.id === id) {
+                return page;
+            }
+        }
+    };
+
+    var renderDashboard = function (element, dashboard, name, done) {
+        name = name || dashboard.landing;
+        var page = findPage(dashboard, name);
+        if (!page) {
+            throw 'requested page : ' + name + ' cannot be found';
+        }
+        renderPage(element, dashboard, page, done);
+    };
+
+    var rewireDashboard = function (page) {
+        wirings = wires(page);
+    };
+
+    var resolveURI = function (uri) {
+        var index = uri.indexOf('://');
+        var scheme = uri.substring(0, index);
+        var uriPlugin = ues.plugins.uris[scheme];
+        if (!uriPlugin) {
+            return uri;
+        }
+        var path = uri.substring(index + 3);
+        return uriPlugin(path);
+    };
+
+    ues.components = {
+        create: createComponent,
+        update: updateComponent,
+        destroy: destroyComponent
+    };
+
+    ues.dashboards = {
+        render: renderDashboard,
+        rewire: rewireDashboard,
+        findPage: findPage,
+        resolveURI: resolveURI
+    };
+
+    ues.assets = {};
+
+    ues.plugins = {
+        assets: {},
+        components: {},
+        uris: {}
+    };
+
+}());
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/stratos/blob/24adbc33/extensions/das/metering-service/ues-patch/ues-pubsub.js
----------------------------------------------------------------------
diff --git a/extensions/das/metering-service/ues-patch/ues-pubsub.js b/extensions/das/metering-service/ues-patch/ues-pubsub.js
new file mode 100644
index 0000000..b7b2537
--- /dev/null
+++ b/extensions/das/metering-service/ues-patch/ues-pubsub.js
@@ -0,0 +1,27 @@
+var applicationId;
+var clusterId;
+var vars;
+$(document).ready(function () {
+    var query = window.location.search.substring(1);
+    vars = query.split("&");
+
+    applicationId = getRequestParam('applicationId');
+    clusterId = getRequestParam('clusterId');
+
+    setTimeout(function () {
+        var data = {applicationId: applicationId, clusterId: clusterId};
+        console.log("Publishing request params: " + JSON.stringify(data));
+        ues.hub.publish("request-params",data);
+    }, 2000);
+
+});
+
+function getRequestParam(variable) {
+    for (var i = 0; i < vars.length; i++) {
+        var pair = vars[i].split("=");
+        if (pair[0] == variable) {
+            return pair[1];
+        }
+    }
+    return null;
+}