Revision: 245
Author:
eric....@gmail.com
Date: Wed Jul 10 15:08:20 2013
Log: Added tcp connection statistics.
http://code.google.com/p/emt/source/detail?r=245
Modified:
/trunk/plugins/bin/proc_net
/trunk/plugins/commands/proc_net.php
/trunk/plugins/configuration/emt_sys.cnf
/trunk/plugins/fields/network.php
/trunk/plugins/views/default.php
=======================================
--- /trunk/plugins/bin/proc_net Sun Feb 5 13:38:35 2012
+++ /trunk/plugins/bin/proc_net Wed Jul 10 15:08:20 2013
@@ -27,34 +27,38 @@
$GATHER_TIME = gather_time_argv();
-$start_res = proc_net_dev();
+$start_dev_res = proc_net_dev();
sleep($GATHER_TIME);
-$end_res = proc_net_dev();
+$end_dev_res = proc_net_dev();
+$tcp_res = proc_net_tcp();
-foreach ($start_res as $iface => $start_vals)
+foreach ($start_dev_res as $iface => $start_vals)
{
//if an interface was turned off don't include it in the results
- if (!isset($end_res[$iface]))
+ if (!isset($end_dev_res[$iface]))
continue;
foreach ($start_vals as $key => $value)
{
- $s = $start_res[$iface][$key];
- $e = $end_res[$iface][$key];
+ $s = $start_dev_res[$iface][$key];
+ $e = $end_dev_res[$iface][$key];
if ($e - $s < 0)
$diff = $e;
else
$diff = $e - $s;
- $diff_res[$iface][$key] = $diff;
+ $diff_dev_res[$iface][$key] = $diff;
}
}
-foreach ($diff_res as $iface => $values)
+foreach ($diff_dev_res as $iface => $values)
foreach ($values as $key => $value)
print "$key.$iface=$value,";
+print "tcp_connections=".$tcp_res[0].",";
+print "tcp_tx_queue=".$tcp_res[1].",";
+print "tcp_rx_queue=".$tcp_res[2].",";
print "\n";
function proc_net_dev()
@@ -92,3 +96,34 @@
return $res;
}
+function proc_net_tcp()
+{
+ $lines = file('/proc/net/tcp', FILE_IGNORE_NEW_LINES);
+
+ if ($lines === FALSE)
+ {
+ print "Failed to open /proc/net/tcp for stats\n";
+ exit(1);
+ }
+
+ // E.g.:
+/*
+ sl local_address rem_address st tx_queue rx_queue tr tm->when
retrnsmt uid timeout inode
+ 0: 0100007F:7D00 00000000:0000 0A 00000000:00000000 00:00000000
00000000 92 0 352788491 1 ffff810065118080 3000 0 0 2 -1
+*/
+
+ $connections = 0;
+ $tx_total = 0;
+ $rx_total = 0;
+
+ array_shift($lines);
+ foreach ($lines as $line) {
+ $connections++;
+ $values = preg_split('/\s+/', $line);
+ list($tx_queue, $rx_queue) = preg_split('/:/', $values[5]);
+ $tx_total += $tx_queue;
+ $rx_total += $rx_queue;
+ }
+
+ return array($connections, $tx_total, $rx_total);
+}
=======================================
--- /trunk/plugins/commands/proc_net.php Thu Jan 12 15:37:38 2012
+++ /trunk/plugins/commands/proc_net.php Wed Jul 10 15:08:20 2013
@@ -24,6 +24,8 @@
function command()
{
$this->cmd = INSTALL_PATH . "plugins/bin/proc_net " .
$this->gather_time;
+ if (isset($this->config['port']))
+ $this->cmd .= '-p ' . $this->config['port'];
}
}
=======================================
--- /trunk/plugins/configuration/emt_sys.cnf Wed Feb 10 18:28:17 2010
+++ /trunk/plugins/configuration/emt_sys.cnf Wed Jul 10 15:08:20 2013
@@ -30,3 +30,6 @@
field=proc_cnt
field=thread_cnt
field=context_switches
+field=tcp_connections
+field=tcp_tx_queue
+field=tcp_rx_queue
=======================================
--- /trunk/plugins/fields/network.php Fri Apr 13 09:26:31 2012
+++ /trunk/plugins/fields/network.php Wed Jul 10 15:08:20 2013
@@ -160,3 +160,58 @@
var $fname = 'Send Fifo';
var $description = 'Network Sent Fifo';
}
+
+class proc_net_tcp_field_base extends proc_net_parse
+{
+ var $command = 'proc_net';
+ var $multi_value = FALSE;
+ var $type = 'avg';
+ var $precision = 0;
+}
+
+register_field('tcp_connections');
+class tcp_connections_field extends proc_net_tcp_field_base
+{
+ var $namespace = 'tcp';
+ var $name = 'tcp_connections';
+ var $fname = 'Conn';
+ var $description = 'Number of TCP connections';
+}
+
+/*
+register_field('tcp_syn');
+class tcp_syn_field extends proc_net_tcp_field_base
+{
+ var $namespace = 'tcp';
+ var $name = 'tcp_syn';
+ var $fname = 'SYN';
+ var $description = 'Number of TCP connections in SYN_SENT/SYN_RECV';
+}
+
+register_field('tcp_fin');
+class tcp_fin_field extends proc_net_tcp_field_base
+{
+ var $namespace = 'tcp';
+ var $name = 'tcp_fin';
+ var $fname = 'FIN';
+ var $description = 'Number of TCP connections in FIN_WAIT/TIME_WAIT';
+}
+*/
+
+register_field('tcp_tx_queue');
+class tcp_tx_queue_field extends proc_net_tcp_field_base
+{
+ var $namespace = 'tcp';
+ var $name = 'tcp_tx_queue';
+ var $fname = 'TX';
+ var $description = 'Number of TCP connections in TX queue';
+}
+
+register_field('tcp_rx_queue');
+class tcp_rx_queue_field extends proc_net_tcp_field_base
+{
+ var $namespace = 'tcp';
+ var $name = 'tcp_rx_queue';
+ var $fname = 'RX';
+ var $description = 'Number of TCP connections in RX queue';
+}
=======================================
--- /trunk/plugins/views/default.php Thu Jun 17 14:00:27 2010
+++ /trunk/plugins/views/default.php Wed Jul 10 15:08:20 2013
@@ -39,7 +39,8 @@
'swap_used',
'disk_busy',
'recv_bytes',
- 'send_bytes'
+ 'send_bytes',
+ 'tcp_connections'
);
var $sub_fields = array(
'disk_busy' => array ('sda'),