boinc/tools/watch_tcp

120 lines
3.8 KiB
Tcsh

#! /bin/csh
#
# by jeffc
#
# Usage :
# tcpstat [-t | -i interval] -w
#
# Options:
# -t given current counter totals
# -i interval sample at interval seconds and give counter rate
# -w watch_mode
# Default is -i 5
#
#
set usage = "usage: watch_tcp [-t | -i interval] -w"
set get_current_totals = 0
set get_current_rates = 1
set interval = 5
set watch_mode = 0
set drop_limit = 3
while ($#argv)
if ("$argv[1]" == "-t") then
set get_current_totals = 1
set get_current_rates = 0
else if ("$argv[1]" == "-i") then
set get_current_rates = 1
set get_current_totals = 0
shift
set interval = $argv[1]
else if ("$argv[1]" == "-w") then
set watch_mode = 1
endif
shift
end
set now = `date '+%y:%m:%d:%H:%M:%S'`
set TMPFILE = /tmp/tcpstat.tmp.${now}.$$
set DFILE = /tmp/tcpstat.tmp.delta.${now}.$$
set DROPFILE = /tmp/DROPS
if($get_current_totals) then
netstat -i -s -P tcp | sed -g s/=/\ / > $TMPFILE
echo ""
echo "handshake queue max " `/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q0`
echo "ESTABLISHED queue max " `/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q`
echo ""
awk '{if($1 == "tcpOutDataSegs") print $1" "$2}' $TMPFILE
awk '{if($3 == "tcpOutDataBytes") print $3" "$4}' $TMPFILE
awk '{if($3 == "tcpPassiveOpens") print $3" "$4}' $TMPFILE
awk '{if($1 == "tcpListenDrop") print $1" "$2}' $TMPFILE
awk '{if($3 == "tcpListenDropQ0") print $3" "$4}' $TMPFILE
awk '{if($1 == "tcpHalfOpenDrop") print $1" "$2}' $TMPFILE
\rm $TMPFILE
else
netstat -i -s -P tcp | sed -g s/=/\ / > $TMPFILE
sleep $interval
netstat -i -s -P tcp | sed -g s/=/\ / > $DFILE
set ODS = `awk '{if($1 == "tcpOutDataSegs") print $2}' $TMPFILE`
set ODS5 = `awk '{if($1 == "tcpOutDataSegs") print $2}' $DFILE`
set ODB = `awk '{if($3 == "tcpOutDataBytes") print $4}' $TMPFILE`
set ODB5 = `awk '{if($3 == "tcpOutDataBytes") print $4}' $DFILE`
set PO = `awk '{if($3 == "tcpPassiveOpens") print $4}' $TMPFILE`
set PO5 = `awk '{if($3 == "tcpPassiveOpens") print $4}' $DFILE`
set LD = `awk '{if($1 == "tcpListenDrop") print $2}' $TMPFILE`
set LD5 = `awk '{if($1 == "tcpListenDrop") print $2}' $DFILE`
set LDQ0 = `awk '{if($3 == "tcpListenDropQ0") print $4}' $TMPFILE`
set LDQ05 = `awk '{if($3 == "tcpListenDropQ0") print $4}' $DFILE`
set HOD = `awk '{if($1 == "tcpHalfOpenDrop") print $2}' $TMPFILE`
set HOD5 = `awk '{if($1 == "tcpHalfOpenDrop") print $2}' $DFILE`
@ ODS_rate = ($ODS5 - $ODS) / $interval
@ ODB_rate = ($ODB5 - $ODB) / $interval
@ PO_rate = ($PO5 - $PO) / $interval
@ LD_rate = ($LD5 - $LD) / $interval
@ LDQ0_rate = ($LDQ05 - $LDQ0) / $interval
@ HOD_rate = ($HOD5 - $HOD) / $interval
if($watch_mode) then
echo INFO $now TCP Out B/s : $ODB_rate Listen drops/s : $LD_rate
if($LD_rate) then
if(-f $DROPFILE) then
set drop_count = `cat $DROPFILE`
@ drop_count++
if($drop_count > $drop_limit) then
echo CRITICAL $now TCP dropping connections for $drop_count checks
endif
echo $drop_count > $DROPFILE
else
echo 1 > $DROPFILE
endif
else
if(-f $DROPFILE) then
rm $DROPFILE
endif
else
echo ""
echo "handshake queue max " `/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q0`
echo "ESTABLISHED queue max " `/usr/sbin/ndd -get /dev/tcp tcp_conn_req_max_q`
echo ""
echo tcpOutDataSegs" "$ODS_rate per second
echo tcpOutDataBytes" "$ODB_rate per second
echo tcpPassiveOpens" "$PO_rate per second
echo tcpListenDrop" "$LD_rate per second
echo tcpListenDropQ0" "$LDQ0_rate per second
echo tcpHalfOpenDrop" "$HOD_rate per second
endif
\rm $TMPFILE
\rm $DFILE
endif