1224ba2bdSOllivier Robert#! @PATH_PERL@ -w 2ce265a54SOllivier Robert# $Id$ 3224ba2bdSOllivier Robert# 4224ba2bdSOllivier Robert# Use Gnuplot to display data in summary files produced by summary.pl. 5224ba2bdSOllivier Robert# This script requires GNUPLOT 3.7! 6224ba2bdSOllivier Robert# 7224ba2bdSOllivier Robert# Copyright (c) 1997, 1999 by Ulrich Windl <Ulrich.Windl@rz.uni-regensburg.de> 8224ba2bdSOllivier Robert# 9224ba2bdSOllivier Robert# This program is free software; you can redistribute it and/or modify 10224ba2bdSOllivier Robert# it under the terms of the GNU General Public License as published by 11224ba2bdSOllivier Robert# the Free Software Foundation; either version 2 of the License, or 12224ba2bdSOllivier Robert# (at your option) any later version. 13224ba2bdSOllivier Robert# 14224ba2bdSOllivier Robert# This program is distributed in the hope that it will be useful, but 15224ba2bdSOllivier Robert# WITHOUT ANY WARRANTY; without even the implied warranty of 16224ba2bdSOllivier Robert# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17224ba2bdSOllivier Robert# General Public License for more details. 18224ba2bdSOllivier Robert# 19224ba2bdSOllivier Robert# You should have received a copy of the GNU General Public License 20224ba2bdSOllivier Robert# along with this program; if not, write to the Free Software 21224ba2bdSOllivier Robert# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 22224ba2bdSOllivier Robert 23224ba2bdSOllivier Robertrequire 5.003; # "never tested with any other version of Perl" 24224ba2bdSOllivier Robertuse strict; 25224ba2bdSOllivier Robert 26224ba2bdSOllivier Robertuse Time::Local; 27224ba2bdSOllivier Robertuse Getopt::Long; 28224ba2bdSOllivier Robert 29224ba2bdSOllivier Robert# parse command line 30224ba2bdSOllivier Robertmy $summary_dir = "/tmp"; 31224ba2bdSOllivier Robertmy $identifier = "host " . `hostname`; # origin of these data 32224ba2bdSOllivier Robertchomp $identifier; # remove newline 33224ba2bdSOllivier Robertmy $offset_limit = 0.128; # limit of absolute offset 34224ba2bdSOllivier Robertmy $output_file = ""; # output file defaults to stdout 35224ba2bdSOllivier Robertmy $output_file_number = 1; # numbering of output files 36224ba2bdSOllivier Robertmy $gnuplot_terminal = $ENV{DISPLAY} ? "x11" : "dumb"; 37224ba2bdSOllivier Robertmy $wait_after_plot = 1; 38224ba2bdSOllivier Robertmy @peer_list = (); 39224ba2bdSOllivier Robert 40224ba2bdSOllivier Robertmy %options = ("directory|input-directory=s" => \$summary_dir, 41224ba2bdSOllivier Robert "identifier=s" => \$identifier, 42224ba2bdSOllivier Robert "offset-limit=f" => \$offset_limit, 43224ba2bdSOllivier Robert "output-file=s" => \$output_file, 44224ba2bdSOllivier Robert "peer=s@" => \@peer_list, 45224ba2bdSOllivier Robert "plot-term|gnuplot-term=s" => \$gnuplot_terminal, 46224ba2bdSOllivier Robert "wait-after-plot!" => \$wait_after_plot, 47224ba2bdSOllivier Robert ); 48224ba2bdSOllivier Robert 49224ba2bdSOllivier Robertif ( !GetOptions(%options) ) 50224ba2bdSOllivier Robert{ 51224ba2bdSOllivier Robert print STDERR "valid options for $0 are:\n"; 52224ba2bdSOllivier Robert my $opt; 53224ba2bdSOllivier Robert foreach $opt (sort(keys %options)) { 54224ba2bdSOllivier Robert print STDERR "\t--$opt\t(default is "; 55224ba2bdSOllivier Robert if ( ref($options{$opt}) eq "ARRAY" ) { 56224ba2bdSOllivier Robert print STDERR join(", ", map { "'$_'" } @{$options{$opt}}); 57224ba2bdSOllivier Robert } else { 58224ba2bdSOllivier Robert print STDERR "'${$options{$opt}}'"; 59224ba2bdSOllivier Robert } 60224ba2bdSOllivier Robert print STDERR ")\n"; 61224ba2bdSOllivier Robert } 62224ba2bdSOllivier Robert print STDERR "\n"; 63224ba2bdSOllivier Robert die; 64224ba2bdSOllivier Robert} 65224ba2bdSOllivier Robert 66224ba2bdSOllivier Robertchomp $identifier; 67224ba2bdSOllivier Robertdie "illegal offset-limit: $offset_limit" unless $offset_limit > 0.0; 68224ba2bdSOllivier Robert$offset_limit *= 1e6; # scale to microseconds 69224ba2bdSOllivier Robert 70224ba2bdSOllivier Robert# return the smallest value in the given list 71224ba2bdSOllivier Robertsub min 72224ba2bdSOllivier Robert{ 73224ba2bdSOllivier Robert my ($result, @rest) = @_; 74224ba2bdSOllivier Robert map { $result = $_ if ($_ < $result) } @rest; 75224ba2bdSOllivier Robert return($result); 76224ba2bdSOllivier Robert} 77224ba2bdSOllivier Robert 78224ba2bdSOllivier Robert# return the largest value in the given list 79224ba2bdSOllivier Robertsub max 80224ba2bdSOllivier Robert{ 81224ba2bdSOllivier Robert my ($result, @rest) = @_; 82224ba2bdSOllivier Robert map { $result = $_ if ($_ > $result) } @rest; 83224ba2bdSOllivier Robert return($result); 84224ba2bdSOllivier Robert} 85224ba2bdSOllivier Robert 86224ba2bdSOllivier Robert# maybe open alternate output file 87224ba2bdSOllivier Robertsub open_output 88224ba2bdSOllivier Robert{ 89224ba2bdSOllivier Robert my $file; 90224ba2bdSOllivier Robert if ($output_file) { 91224ba2bdSOllivier Robert while ( -r ($file = "$output_file$output_file_number") ) { 92224ba2bdSOllivier Robert ++$output_file_number; 93224ba2bdSOllivier Robert } 94224ba2bdSOllivier Robert open TOUCH, ">$file" and close TOUCH or die "$file: $!"; 95224ba2bdSOllivier Robert print "set output \"$file\"\n"; 96224ba2bdSOllivier Robert } 97224ba2bdSOllivier Robert} 98224ba2bdSOllivier Robert 99224ba2bdSOllivier Robert# make Gnuplot wait 100224ba2bdSOllivier Robertsub maybe_add_pause 101224ba2bdSOllivier Robert{ 102224ba2bdSOllivier Robert print "pause -1 \"Press key to continue...\"\n" if $wait_after_plot; 103224ba2bdSOllivier Robert} 104224ba2bdSOllivier Robert 105224ba2bdSOllivier Robert# plot data from loop summary 106224ba2bdSOllivier Robertsub do_loop 107224ba2bdSOllivier Robert{ 108224ba2bdSOllivier Robert my $fname = shift; 109224ba2bdSOllivier Robert my $line; 110224ba2bdSOllivier Robert my $out_file = "/tmp/tempdata$$"; 111224ba2bdSOllivier Robert my $cmd_file = "/tmp/tempcmd$$"; 112224ba2bdSOllivier Robert my ($first_day, $day_out) = ("", 0); 113224ba2bdSOllivier Robert my ($lower_bound, $upper_bound, $rms); 114224ba2bdSOllivier Robert my ($min_offs, $max_offs) = (1e9, -1e9); 115224ba2bdSOllivier Robert my ($min_rms, $max_rms) = (1e9, -1e9); 116224ba2bdSOllivier Robert open INPUT, "$fname" or die "$fname: $!"; 117224ba2bdSOllivier Robert open OUTPUT, ">$out_file" or die "$out_file: $!"; 118224ba2bdSOllivier Robert my @Fld; 119224ba2bdSOllivier Robert while (<INPUT>) { 120224ba2bdSOllivier Robert chop; # strip record separator 121224ba2bdSOllivier Robert @Fld = split; 122224ba2bdSOllivier Robert if ($#Fld == 0) { 123224ba2bdSOllivier Robert# loops.19960405 124224ba2bdSOllivier Robert $_ = $Fld[0]; s/.*([12]\d{3}[01]\d[0-3]\d)$/$1/; 125224ba2bdSOllivier Robert m/(\d{4})(\d{2})(\d{2})/; 126224ba2bdSOllivier Robert $line = timegm(59, 59, 23, $3, $2 - 1, $1 - 1900, 0, 0, 0); 127224ba2bdSOllivier Robert $line = int $line / 86400; # days relative to 1970 128224ba2bdSOllivier Robert $first_day = "$1-$2-$3 ($line)" unless $day_out; 129224ba2bdSOllivier Robert next; 130224ba2bdSOllivier Robert } 131224ba2bdSOllivier Robert if ($#Fld != 8) { 132224ba2bdSOllivier Robert warn "Illegal number of fields in file $fname, line $."; 133224ba2bdSOllivier Robert next; 134224ba2bdSOllivier Robert } 135224ba2bdSOllivier Robert# loop 216, 856106+/-874041.5, rms 117239.8, freq 67.52+/-10.335, var 4.850 136224ba2bdSOllivier Robert $_ = $Fld[1]; s/,/ /; $line .= " $_"; 137224ba2bdSOllivier Robert $_ = $Fld[2]; m:(.+?)\+/-(.+),:; 138224ba2bdSOllivier Robert $lower_bound = $1 - $2; 139224ba2bdSOllivier Robert $upper_bound = $1 + $2; 140224ba2bdSOllivier Robert $line .= "$1 $lower_bound $upper_bound"; 141224ba2bdSOllivier Robert $min_offs = min($min_offs, $lower_bound); 142224ba2bdSOllivier Robert $max_offs = max($max_offs, $upper_bound); 143224ba2bdSOllivier Robert $_ = $Fld[4]; s/,/ /; $rms = $_; 144224ba2bdSOllivier Robert $min_rms = min($min_rms, $rms); 145224ba2bdSOllivier Robert $max_rms = max($max_rms, $rms); 146224ba2bdSOllivier Robert $line .= " $rms"; 147224ba2bdSOllivier Robert $_ = $Fld[6]; m:(.+?)\+/-(.+),:; 148224ba2bdSOllivier Robert $line .= " $1 " . ($1-$2) . " " . ($1+$2); 149224ba2bdSOllivier Robert $line .= " $Fld[8]"; 150224ba2bdSOllivier Robert print OUTPUT "$line\n"; 151224ba2bdSOllivier Robert $day_out = 1; 152224ba2bdSOllivier Robert# 9621 216 856106 -17935.5 1730147.5 117239.8 67.52 57.185 77.855 4.850 153224ba2bdSOllivier Robert } 154224ba2bdSOllivier Robert close INPUT; 155224ba2bdSOllivier Robert close OUTPUT or die "close failed on $out_file: $!"; 156224ba2bdSOllivier Robert my $ylimit = "["; 157224ba2bdSOllivier Robert if ($min_offs < -$offset_limit) { 158224ba2bdSOllivier Robert $ylimit .= "-$offset_limit"; 159224ba2bdSOllivier Robert } 160224ba2bdSOllivier Robert $ylimit .= ":"; 161224ba2bdSOllivier Robert if ($max_offs > $offset_limit) { 162224ba2bdSOllivier Robert $ylimit .= "$offset_limit"; 163224ba2bdSOllivier Robert } 164224ba2bdSOllivier Robert if ( $ylimit eq "[:" ) { 165224ba2bdSOllivier Robert $ylimit = ""; 166224ba2bdSOllivier Robert } else { 167224ba2bdSOllivier Robert $ylimit = "[] $ylimit]"; 168224ba2bdSOllivier Robert } 169224ba2bdSOllivier Robert# build command file for GNUplot 170224ba2bdSOllivier Robert open OUTPUT, "> $cmd_file" or die "$cmd_file: $!"; 171224ba2bdSOllivier Robert my $oldfh = select OUTPUT; 172224ba2bdSOllivier Robert print "set term $gnuplot_terminal\n"; 173224ba2bdSOllivier Robert open_output; 174224ba2bdSOllivier Robert print "set grid\n"; 175224ba2bdSOllivier Robert print "set title \"Loop Summary for $identifier: " . 176224ba2bdSOllivier Robert "Daily mean values since $first_day\\n" . 177224ba2bdSOllivier Robert "(Offset limit is $offset_limit microseconds)\"\n"; 178224ba2bdSOllivier Robert print "set ylabel \"[us]\"\n"; 179224ba2bdSOllivier Robert print "set data style yerrorbars\n"; 180224ba2bdSOllivier Robert print "set multiplot\n"; 181224ba2bdSOllivier Robert print "set size 1, 0.5\n"; 182224ba2bdSOllivier Robert print "set lmargin 8\n"; 183224ba2bdSOllivier Robert print "set origin 0, 0.5\n"; 184224ba2bdSOllivier Robert print "plot $ylimit \"$out_file\"" . 185224ba2bdSOllivier Robert " using 1:3:4:5 title \"mean offset\", "; 186224ba2bdSOllivier Robert print "\"$out_file\" using 1:(\$3-\$6/2) " . 187224ba2bdSOllivier Robert "title \"(sigma low)\" with lines, "; 188224ba2bdSOllivier Robert print "\"$out_file\" using 1:3 smooth bezier " . 189224ba2bdSOllivier Robert "title \"(Bezier med)\" with lines, "; 190224ba2bdSOllivier Robert print "\"$out_file\" using 1:(\$3+\$6/2) " . 191224ba2bdSOllivier Robert "title \"(sigma high)\" with lines\n"; 192224ba2bdSOllivier Robert print "set ylabel \"[ppm]\"\n"; 193224ba2bdSOllivier Robert print "set origin 0, 0.0\n"; 194224ba2bdSOllivier Robert print "set title\n"; 195224ba2bdSOllivier Robert print "set xlabel \"Days relative to 1970\"\n"; 196224ba2bdSOllivier Robert print "plot \"$out_file\" using 1:7:8:9 title \"mean frequency\", "; 197224ba2bdSOllivier Robert print "\"$out_file\" using 1:(\$7-\$10/2) " . 198224ba2bdSOllivier Robert "title \"(sigma low)\" with lines, "; 199224ba2bdSOllivier Robert print "\"$out_file\" using 1:7 smooth bezier " . 200224ba2bdSOllivier Robert "title \"(Bezier med)\" with lines, "; 201224ba2bdSOllivier Robert print "\"$out_file\" using 1:(\$7+\$10/2) " . 202224ba2bdSOllivier Robert "title \"(sigma high)\" with lines\n"; 203224ba2bdSOllivier Robert print "set nomultiplot\n"; 204224ba2bdSOllivier Robert maybe_add_pause; 205224ba2bdSOllivier Robert 206224ba2bdSOllivier Robert $ylimit = "["; 207224ba2bdSOllivier Robert if ($min_rms < -$offset_limit) { 208224ba2bdSOllivier Robert $ylimit .= "-$offset_limit"; 209224ba2bdSOllivier Robert } 210224ba2bdSOllivier Robert $ylimit .= ":"; 211224ba2bdSOllivier Robert if ($max_rms > $offset_limit) { 212224ba2bdSOllivier Robert $ylimit .= "$offset_limit"; 213224ba2bdSOllivier Robert } 214224ba2bdSOllivier Robert if ( $ylimit eq "[:" ) { 215224ba2bdSOllivier Robert $ylimit =""; 216224ba2bdSOllivier Robert } else { 217224ba2bdSOllivier Robert $ylimit = "[] $ylimit]"; 218224ba2bdSOllivier Robert } 219224ba2bdSOllivier Robert 220224ba2bdSOllivier Robert open_output; 221224ba2bdSOllivier Robert print "set title \"Loop Summary for $identifier: " . 222224ba2bdSOllivier Robert "Standard deviation since $first_day\\n" . 223224ba2bdSOllivier Robert "(Offset limit is $offset_limit microseconds)\"\n"; 224224ba2bdSOllivier Robert print "set xlabel\n"; 225224ba2bdSOllivier Robert print "set ylabel \"[us]\"\n"; 226224ba2bdSOllivier Robert print "set origin 0, 0.5\n"; 227224ba2bdSOllivier Robert print "set data style linespoints\n"; 228224ba2bdSOllivier Robert print "set multiplot\n"; 229224ba2bdSOllivier Robert print "plot $ylimit \"$out_file\" using 1:6 title \"Offset\", "; 230224ba2bdSOllivier Robert print "\"$out_file\" using 1:6 smooth bezier " . 231224ba2bdSOllivier Robert "title \"(Bezier)\" with lines\n"; 232224ba2bdSOllivier Robert print "set title\n"; 233224ba2bdSOllivier Robert print "set origin 0, 0.0\n"; 234224ba2bdSOllivier Robert print "set xlabel \"Days relative to 1970\"\n"; 235224ba2bdSOllivier Robert print "set ylabel \"[ppm]\"\n"; 236224ba2bdSOllivier Robert print "plot \"$out_file\" using 1:10 title \"Frequency\", "; 237224ba2bdSOllivier Robert print "\"$out_file\" using 1:10 smooth bezier " . 238224ba2bdSOllivier Robert "title \"(Bezier)\" with lines\n"; 239224ba2bdSOllivier Robert print "set nomultiplot\n"; 240224ba2bdSOllivier Robert maybe_add_pause; 241224ba2bdSOllivier Robert 242224ba2bdSOllivier Robert close OUTPUT or die "close failed on $cmd_file: $!"; 243224ba2bdSOllivier Robert select $oldfh; 244224ba2bdSOllivier Robert print `gnuplot $cmd_file`; 245224ba2bdSOllivier Robert unlink $cmd_file; 246224ba2bdSOllivier Robert unlink $out_file; 247224ba2bdSOllivier Robert} 248224ba2bdSOllivier Robert 249224ba2bdSOllivier Robert# plot data form peer summary 250224ba2bdSOllivier Robertsub do_peer 251224ba2bdSOllivier Robert{ 252224ba2bdSOllivier Robert my $fname = shift; 253224ba2bdSOllivier Robert my $peer = shift; 254224ba2bdSOllivier Robert my $out_file = "/tmp/tempdata$$"; 255224ba2bdSOllivier Robert my $cmd_file = "/tmp/tempcmd$$"; 256224ba2bdSOllivier Robert my $line; 257224ba2bdSOllivier Robert my ($first_day, $day_out) = ("", 0); 258224ba2bdSOllivier Robert open INPUT, "$fname" or die "$fname: $!"; 259224ba2bdSOllivier Robert open OUTPUT, ">$out_file" or die "$out_file: $!"; 260224ba2bdSOllivier Robert my @Fld; 261224ba2bdSOllivier Robert while (<INPUT>) { 262224ba2bdSOllivier Robert chop; # strip record separator 263224ba2bdSOllivier Robert @Fld = split; 264224ba2bdSOllivier Robert if ($#Fld == 0) { 265224ba2bdSOllivier Robert# peers.19960405 266224ba2bdSOllivier Robert $_ = $Fld[0]; s/.*([12]\d{3}[01]\d[0-3]\d)$/$1/; 267224ba2bdSOllivier Robert m/(\d{4})(\d{2})(\d{2})/ or next; 268224ba2bdSOllivier Robert $line = timegm(59, 59, 23, $3, $2 - 1, $1 - 1900, 0, 0, 0); 269224ba2bdSOllivier Robert $line = int $line / 86400; # days relative to 1970 270224ba2bdSOllivier Robert $first_day = "$1-$2-$3 ($line)" unless $day_out; 271224ba2bdSOllivier Robert next; 272224ba2bdSOllivier Robert } 273224ba2bdSOllivier Robert if ($#Fld != 7) { 274224ba2bdSOllivier Robert warn "Illegal number of fields in file $fname, line $."; 275224ba2bdSOllivier Robert next; 276224ba2bdSOllivier Robert } 277224ba2bdSOllivier Robert next if ($Fld[0] ne $peer); 278224ba2bdSOllivier Robert# ident cnt mean rms max delay dist disp 279224ba2bdSOllivier Robert# 127.127.8.1 38 30.972 189.867 1154.607 0.000 879.760 111.037 280224ba2bdSOllivier Robert $Fld[0] = $line; 281224ba2bdSOllivier Robert print OUTPUT join(' ', @Fld) . "\n"; 282224ba2bdSOllivier Robert# 9969 38 30.972 189.867 1154.607 0.000 879.760 111.037 283224ba2bdSOllivier Robert $day_out = 1; 284224ba2bdSOllivier Robert } 285224ba2bdSOllivier Robert close INPUT; 286224ba2bdSOllivier Robert close OUTPUT or die "close failed on $out_file: $!"; 287224ba2bdSOllivier Robert die "no data found for peer $peer" if !$day_out; 288224ba2bdSOllivier Robert open OUTPUT, "> $cmd_file" or die "$cmd_file: $!"; 289224ba2bdSOllivier Robert my $oldfh = select OUTPUT; 290224ba2bdSOllivier Robert print "set term $gnuplot_terminal\n"; 291224ba2bdSOllivier Robert open_output; 292224ba2bdSOllivier Robert print "set grid\n"; 293224ba2bdSOllivier Robert print "set multiplot\n"; 294224ba2bdSOllivier Robert print "set lmargin 8\n"; 295224ba2bdSOllivier Robert print "set size 1, 0.34\n"; 296224ba2bdSOllivier Robert print "set origin 0, 0.66\n"; 297224ba2bdSOllivier Robert print "set title " . 298224ba2bdSOllivier Robert "\"Peer Summary for $peer on $identifier since $first_day\"\n"; 299224ba2bdSOllivier Robert print "set data style linespoints\n"; 300224ba2bdSOllivier Robert print "set ylabel \"[us]\"\n"; 301224ba2bdSOllivier Robert print "plot \"$out_file\" using 1:3 title \"mean offset\", "; 302224ba2bdSOllivier Robert print "\"$out_file\" using 1:3 smooth bezier " . 303224ba2bdSOllivier Robert "title \"(Bezier)\" with lines, "; 304224ba2bdSOllivier Robert print "\"$out_file\" using 1:(\$3-\$7/2) " . 305224ba2bdSOllivier Robert "title \"(sigma low)\" with lines, "; 306224ba2bdSOllivier Robert print "\"$out_file\" using 1:(\$3+\$7/2) " . 307224ba2bdSOllivier Robert "title \"(sigma high)\" with lines\n"; 308224ba2bdSOllivier Robert print "set title\n"; 309224ba2bdSOllivier Robert print "set origin 0, 0.34\n"; 310224ba2bdSOllivier Robert print "set size 1, 0.32\n"; 311224ba2bdSOllivier Robert print "set ylabel\n"; 312224ba2bdSOllivier Robert print "plot \"$out_file\" using 1:7 title \"dist\", "; 313224ba2bdSOllivier Robert print "\"$out_file\" using 1:7 smooth bezier " . 314224ba2bdSOllivier Robert "title \"(Bezier)\" with lines\n"; 315224ba2bdSOllivier Robert print "set origin 0, 0.00\n"; 316224ba2bdSOllivier Robert print "set size 1, 0.35\n"; 317224ba2bdSOllivier Robert print "set xlabel \"Days relative to 1970\"\n"; 318224ba2bdSOllivier Robert print "plot \"$out_file\" using 1:8 title \"disp\", "; 319224ba2bdSOllivier Robert print "\"$out_file\" using 1:8 smooth bezier " . 320224ba2bdSOllivier Robert "title \"(Bezier)\" with lines\n"; 321224ba2bdSOllivier Robert print "set nomultiplot\n"; 322224ba2bdSOllivier Robert maybe_add_pause; 323224ba2bdSOllivier Robert 324224ba2bdSOllivier Robert select $oldfh; 325224ba2bdSOllivier Robert close OUTPUT or die "close failed on $cmd_file: $!"; 326224ba2bdSOllivier Robert print `gnuplot $cmd_file`; 327224ba2bdSOllivier Robert unlink $cmd_file; 328224ba2bdSOllivier Robert unlink $out_file; 329224ba2bdSOllivier Robert} 330224ba2bdSOllivier Robert 331224ba2bdSOllivier Robert 332224ba2bdSOllivier Robertmy $loop_summary ="$summary_dir/loop_summary"; 333224ba2bdSOllivier Robertmy $peer_summary ="$summary_dir/peer_summary"; 334224ba2bdSOllivier Robertmy $clock_summary="$summary_dir/clock_summary"; 335224ba2bdSOllivier Robert 336224ba2bdSOllivier Robertdo_loop $loop_summary; 337224ba2bdSOllivier Robertmap { do_peer $peer_summary, $_ } @peer_list; 338