Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    AYUDA: Requiero modificar Top-10 de traffic graph

    Scheduled Pinned Locked Moved Español
    1 Posts 1 Posters 140 Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • G
      gauntled
      last edited by

      ===group

      ===Hola amigos tengo mucho tiempo con pfsense y he comenzado a personalizarlo, pero una de mis inquietudes y que quiero lograr es que modifique el Top-10 de traffic graph como bien sabran algunos expertos esta herramienta solo muestra los ultimos 10 mi idea es mostrar todos mis usuarios para poder monitorearlos en tiempo real, y se que preguntaran o diras sobrecargaras el procesador y todo eso, pero les digo tengo el procesador y ram para esto, llegue al punto de colocar la grafica a 0.3 seg y que la lista de usuarios sea a 1 seg.

      De antemano muchas gracias
      No se si alguno pueda ayudarme
      A los que deseen les ayude una vez mi hilo sea resuelto con mucho gusto los apoyo y aporto

      code_text
      ```<?php
      /*
       * status_graph.php
       *
       * part of pfSense (https://www.pfsense.org)
       * Copyright (c) 2004-2019 Rubicon Communications, LLC (Netgate)
       * All rights reserved.
       *
       * originally based on m0n0wall (http://m0n0.ch/wall)
       * Copyright (c) 2003-2004 Manuel Kasper <mk@neon1.net>.
       * 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.
       */
      
      ##|+PRIV
      ##|*IDENT=page-status-trafficgraph
      ##|*NAME=Status: Traffic Graph
      ##|*DESCR=Allow access to the 'Status: Traffic Graph' page.
      ##|*MATCH=status_graph.php*
      ##|*MATCH=bandwidth_by_ip.php*
      ##|*MATCH=graph.php*
      ##|*MATCH=ifstats.php*
      ##|-PRIV
      
      require_once("guiconfig.inc");
      require_once("ipsec.inc");
      
      if (is_array($config["traffic_graphs"])){
      	$pconfig = $config["traffic_graphs"];
      }
      // Get configured interface list
      $ifdescrs = get_configured_interface_with_descr();
      if (ipsec_enabled()) {
      	$ifdescrs['enc0'] = gettext("IPsec");
      }
      
      foreach (array('server', 'client') as $mode) {
      	if (is_array($config['openvpn']["openvpn-{$mode}"])) {
      		foreach ($config['openvpn']["openvpn-{$mode}"] as $id => $setting) {
      			if (!isset($setting['disable'])) {
      				$ifdescrs['ovpn' . substr($mode, 0, 1) . $setting['vpnid']] = gettext("OpenVPN") . " " . $mode . ": ".htmlspecialchars($setting['description']);
      			}
      		}
      	}
      }
      
      $ifdescrs = array_merge($ifdescrs, interface_ipsec_vti_list_all());
      
      if (!empty($_POST)) {
      	// update view if settings are changed or saved
      	$curif = $_POST['if'];
      	$found = false;
      	foreach ($ifdescrs as $descr => $ifdescr) {
      		if ($descr == $curif) {
      			$found = true;
      			break;
      		}
      	}
      	if ($found === false) {
      		header("Location: status_graph.php");
      		exit;
      	}
      	$cursort = $_POST['sort'];
      	$curfilter = $_POST['filter'];
      	$curhostipformat = $_POST['hostipformat'];
      	$curbackgroundupdate = $_POST['backgroundupdate'];
      	$curinvert = $_POST['invert'];
      	$cursmoothing = $_POST['smoothfactor'];
      
      	// Save data to config
      	if (isset($_POST['save'])) {
      		$pconfig = array();
      		$pconfig["if"] = $curif;
      		$pconfig["sort"] = $cursort;
      		$pconfig["filter"] = $curfilter;
      		$pconfig["hostipformat"] = $curhostipformat;
      		$pconfig["backgroundupdate"] = $curbackgroundupdate;
      		$pconfig["smoothfactor"] = $cursmoothing;
      		$pconfig["invert"] = $curinvert;
      		$config["traffic_graphs"] = array();
      		$config["traffic_graphs"] = $pconfig;
      		write_config("Traffic Graphs settings updated");
      	}
      } else {
      	// default settings from config
      	if (is_array($pconfig)) {
      		$curif = $pconfig['if'];
      		$cursort = $pconfig['sort'];
      		$curfilter = $pconfig['filter'];
      		$curhostipformat = $pconfig['hostipformat'];
      		$curbackgroundupdate = $pconfig['backgroundupdate'];
      		$cursmoothing = $pconfig['smoothfactor'];
      		$curinvert = $pconfig['invert'];
      	} else {
      		// initialize when no config details are present
      		if (empty($ifdescrs["wan"])) {
      			/* Handle the case when WAN has been disabled. Use the first key in ifdescrs. */
      			reset($ifdescrs);
      			$curif = key($ifdescrs);
      		} else {
      			$curif = "wan";
      		}
      		$cursort = "";
      		$curfilter = "";
      		$curhostipformat = "";
      		$curbackgroundupdate = "";
      		$cursmoothing = 0;
      		$curinvert = "";
      	}
      }
      
      function iflist() {
      	global $ifdescrs;
      
      	$iflist = array();
      
      	foreach ($ifdescrs as $ifn => $ifd) {
      		$iflist[$ifn] = $ifd;
      	}
      
      	return($iflist);
      }
      
      $pgtitle = array(gettext("Status"), gettext("Traffic Graph"));
      
      include("head.inc");
      
      $form = new Form();
      $form->addClass('auto-submit');
      
      $section = new Form_Section('Graph Settings');
      
      $group = new Form_Group('Traffic Graph');
      
      $group->add(new Form_Select(
      	'if',
      	null,
      	$curif,
      	iflist()
      ))->setHelp('Interface');
      
      $group->add(new Form_Select(
      	'sort',
      	null,
      	$cursort,
      	array (
      		'in'	=> gettext('Bandwidth In'),
      		'out'	=> gettext('Bandwidth Out')
      	)
      ))->setHelp('Sort by');
      
      $group->add(new Form_Select(
      	'filter',
      	null,
      	$curfilter,
      	array (
      		'local'	=> gettext('Local'),
      		'remote'=> gettext('Remote'),
      		'all'	=> gettext('All')
      	)
      ))->setHelp('Filter');
      
      $group->add(new Form_Select(
      	'hostipformat',
      	null,
      	$curhostipformat,
      	array (
      		''			=> gettext('IP Address'),
      		'hostname'	=> gettext('Host Name'),
      		'descr'		=> gettext('Description'),
      		'fqdn'		=> gettext('FQDN')
      	)
      ))->setHelp('Display');
      
      $section->add($group);
      
      $group2 = new Form_Group('Controls');
      
      $group2->add(new Form_Select(
      	'backgroundupdate',
      	null,
      	$curbackgroundupdate,
      	array (
      		'false'	=> gettext('Clear graphs when not visible.'),
      		'true'	=> gettext('Keep graphs updated on inactive tab. (increases cpu usage)'),
      	)
      ))->setHelp('Background updates');
      
      $group2->add(new Form_Select(
      	'invert',
      	null,
      	$curinvert,
      	array (
      		'true'	=> gettext('On'),
      		'false'	=> gettext('Off'),
      	)
      ))->setHelp('Invert in/out');
      
      $group2->add(new Form_Input(
      	'smoothfactor',
      	null,
      	'range',
      	$cursmoothing,
      	array (
      		'min' => 0,
      		'max' => 5,
      		'step' => 1
      		)
      
      ))->setHelp('Graph Smoothing');
      
      $section->add($group2);
      
      $form->add($section);
      print $form;
      
      $realif = get_real_interface($curif);
      ?>
      
      <script src="/vendor/d3/d3.min.js?v=<?=filemtime('/usr/local/www/vendor/d3/d3.min.js')?>"></script>
      <script src="/vendor/nvd3/nv.d3.js?v=<?=filemtime('/usr/local/www/vendor/nvd3/nv.d3.js')?>"></script>
      <script src="/vendor/visibility/visibility-1.2.3.min.js?v=<?=filemtime('/usr/local/www/vendor/visibility/visibility-1.2.3.min.js')?>"></script>
      
      <link href="/vendor/nvd3/nv.d3.css" media="screen, projection" rel="stylesheet" type="text/css">
      
      <script type="text/javascript">
      
      
      //<![CDATA[
      events.push(function() {
      
      	var InterfaceString = "<?=$curif?>";
      	var RealInterfaceString = "<?=$realif?>";
          window.graph_backgroundupdate = $('#backgroundupdate').val() === "true";
      	window.smoothing = $('#smoothfactor').val();
      	window.interval = 0.3;
      	window.invert = $('#invert').val() === "true";
      	window.size = 8;
      	window.interfaces = InterfaceString.split("|").filter(function(entry) { return entry.trim() != ''; });
      	window.realinterfaces = RealInterfaceString.split("|").filter(function(entry) { return entry.trim() != ''; });
      
      	graph_init();
      	graph_visibilitycheck();
      
      });
      //]]>
      </script>
      
      <script src="/js/traffic-graphs.js?v=<?=filemtime('/usr/local/www/js/traffic-graphs.js')?>"></script>
      
      <script type="text/javascript">
      //<![CDATA[
      
      var graph_interfacenames = <?php
      	foreach ($ifdescrs as $ifname => $ifdescr) {
      		$iflist[$ifname] = $ifdescr;
      	}
      	echo json_encode($iflist);
      ?>;
      function updateBandwidth() {
      	$.ajax(
      		'/bandwidth_by_ip.php',
      		{
      			type: 'get',
      			data: $(document.forms[0]).serialize(),
      			success: function (data) {
      				var hosts_split = data.split("|");
      
      				$('#top10-hosts').empty();
      
      				//parse top ten bandwidth abuser hosts
      				for (var y=0; y<15; y++) {
      					if ((y < hosts_split.length) && (hosts_split[y] != "") && (hosts_split[y] != "no info")) {
      						hostinfo = hosts_split[y].split(";");
      
      						$('#top10-hosts').append('<tr>'+
      							'<td>'+ hostinfo[0] +'</td>'+
      							'<td>'+ hostinfo[1] +' <?=gettext("Bits/sec");?></td>'+
      							'<td>'+ hostinfo[2] +' <?=gettext("Bits/sec");?></td>'+
      						'</tr>');
      					}
      				}
      			},
      	});
      }
      
      events.push(function() {
      	$('form.auto-submit').on('change', function() {
      		$(this).submit();
      	});
      
      	setInterval('updateBandwidth()', 500);
      
      	updateBandwidth();
      });
      //]]>
      </script>
      <?php
      
      /* link the ipsec interface magically */
      if (ipsec_enabled()) {
      	$ifdescrs['enc0'] = gettext("IPsec");
      }
      
      ?>
      <div class="panel panel-default">
      	<div class="panel-heading">
      		<h2 class="panel-title"><?=gettext("Traffic Graph");?></h2>
      	</div>
      	<div class="panel-body">
      		<div class="col-sm-6">
      			<div id="traffic-chart-<?=$curif?>" class="d3-chart traffic-widget-chart">
      				<svg></svg>
      			</div>
      		</div>
      		<div class="col-sm-6">
      			<table class="table table-striped table-condensed">
      				<thead>
      					<tr>
      						<th><?=(($curhostipformat == "") ? gettext("Host IP") : gettext("Host Name or IP")); ?></th>
      						<th><?=gettext("Bandwidth In"); ?></th>
      						<th><?=gettext("Bandwidth Out"); ?></th>
      					</tr>
      				</thead>
      				<tbody id="top10-hosts">
      					<!-- to be added by javascript -->
      				</tbody>
      			</table>
      		</div>
      	</div>
      </div>
      <?php include("foot.inc");
      

      code_text

      1 Reply Last reply Reply Quote 0
      • First post
        Last post
      Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.