r2474 - in trunk/nuiton-profiling/src/main: java/org/nuiton/profiling resources/nuiton-js resources/org/nuiton/profiling/web
Author: bpoussin Date: 2013-01-26 04:41:09 +0100 (Sat, 26 Jan 2013) New Revision: 2474 Url: http://nuiton.org/projects/nuiton-utils/repository/revisions/2474 Log: - ajout de la sauvegarde en base dans le navigateur pour retrouver ses donnees entre deux session. - on peut renommer les snapshots - on effacer des snapshots - suppression des includes inutils JS Modified: trunk/nuiton-profiling/src/main/java/org/nuiton/profiling/NuitonTrace.java trunk/nuiton-profiling/src/main/resources/nuiton-js/wro.xml trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/index.html trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/nuiton-profiling.css trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/nuiton-profiling.js Modified: trunk/nuiton-profiling/src/main/java/org/nuiton/profiling/NuitonTrace.java =================================================================== --- trunk/nuiton-profiling/src/main/java/org/nuiton/profiling/NuitonTrace.java 2013-01-25 21:35:52 UTC (rev 2473) +++ trunk/nuiton-profiling/src/main/java/org/nuiton/profiling/NuitonTrace.java 2013-01-26 03:41:09 UTC (rev 2474) @@ -765,4 +765,36 @@ // initialise puisqu'on est dans l'init :( init(); } + + /** + * Force le lancement du serveur web, permet d'avoir le serveur sur une + * machine pour monitorer une application qui est sur une autre. L'avantage + * est de pouvoir centraliser les sauvegardes sur le meme domaine web + * @param args le port a utiliser si vide utilise les variables d'environnement + * et en dernier recourrs utilise le port 4488 + */ + static public void main(String... args) { + System.out.println("Starting Nuiton Profiling ..."); + String portString; + if (args != null && args.length > 0) { + portString = args[0]; + } else { + portString = getOption(PORT_OPTION); + } + if (portString == null) { + portString = "4488"; + } + System.out.println("NuitonProfiling web port: " + portString); + if (portString != null) { + try { + int port = Integer.parseInt(portString); + if (port > 0) { + startWebService(port); + } + } catch (Exception eee) { + eee.printStackTrace(System.err); + System.err.println("Can't parse port number: "+ portString); + } + } + } } Modified: trunk/nuiton-profiling/src/main/resources/nuiton-js/wro.xml =================================================================== --- trunk/nuiton-profiling/src/main/resources/nuiton-js/wro.xml 2013-01-25 21:35:52 UTC (rev 2473) +++ trunk/nuiton-profiling/src/main/resources/nuiton-js/wro.xml 2013-01-26 03:41:09 UTC (rev 2474) @@ -2,10 +2,8 @@ <group name='profiling-ui-web'> <group-ref>jquery</group-ref> - <group-ref>bootstrap-responsive</group-ref> - <group-ref>jquery-ui</group-ref> + <group-ref>bootstrap</group-ref> <group-ref>jquery-ui-base</group-ref> - <group-ref>jquery-ui-fr</group-ref> <!-- plugin jqgrid --> <group-ref>jqgrid-fr</group-ref> Modified: trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/index.html =================================================================== --- trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/index.html 2013-01-25 21:35:52 UTC (rev 2473) +++ trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/index.html 2013-01-26 03:41:09 UTC (rev 2474) @@ -15,27 +15,31 @@ <div class="navbar navbar-fixed-top"> <div class="navbar-inner"> <div class="container"> - <!-- .btn-navbar is used as the toggle for collapsed navbar content --> - <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse"> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - <span class="icon-bar"></span> - </a> <a class="brand" href="http://maven-site.nuiton.org/nuiton-utils/nuiton-profiling/index.html"> Nuiton Profiling </a> - <form action="javascript:requestNewData()"> - <input type="text" id="newDatas" placeholder="app url" value="http://[::1]:4488/data"/> - <input id="addStat" type="submit" value="Add"/> + <form class="navbar-form pull-left" action="javascript:requestNewData()"> + <input type="text" id="profilingUrl" placeholder="profiling url" value="http://[::1]:4488/"/> </form> - <input id="clearStat" type="submit" value="Clear"/> + <form class="navbar-form pull-left" action="#"> + <button id="addStat"><i class="icon-picture"></i> Add</button> + <button id="clearStat"><i class="icon-remove"></i> Clear</button> + </form> - Datas: <select id="datas"> - <option label="" value=""></option> - </select> + <ul class="nav"> + <li class="dropdown"> + <a href="#" class="dropdown-toggle" data-toggle="dropdown"> + Data + <b class="caret"></b> + </a> + <ul id="datas" class="dropdown-menu" > + </ul> + </li> + </ul> + </div> </div> </div> Modified: trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/nuiton-profiling.css =================================================================== --- trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/nuiton-profiling.css 2013-01-25 21:35:52 UTC (rev 2473) +++ trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/nuiton-profiling.css 2013-01-26 03:41:09 UTC (rev 2474) @@ -3,7 +3,11 @@ } form { display: inline; + margin-right: 4px; } +form button { + margin-top: 7px; +} #download { margin-bottom: 5px; } @@ -11,3 +15,9 @@ display: inline-block; width: 250px; } +li.inline { + white-space: nowrap; +} +li.inline a { + display: inline; +} Modified: trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/nuiton-profiling.js =================================================================== --- trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/nuiton-profiling.js 2013-01-25 21:35:52 UTC (rev 2473) +++ trunk/nuiton-profiling/src/main/resources/org/nuiton/profiling/web/nuiton-profiling.js 2013-01-26 03:41:09 UTC (rev 2474) @@ -1,9 +1,15 @@ jQuery(document).ready(function($) { - $('#newDatas').val(window.location.origin); + restoreDatabase(); + $('#profilingUrl').val(window.location.origin); + $('#addStat').click(function () { + requestNewData(); + }); + $('#clearStat').click(function () { - var url = $("#newDatas").val() + "/api/clear"; + var url = $("#profilingUrl").val() + "/api/clear"; $.get(url); + addMenuEntry(); }); $('#download').click(function () { @@ -31,18 +37,12 @@ a.href = window.URL.createObjectURL(blob); a.download = 'nuitonprofiling.csv'; a.click(); - window.URL.revokeObjectURL(a.href); + window.setTimeout(function() { + // on delai car sinon, le click a pas le temps de se faire + window.URL.revokeObjectURL(a.href); + }, 1000); }); -$("select#datas").change(function () { - var index = $("select#datas option:selected").val(); - if (index == "") { - loadData({}); - } else { - loadData(datas[index]); - } - }); - getGrid().jqGrid({ datatype: processrequest, mtype: 'POST', @@ -83,9 +83,8 @@ function requestNewData() { - var url = $("#newDatas").val() + "/data"; - var select = $("#datas"); - getNewData(url, select); + var url = $("#profilingUrl").val() + "/data"; + getNewData(url); } function getGrid() { @@ -93,7 +92,6 @@ } var currentData = {}; -var datas = []; /** * Charge les data comme current data et force le rechargement de la grille @@ -108,22 +106,127 @@ * Recupere les donnees d'une instance de Nuiton Profiling et l'ajoute * a la liste des donnees disponibles */ -function getNewData (url, select) { +function getNewData (url) { $.ajax({ type: "GET", url: url, dataType: "jsonp", success: function(data){ - var date = new Date(); - select.append('<option label="'+date+'" value="'+datas.length+'"/>'); - datas.push(data) + addMenuEntry(data); } }); } +/** + * Creer un lien dans le menu + */ +function createLinkToLoad(text) { + var result = $('<a href="#">'+text+'</a>').click(function() { + loadData($(this).parent().data('profiling-data')); + }); + return result; +} +/** + * retourne le menu des snapshot disponible + */ +function getMenu() { + var menu = $("#datas"); + return menu; +} /** + * sauvegarde dans la base local pour pouvoir recuperer les info entre deux sessions + */ +function saveDatabase() { + var db = []; + getMenu().children().each(function (i, e) { + var data = $(this).data('profiling-data'); + var text = $(this).text(); + db.push({text:text, data:data}); + }); + var json = JSON.stringify(db); + localStorage.setItem('profiling', json); +} + +/** + * recuperer les info sauvegardees + */ +function restoreDatabase() { + var json = localStorage.getItem('profiling') || '[]'; + var db = JSON.parse(json); + $.each(db, function(i, e) { + addMenuEntry(e.data, e.text, true); + }); +} + +/** + * Ajoute une entre au menu des snapshot disponible et fait un appel a la + * sauvegarde les donnees dans la base + * + * // TODO retravailler le code, il est vraiment crado :( + */ +function addMenuEntry(data, title, restoration) { + var menu = getMenu(); + var li; + if (data) { + var date = title || new Date(); + + var a = createLinkToLoad(date); + var edit = $('<li class="icon-pencil"></li>').click(function() { + var a = $(this).parent().children("a"); + var text = a.text(); + + var input = $('<input type="text" value="'+text+'"></input>') + .click(function () { + return false; // false pour que le menu, ne se referme pas + }) + .keyup(function (e) { + if (e.keyCode == 13) { + // retour chariot == validation + var text = $(this).val(); + var a = createLinkToLoad(text); + $(this).replaceWith(a); + saveDatabase(); + } else if (e.keyCode == 27) { + // ESC == abandont + var text = $(this).data('old-text'); + var a = createLinkToLoad(text); + $(this).replaceWith(a); + } + }) + .blur(function () { + // on perd le focus == validation + var text = $(this).val(); + var a = createLinkToLoad(text); + $(this).replaceWith(a); + saveDatabase(); + }); + input.data('old-text', text); + a.replaceWith(input); + input.focus(); + input.select(); + return false; // false pour que le menu, ne se referme pas + }); + var remove = $('<li class="icon-remove"></li>').click(function() { + $(this).parent().remove(); + saveDatabase(); + }); + li = $('<li class="inline"></li>'); + li.data("profiling-data", data); + + li.append(a); + li.append(edit); + li.append(remove); + } else { + li = $('<li class="divider"></li>'); + } + menu.append(li); + restoration || saveDatabase(); +} + + +/** * Pour les arbres les parametres sont: * nodeid: le nom du noeud qui a ete ouvert * n_level: le level du noeud qui a ete ouvert
participants (1)
-
bpoussin@users.nuiton.org