From 7e483a038eb61377f8f738ad7cb3b35d8dce5f37 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jordan=20Aug=C3=A9?= Date: Fri, 6 Dec 2013 16:28:43 +0100 Subject: [PATCH] added sandbox for testing plugins + random record generator --- manifold/static/js/record_generator.js | 71 ++++++++++++++++++++++++++ plugins/maddash/static/css/maddash.css | 3 +- sandbox/urls.py | 4 +- sandbox/views.py | 48 +++++++++++++---- unfold/page.py | 4 ++ 5 files changed, 118 insertions(+), 12 deletions(-) create mode 100644 manifold/static/js/record_generator.js diff --git a/manifold/static/js/record_generator.js b/manifold/static/js/record_generator.js new file mode 100644 index 00000000..f53c7ee9 --- /dev/null +++ b/manifold/static/js/record_generator.js @@ -0,0 +1,71 @@ +/* Buffered DOM updates */ +var RecordGenerator = Class.extend({ + + init: function(query, generators, number) + { + this._query = query; + this._generators = generators; + this._number = number; + }, + + random_int: function(options) + { + var default_options = { + max: 1000 + } + + if (typeof options == 'object') + options = $.extend(default_options, options); + else + options = default_options; + + return Math.floor(Math.random()*(options.max+1)); + }, + + random_string: function() + { + var default_options = { + possible: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", + len: this.random_int({max: 15}) + } + + if (typeof options == 'object') + options = $.extend(default_options, options); + else + options = default_options; + + var text = ""; + + for( var i=0; i < options.len; i++ ) + text += options.possible.charAt(Math.floor(Math.random() * options.possible.length)); + + return text; + + }, + + generate_record: function() + { + var self = this; + var record = {}; + + $.each(this._query.fields, function(i, field) { + record[field] = self[self._generators[field]](); + }); + + // Publish records + manifold.raise_record_event(self._query.query_uuid, NEW_RECORD, record); + + }, + + run: function() + { + var record; + manifold.raise_record_event(this._query.query_uuid, CLEAR_RECORDS); + for (var i = 0; i < this._number; i++) { + record = this.generate_record(); + /* XXX publish record */ + } + manifold.raise_record_event(this._query.query_uuid, DONE); + + } +}); diff --git a/plugins/maddash/static/css/maddash.css b/plugins/maddash/static/css/maddash.css index 93ece291..9b8abbce 100644 --- a/plugins/maddash/static/css/maddash.css +++ b/plugins/maddash/static/css/maddash.css @@ -1,5 +1,6 @@ -#maddash__maddash { +.MadDash { height: 600px; + background: white; } .grid-container{float:left;overflow:hidden;margin-right:10px;} diff --git a/sandbox/urls.py b/sandbox/urls.py index e5b210c9..94e94634 100644 --- a/sandbox/urls.py +++ b/sandbox/urls.py @@ -24,7 +24,9 @@ from django.views.generic.base import TemplateView from django.conf.urls import patterns, include, url from sandbox.views import MyPluginView +from sandbox.views import MadDashView urlpatterns = patterns('', - url(r'^myplugin/?$', MyPluginView.as_view(), name='myplugin') + url(r'^myplugin/?$', MyPluginView.as_view(), name='myplugin'), + url(r'^maddash/?$', MadDashView.as_view(), name='maddash') ) diff --git a/sandbox/views.py b/sandbox/views.py index dda17718..707e8f73 100644 --- a/sandbox/views.py +++ b/sandbox/views.py @@ -26,14 +26,13 @@ import json from django.http import HttpResponseRedirect, HttpResponse from django.shortcuts import render from django.template.loader import render_to_string - -from unfold.loginrequired import FreeAccessView +from manifold.core.query import Query +from plugins.myplugin import MyPlugin +from plugins.maddash import MadDash from ui.topmenu import topmenu_items, the_user - +from unfold.loginrequired import FreeAccessView from unfold.page import Page -from plugins.myplugin import MyPlugin - # NOTE # initially all the portal views were defined in this single file # all the other ones have now migrated into separate classes/files for more convenience @@ -46,17 +45,14 @@ class MyPluginView(FreeAccessView): page = Page(self.request) -# pres_view = PresView(page = page) - plugin = MyPlugin(page = page, html="

PresView needs to be integrated

") - + plugin = MyPlugin(page = page) context = super(MyPluginView, self).get_context_data(**kwargs) - context['unfold_main'] = plugin.render(self.request) # more general variables expected in the template context['title'] = 'Sandbox for MyPlugin plugin' # the menu items on the top - context['topmenu_items'] = topmenu_items('PresView', self.request) + context['topmenu_items'] = topmenu_items('myplugin', self.request) # so we can sho who is logged context['username'] = the_user(self.request) @@ -65,3 +61,35 @@ class MyPluginView(FreeAccessView): return context + +class MadDashView(FreeAccessView): + template_name = "view-unfold1.html" + + def get_context_data(self, **kwargs): + page = Page(self.request) + + # This will simulate fake records in order to test the plugin + fake_query = Query.get('ping').select('hrn', 'src_hostname', 'dst_hostname', 'delay') + fake_query_all = Query.get('ping').select('hrn', 'src_hostname', 'dst_hostname', 'delay') + + generators = { + 'hrn': 'random_string', + 'src_hostname': 'random_string', + 'dst_hostname': 'random_string', + 'delay': 'random_int' + } + page.generate_records(fake_query, generators, 5) + page.generate_records(fake_query_all, generators, 20) + + plugin = MadDash(query = fake_query, query_all = fake_query_all, page = page) + context = super(MadDashView, self).get_context_data(**kwargs) + context['unfold_main'] = plugin.render(self.request) + context['title'] = 'Sandbox for MadDash plugin' + context['topmenu_items'] = topmenu_items('maddash', self.request) + context['username'] = the_user(self.request) + + prelude_env = page.prelude_env() + context.update(prelude_env) + + return context + diff --git a/unfold/page.py b/unfold/page.py index c61d1593..0d3a81e6 100644 --- a/unfold/page.py +++ b/unfold/page.py @@ -69,6 +69,10 @@ class Page: # we only do this if run_it is set if run_it: self._queue.append ( (query.query_uuid,domid) ) + def generate_records(self, query, generators, number): + self.add_js_files('js/record_generator.js'); + self.add_js_chunks('$(document).ready(function() { new RecordGenerator(' + query.to_json() + ', ' + json.dumps(generators) + ', 10).run(); });') + # return the javascript code for exposing queries # all queries are inserted in the global manifold object # in addition, the ones enqueued with 'run_it=True' are triggered -- 2.43.0