From e7d64f1828ae193a8329e0e1dada24082cccf879 Mon Sep 17 00:00:00 2001 From: Nigel Kukard <nkukard@lbsd.net> Date: Thu, 23 Jan 2014 22:26:19 +0000 Subject: [PATCH] Added our flot functions for opentrafficshaper --- .../pages/static/js/flot-functions.js | 193 ++++++++++++++++++ 1 file changed, 193 insertions(+) create mode 100644 opentrafficshaper/plugins/webserver/pages/static/js/flot-functions.js diff --git a/opentrafficshaper/plugins/webserver/pages/static/js/flot-functions.js b/opentrafficshaper/plugins/webserver/pages/static/js/flot-functions.js new file mode 100644 index 0000000..29dca02 --- /dev/null +++ b/opentrafficshaper/plugins/webserver/pages/static/js/flot-functions.js @@ -0,0 +1,193 @@ +/* + * Functions to help create flot graphs + * Copyright (c) 2013-2014, AllWorldIT + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + */ + + +// Function draw a graph +function awit_flot_draw_graph(options) { + + // Setup default graph options + var defaults = { + + series: { + lines: { + show: true, + lineWidth: 1, + fill: true, + fillColor: { + colors: [ + { opacity: 0.1 }, + { opacity: 0.13 } + ] + } + }, + + points: { + show: false, + lineWidth: 2, + radius: 3 + }, + + shadowSize: 0, + stack: true + }, + + grid: { + hoverable: true, + clickable: false, + tickColor: "#f9f9f9", + borderWidth: 1 + }, + + legend: { + labelBoxBorderColor: "#aaa" + }, + + xaxes: [ + { + mode: "time", + + tickSize: [5, "minute"] +// tickLength: 10 +/* + tickFormatter: function (v, axis) { + var date = new Date(v); + if (date.getSeconds() % 160 == 0) { + //if (v % m == 0) { + var hours = date.getHours() < 10 ? "0" + date.getHours() : date.getHours(); + var minutes = date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(); + var seconds = date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(); + + return hours + ":" + minutes + ":" + seconds; + } else { + return ""; + } + } +*/ + } + + ], + + yaxes: [ + { + position: 'left', + min: 0, + tickFormatter: _flot_format_bandwidth + }, + { + position: 'right', + min: 0, + alignTicksWithAxis: true, + tickDecimals: false + } + ] + } + + // Merge our options ontop of our defaults + var plotOptions = jQuery.extend({},defaults,options); + + // Grab the placeholder + var placeholder = jQuery('#'+plotOptions.id); + + // Plot the graph, the [] signifies an empty dataset, the data is populated by awitds + var plot = jQuery.plot(placeholder, [ ], plotOptions); + + return plot; +} + + +// Function draw pie graph +function awit_flot_draw_pie(options) { + + // Setup default graph options + var defaults = { + series: { + pie: { + show: true, + radius: 1, + label: { + show: true, + radius: 3/4, + formatter: _flot_format_pie_label, + background: { + opacity: 0.5, + color: '#000' + } + } + } + } + } + + // Merge our options ontop of our defaults + var plotOptions = jQuery.extend({},defaults,options); + + // Set count to 1 and override timestamp to 1 for all identifiers + if (typeof(plotOptions.awitds) !== 'undefined') { + for (var tag in plotOptions.awitds.xaxis) { + for (var identifier in plotOptions.awitds.xaxis[tag]) { + plotOptions.awitds.xaxis[tag][identifier].maxCount = 1; + plotOptions.awitds.xaxis[tag][identifier].overrideTimestamp = 1; + } + } + } + + // Grab the placeholder + var placeholder = jQuery('#'+plotOptions.id); + + // Plot the graph, the [] signifies an empty dataset, the data is populated by awitds + var plot = jQuery.plot(placeholder, [ ], plotOptions); + + return plot; +} + + +// Function to format thousands with , and add Kbps +function _flot_format_bandwidth(value, axis) { + return _flot_format_thousands(value,axis) + ' Kbps'; +} + + +// Function to format thousands +function _flot_format_thousands(value, axis) { + // Convert number to string + value = value.toString(); + // Match on 3 digits + var R = new RegExp('(-?[0-9]+)([0-9]{3})'); + while(R.test(value)) { + // Replace market with , + value = value.replace(R, '$1,$2'); + } + + return value; +} + +function _flot_format_pie_label(label, series) { + return "<div style='font-size:8pt; text-align:center; padding:2px; color:white;'>" + label + "<br/>" + Math.round(series.percent) + "%</div>"; +} + + + +// vim: ts=4 -- GitLab