var points_per_px = 0.3; var controls_container = ""; var reset_button = "
Reset
"; function labelFormatter(label, series) { var append_dots = (label.length > 18); label = label.substr(0, 17); if (append_dots) { label += "…"; } return "
" + label + "
" + Math.round(series.percent) + "%
"; } function legendFormatter(label, series) { var append_dots = (label.length > 28); label = label.substr(0, 27); if (append_dots) { label += "…"; } return label; } function setup_plot_zoom(plot, pdata, num_data_points) { plot.getPlaceholder().bind("plotselected", function (event, ranges) { $.each(plot.getXAxes(), function(_, axis) { var zoom_correction_factor = (1000*300*num_data_points)/(ranges.xaxis.to - ranges.xaxis.from); plot.getOptions().series.downsample.threshold = Math.floor(plot.getPlaceholder().width() * points_per_px * zoom_correction_factor); axis.options.min = ranges.xaxis.from; axis.options.max = ranges.xaxis.to; }); plot.setData(pdata); plot.setupGrid(); plot.draw(); plot.clearSelection(); plot.getPlaceholder().children("#controls") .css("bottom", (plot.getPlotOffset().bottom+5) + "px") .css("left", (plot.getPlotOffset().left+5) + "px") .css("display", "block"); }); var plot_controls = $(controls_container).appendTo(plot.getPlaceholder()); $(reset_button) .appendTo(plot_controls) .click(function (event) { event.preventDefault(); $.each(plot.getXAxes(), function(_, axis) { axis.options.min = null; axis.options.max = null; }); plot.getOptions().series.downsample.threshold = Math.floor(plot.getPlaceholder().width() * points_per_px); plot.setData(pdata); plot.setupGrid(); plot.draw(); plot.getPlaceholder().children("#controls") .css("bottom", (plot.getPlotOffset().bottom+5) + "px") .css("left", (plot.getPlotOffset().left+5) + "px") .css("display", "none"); }); plot.getPlaceholder().children("#controls") .css("bottom", (plot.getPlotOffset().bottom+5) + "px") .css("left", (plot.getPlotOffset().left+5) + "px"); } // Per router statistics function network_graph(netif_stats, field, tx_label, rx_label) { var netstat = $("#"+field); var tx = [], rx = []; var len, i; for (len=netif_stats.length, i=0; i 0) { pdata.push( {"label": "2.4 GHz", "data": clients_w2, "color": "#CB4B4B"} ); } if (clients_w5.length > 0) { pdata.push( {"label": "5 GHz", "data": clients_w5, "color": "#EDC240"} ); } if (clients_eth.length > 0) { pdata.push( {"label": "Ethernet", "data": clients_eth, "color": "#4DA74A"} ); } pdata.push( {"label": "Total", "data": clients, "color": "#8CACC6"} ); var plot = $.plot(clientstat, pdata, { xaxis: {mode: "time", timezone: "browser"}, selection: {mode: "x"}, yaxis: {min: 0}, legend: {noColumns: 4, hideable: true}, series: {downsample: {threshold: Math.floor(clientstat.width() * points_per_px)}} }); setup_plot_zoom(plot, pdata, len); } function loadavg_graph() { var loadstat = $("#loadstat"); var loadavg = []; var len, i; for (len=router_stats.length, i=0; i 0) { pdata.push( {"label": "Airtime 5 GHz / %", "data": airtime5, "color": "#EDC240"} ); } var plot = $.plot(airstat, pdata, { xaxis: {mode: "time", timezone: "browser"}, selection: {mode: "x"}, yaxis: {min: 0, max: 100}, legend: {noColumns: 2, hideable: true}, series: {downsample: {threshold: Math.floor(airstat.width() * points_per_px)}} }); setup_plot_zoom(plot, pdata, len); } // Global statistics function global_client_graph(indata,field) { var clientstat = $("#"+field); var clients = []; var len, i; for (len=indata.length, i=0; i%s: %p.1%", shifts: {x: 15, y: 5}, defaultTheme: true}, series: {pie: { show: true, radius: 99/100, label: {show: true, formatter: labelFormatter, radius: 0.5, threshold: 0.10}, combine: {threshold: 0.005} }} }); placeholder.bind("plotclick", function(event, pos, obj) { if (obj && obj.series.label != "Other") { window.location.href = routers_page_url + encodeURI("?q=firmware:^" + obj.series.label + "$ " + hoodstr); } }); } function global_router_models_graph(id,field) { var placeholder = $("#"+id); var pdata = []; for (var mdname in router_models) { pdata.push({ "label": mdname, "data": [router_models[mdname][field]] }); } var plot = $.plot(placeholder, pdata, { legend: {noColumns: 1, show: true, "labelFormatter": legendFormatter}, grid: {hoverable: true, clickable: true}, tooltip: {show: true, content: "%s: %p.1%", shifts: {x: 15, y: 5}, defaultTheme: true}, series: {pie: { show: true, radius: 99/100, label: {show: true, formatter: labelFormatter, radius: 0.5, threshold: 0.2}, combine: {threshold: 0.019} }} }); placeholder.bind("plotclick", function(event, pos, obj) { if (obj && obj.series.label != "Other") { window.location.href = routers_page_url + encodeURI("?q=hardware:^" + obj.series.label.replace(/ /g, '_') + "$ " + hoodstr); } }); }