(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:log) op: assign_op.Equal rhs: {(DQ (/Users/taylor/.netstatlog))} spids: [10] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:stats) op: assign_op.Equal rhs: {(DQ (/tmp/netperf.stats.) ($ Id.VSub_Dollar '$$'))} spids: [18] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:awktmp) op: assign_op.Equal rhs: {(DQ (/tmp/netperf.awk.) ($ Id.VSub_Dollar '$$'))} spids: [24] ) ] ) (C {(trap)} { (DQ (command_sub left_token: (Token id:Id.Left_Backtick val:'`' span_id:34) command_list: (command.CommandList children:[(C {(which)} {(rm)})]) ) (' -f ') ($ Id.VSub_DollarName '$awktmp') (' ') ($ Id.VSub_DollarName '$stats') ) } {(0)} ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {(Id.KW_Bang '!')} {(-r)} {($ Id.VSub_DollarName '$log')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:62) ) ] action: [ (command.Simple words: [ {(echo)} {(DQ ("Error: can't read netstat log file ") ($ Id.VSub_DollarName '$log'))} ] redirects: [ (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'>&' span_id:74) fd: -1 arg_word: {(2)} ) ] ) (command.ControlFlow token: (Token id:Id.ControlFlow_Exit val:exit span_id:78) arg_word: {(1)} ) ] spids: [50 64] ) ] ) (C {(eval)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:91) command_list: (command.CommandList children: [(C {(tail)} {(-1)} {($ Id.VSub_DollarName '$log')})] ) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rep) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:105) command_list: (command.CommandList children: [ (C {(scriptbc)} {(-p)} {(3)} {($ Id.VSub_DollarName '$re') (/) ($ Id.VSub_DollarName '$snt') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\*' span_id:115) ) (100) } ) ] ) ) ) } spids: [103] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:repn) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:122) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(scriptbc)} {(-p)} {(4)} {($ Id.VSub_DollarName '$re') (/) ($ Id.VSub_DollarName '$snt') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\*' span_id:132) ) (10000) } ) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [120] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:repn) op: assign_op.Equal rhs: { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$repn')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 100)}) ) ) ) } spids: [145] ) ] ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:retop) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:161) command_list: (command.CommandList children: [ (C {(scriptbc)} {(-p)} {(3)} {($ Id.VSub_DollarName '$reto') (/) ($ Id.VSub_DollarName '$snt') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\*' span_id:171) ) (100) } ) ] ) ) ) } spids: [159] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:175) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:retopn) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:180) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(scriptbc)} {(-p)} {(4)} {($ Id.VSub_DollarName '$reto') (/) ($ Id.VSub_DollarName '$snt') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\*' span_id:190) ) (10000) } ) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [178] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:retopn) op: assign_op.Equal rhs: { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$retopn')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 100)}) ) ) ) } spids: [203] ) ] ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dupp) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:219) command_list: (command.CommandList children: [ (C {(scriptbc)} {(-p)} {(3)} {($ Id.VSub_DollarName '$dup') (/) ($ Id.VSub_DollarName '$rec') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\*' span_id:229) ) (100) } ) ] ) ) ) } spids: [217] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:233) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:duppn) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:238) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(scriptbc)} {(-p)} {(4)} {($ Id.VSub_DollarName '$dup') (/) ($ Id.VSub_DollarName '$rec') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\*' span_id:248) ) (10000) } ) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [236] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:duppn) op: assign_op.Equal rhs: { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$duppn')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 100)}) ) ) ) } spids: [261] ) ] ) (command.Sentence child: (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:oop) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:277) command_list: (command.CommandList children: [ (C {(scriptbc)} {(-p)} {(3)} {($ Id.VSub_DollarName '$oo') (/) ($ Id.VSub_DollarName '$rec') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\*' span_id:287) ) (100) } ) ] ) ) ) } spids: [275] ) ] ) terminator: (Token id:Id.Op_Semi val:';' span_id:291) ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:oopn) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:296) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(scriptbc)} {(-p)} {(4)} {($ Id.VSub_DollarName '$oo') (/) ($ Id.VSub_DollarName '$rec') (word_part.EscapedLiteral token: (Token id:Id.Lit_EscapedChar val:'\\*' span_id:306) ) (10000) } ) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [294] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:oopn) op: assign_op.Equal rhs: { (DQ (word_part.ArithSub anode: (arith_expr.Binary op_id: Id.Arith_Slash left: (arith_expr.ArithWord w:{($ Id.VSub_DollarName '$oopn')}) right: (arith_expr.ArithWord w:{(Id.Lit_Digits 100)}) ) ) ) } spids: [319] ) ] ) (C {(echo)} {(DQ ('Netstat is currently reporting the following:'))}) (C {(/bin/echo)} {(-n)} { (DQ (' ') ($ Id.VSub_DollarName '$snt') (' packets sent, with ') ($ Id.VSub_DollarName '$re') (' retransmits (') ($ Id.VSub_DollarName '$rep') ('%) ') ) } ) (C {(echo)} { (DQ ('and ') ($ Id.VSub_DollarName '$reto') (' retransmit timeouts (') ($ Id.VSub_DollarName '$retop') ('%)') ) } ) (C {(/bin/echo)} {(-n)} { (DQ (' ') ($ Id.VSub_DollarName '$rec') (' packets received, with ') ($ Id.VSub_DollarName '$dup') (' dupes (') ($ Id.VSub_DollarName '$dupp') ('%)') ) } ) (C {(echo)} { (DQ (' and ') ($ Id.VSub_DollarName '$oo') (' out of order (') ($ Id.VSub_DollarName '$oop') ('%)') ) } ) (C {(echo)} { (DQ (' ') ($ Id.VSub_DollarName '$creq') (' total connection requests, of which ') ($ Id.VSub_DollarName '$cacc') (' were accepted') ) } ) (C {(echo)} {(DQ )}) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$repn')} {(-ge)} {(5)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:421) ) ] action: [ (C {(echo)} {(DQ ('*** Warning: Retransmits of >= 5% indicates a problem '))}) (C {(echo)} {(DQ ('(gateway or router flooded?)'))}) ] spids: [409 423] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$retopn')} {(-ge)} {(5)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:453) ) ] action: [ (C {(echo)} {(DQ ('*** Warning: Transmit timeouts of >= 5% indicates a problem '))}) (C {(echo)} {(DQ ('(gateway or router flooded?)'))}) ] spids: [441 455] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$duppn')} {(-ge)} {(5)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:485) ) ] action: [ (C {(echo)} {(DQ ('*** Warning: Duplicate receives of >= 5% indicates a problem '))}) (C {(echo)} {(DQ ('(probably on the other end)'))}) ] spids: [473 487] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$oopn')} {(-ge)} {(5)} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:517) ) ] action: [ (C {(echo)} {(DQ ('*** Warning: Out of orders of >= 5% indicates a problem '))}) (C {(echo)} {(DQ ('(busy network or router/gateway flood)'))}) ] spids: [505 519] ) ] ) (C {(echo)} {(DQ ('Analyzing trends....'))}) (command.WhileUntil keyword: (Token id:Id.KW_While val:while span_id:549) cond: [ (command.Sentence child: (C {(read)} {(logline)}) terminator: (Token id:Id.Op_Semi val:';' span_id:555) ) ] body: (command.DoGroup children: [ (C {(eval)} {(DQ ($ Id.VSub_DollarName '$logline'))}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:rep2) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:569) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(scriptbc)} {(-p)} {(4)} {($ Id.VSub_DollarName '$re')} {(/)} {($ Id.VSub_DollarName '$snt')} {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\*' span_id:582))} {(10000)} ) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [567] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:retop2) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:599) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(scriptbc)} {(-p)} {(4)} {($ Id.VSub_DollarName '$reto')} {(/)} {($ Id.VSub_DollarName '$snt')} {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\*' span_id:612))} {(10000)} ) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [597] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:dupp2) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:629) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(scriptbc)} {(-p)} {(4)} {($ Id.VSub_DollarName '$dup')} {(/)} {($ Id.VSub_DollarName '$rec')} {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\*' span_id:642))} {(10000)} ) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [627] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:oop2) op: assign_op.Equal rhs: { (DQ (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:659) command_list: (command.CommandList children: [ (command.Pipeline children: [ (C {(scriptbc)} {(-p)} {(4)} {($ Id.VSub_DollarName '$oo')} {(/)} {($ Id.VSub_DollarName '$rec')} {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\*' span_id:672))} {(10000)} ) (C {(cut)} {(-d.)} {(-f1)}) ] negated: F ) ] ) ) ) } spids: [657] ) ] ) (command.Simple words: [ {(echo)} { (DQ ($ Id.VSub_DollarName '$rep2') (' ') ($ Id.VSub_DollarName '$retop2') (' ') ($ Id.VSub_DollarName '$dupp2') (' ') ($ Id.VSub_DollarName '$oop2') ) } ] redirects: [ (redir.Redir op: (Token id:Id.Redir_DGreat val:'>>' span_id:699) fd: -1 arg_word: {($ Id.VSub_DollarName '$stats')} ) ] ) ] ) redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:706) fd: -1 arg_word: {($ Id.VSub_DollarName '$log')} ) ] ) (C {(echo)} {(DQ )}) (command.Simple words: [{(cat)}] redirects: [ (redir.HereDoc op: (Token id:Id.Redir_DLess val:'<<' span_id:723) fd: -1 here_begin: {(DQ (EOF))} here_end_span_id: 737 stdin_parts: [ (' { rep += $1; retop += $2; dupp += $3; oop += $4 }\n') ('END { rep /= 100; retop /= 100; dupp /= 100; oop /= 100;\n') (' print "reps="int(rep/NR) ";retops=" int(retop/NR) \\\n') (' ";dupps=" int(dupp/NR) ";oops="int(oop/NR) }\n') ] ) (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:729) fd: -1 arg_word: {($ Id.VSub_DollarName '$awktmp')} ) ] ) (C {(eval)} { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:741) command_list: (command.CommandList children: [ (command.Simple words: [{(awk)} {(-f)} {($ Id.VSub_DollarName '$awktmp')}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:748) fd: -1 arg_word: {($ Id.VSub_DollarName '$stats')} ) ] ) ] ) ) } ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$repn')} {(-gt)} {($ Id.VSub_DollarName '$reps')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:766) ) ] action: [ (C {(echo)} {(DQ ('*** Warning: Retransmit rate is currently higher than average.'))}) (C {(echo)} { (DQ (' (average is ') ($ Id.VSub_DollarName '$reps') ('% and current is ') ($ Id.VSub_DollarName '$repn') ('%)') ) } ) ] spids: [754 768] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$retopn')} {(-gt)} {($ Id.VSub_DollarName '$retops')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:802) ) ] action: [ (C {(echo)} {(DQ ('*** Warning: Transmit timeouts are currently higher than average.'))}) (C {(echo)} { (DQ (' (average is ') ($ Id.VSub_DollarName '$retops') ('% and current is ') ($ Id.VSub_DollarName '$retopn') ('%)') ) } ) ] spids: [790 804] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$duppn')} {(-gt)} {($ Id.VSub_DollarName '$dupps')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:838) ) ] action: [ (C {(echo)} {(DQ ('*** Warning: Duplicate receives are currently higher than average.'))}) (C {(echo)} { (DQ (' (average is ') ($ Id.VSub_DollarName '$dupps') ('% and current is ') ($ Id.VSub_DollarName '$duppn') ('%)') ) } ) ] spids: [826 840] ) ] ) (command.If arms: [ (if_arm cond: [ (command.Sentence child: (C {(Id.Lit_LBracket '[')} {($ Id.VSub_DollarName '$oopn')} {(-gt)} {($ Id.VSub_DollarName '$oops')} {(Id.Lit_RBracket ']')} ) terminator: (Token id:Id.Op_Semi val:';' span_id:874) ) ] action: [ (C {(echo)} {(DQ ('*** Warning: Out of orders are currently higher than average.'))}) (C {(echo)} { (DQ (' (average is ') ($ Id.VSub_DollarName '$oops') ('% and current is ') ($ Id.VSub_DollarName '$oopn') ('%)') ) } ) ] spids: [862 876] ) ] ) (C {(echo)} {(word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\(' span_id:900)) (Analyzed) } { (command_sub left_token: (Token id:Id.Left_DollarParen val:'$(' span_id:903) command_list: (command.CommandList children: [ (command.Simple words: [{(wc)} {(-l)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Less val:'<' span_id:908) fd: -1 arg_word: {($ Id.VSub_DollarName '$stats')} ) ] ) ] ) ) } {(netstat)} {(log)} {(entries)} {(Id.KW_For for)} {(calculations) (word_part.EscapedLiteral token:(Token id:Id.Lit_EscapedChar val:'\\)' span_id:922)) } ) (command.ControlFlow token:(Token id:Id.ControlFlow_Exit val:exit span_id:924) arg_word:{(0)}) ] )