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 <[email protected]> Authored: Tue Sep 29 10:48:46 2015 +0530 Committer: Imesh Gunaratne <[email protected]> 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; +}
