add 'netstat -s' tcp metrics

This commit is contained in:
Doug MacEachern 2007-08-08 04:51:12 +00:00
parent de2177933a
commit 7a440f9727
1 changed files with 36 additions and 1 deletions

View File

@ -26,6 +26,7 @@ import org.hyperic.sigar.NetServices;
import org.hyperic.sigar.SigarException; import org.hyperic.sigar.SigarException;
import org.hyperic.sigar.NetConnection; import org.hyperic.sigar.NetConnection;
import org.hyperic.sigar.NetFlags; import org.hyperic.sigar.NetFlags;
import org.hyperic.sigar.TcpStat;
/** /**
* Display network connections. * Display network connections.
@ -43,7 +44,7 @@ public class Netstat extends SigarCommandBase {
"" ""
}; };
private static boolean isNumeric, wantPid; private static boolean isNumeric, wantPid, isStat;
public Netstat(Shell shell) { public Netstat(Shell shell) {
super(shell); super(shell);
@ -66,6 +67,7 @@ public class Netstat extends SigarCommandBase {
int proto_flags = 0; int proto_flags = 0;
isNumeric = false; isNumeric = false;
wantPid = false; wantPid = false;
isStat = false;
for (int i=0; i<args.length; i++) { for (int i=0; i<args.length; i++) {
String arg = args[i]; String arg = args[i];
@ -88,6 +90,9 @@ public class Netstat extends SigarCommandBase {
case 'p': case 'p':
wantPid = true; wantPid = true;
break; break;
case 's':
isStat = true;
break;
case 't': case 't':
proto_flags |= NetFlags.CONN_TCP; proto_flags |= NetFlags.CONN_TCP;
break; break;
@ -155,6 +160,32 @@ public class Netstat extends SigarCommandBase {
return address + ":" + port; return address + ":" + port;
} }
private void outputTcpStats() throws SigarException {
TcpStat stat = this.sigar.getTcpStat();
final String dnt = " ";
println(dnt + stat.getActiveOpens() + " active connections openings");
println(dnt + stat.getPassiveOpens() + " passive connection openings");
println(dnt + stat.getAttemptFails() + " failed connection attempts");
println(dnt + stat.getEstabResets() + " connection resets received");
println(dnt + stat.getCurrEstab() + " connections established");
println(dnt + stat.getInSegs() + " segments received");
println(dnt + stat.getOutSegs() + " segments send out");
println(dnt + stat.getRetransSegs() + " segments retransmited");
//println(dnt + stat.getInErrs() + " bad segments received.");
println(dnt + stat.getOutRsts() + " resets sent");
}
private void outputStats(int flags) throws SigarException {
if ((flags & NetFlags.CONN_TCP) != 0) {
println("Tcp:");
try {
outputTcpStats();
} catch (SigarException e) {
println(" " + e);
}
}
}
//XXX currently weak sauce. should end up like netstat command. //XXX currently weak sauce. should end up like netstat command.
public void output(String[] args) throws SigarException { public void output(String[] args) throws SigarException {
//default //default
@ -162,6 +193,10 @@ public class Netstat extends SigarCommandBase {
if (args.length > 0) { if (args.length > 0) {
flags = getFlags(args, flags); flags = getFlags(args, flags);
if (isStat) {
outputStats(flags);
return;
}
} }
NetConnection[] connections = this.sigar.getNetConnectionList(flags); NetConnection[] connections = this.sigar.getNetConnectionList(flags);