/* * part of pfSense (https://www.pfsense.org) * Copyright (c) 2016 Rubicon Communications, LLC (Netgate) * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ function draw_graph(refreshInterval, then) { d3.select("div[id^=nvtooltip-]").remove(); d3.select(".interface-label").remove(); var invert = localStorage.getItem('invert'); var size = localStorage.getItem('size'); startTime = 120 * refreshInterval; then.setSeconds(then.getSeconds() - startTime); var thenTime = then.getTime(); $.each( JSON.parse(localStorage.getItem('interfaces')), function( key, value ) { latest[value + 'in'] = 0; latest[value + 'out'] = 0; var stepTime = thenTime; //initialize first 120 graph points to zero for (i = 1; i < 120; i++) { stepTime = stepTime + (1000 * refreshInterval); myData[value].forEach(function(entry) { entry.values.push({ x: stepTime, y: 0 }); }); } nv.addGraph(function() { charts[value] = nv.models.lineChart() .useInteractiveGuideline(true) .color(d3.scale.category20().range()) .rightAlignYAxis(true) .margin({top: 0, left:25, bottom: 30, right: 45}); charts[value] .x(function(d,i) { return d.x }); charts[value].xAxis .tickFormat(function (d) { return d3.time.format('%M:%S')(new Date(d)); }); //TODO change to localStorage.getItem('sizeLabel'); var sizeLabel = $( "#traffic-graph-size option:selected" ).text(); d3.select('#traffic-chart-' + value + ' svg') .append("text") .attr('class', 'interface-label') .attr("x", 20) .attr("y", 20) .attr("font-size", 18) .text(value); charts[value].yAxis .tickFormat(d3.format('.2s')) .showMaxMin(false); d3.select('#traffic-chart-' + value + ' svg') .datum(myData[value]) .transition().duration(500) .call(charts[value]); nv.utils.windowResize(charts[value].update); //custom tooltip contents charts[value].interactiveLayer.tooltip.contentGenerator(function(data) { var units = 'b/s'; console.log(localStorage.getItem('size')); if(localStorage.getItem('size') === "1") { units = 'B/s' } var content = '
' + data.series[v].key + ' | ' + formattedVal + ' |