From owner-freebsd-ports-bugs@FreeBSD.ORG Wed Oct 14 23:10:01 2009 Return-Path: Delivered-To: freebsd-ports-bugs@hub.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id CFD111065676 for ; Wed, 14 Oct 2009 23:10:01 +0000 (UTC) (envelope-from gnats@FreeBSD.org) Received: from freefall.freebsd.org (freefall.freebsd.org [IPv6:2001:4f8:fff6::28]) by mx1.freebsd.org (Postfix) with ESMTP id 91DF98FC19 for ; Wed, 14 Oct 2009 23:10:01 +0000 (UTC) Received: from freefall.freebsd.org (localhost [127.0.0.1]) by freefall.freebsd.org (8.14.3/8.14.3) with ESMTP id n9ENA1Gm024682 for ; Wed, 14 Oct 2009 23:10:01 GMT (envelope-from gnats@freefall.freebsd.org) Received: (from gnats@localhost) by freefall.freebsd.org (8.14.3/8.14.3/Submit) id n9ENA1KZ024681; Wed, 14 Oct 2009 23:10:01 GMT (envelope-from gnats) Resent-Date: Wed, 14 Oct 2009 23:10:01 GMT Resent-Message-Id: <200910142310.n9ENA1KZ024681@freefall.freebsd.org> Resent-From: FreeBSD-gnats-submit@FreeBSD.org (GNATS Filer) Resent-To: freebsd-ports-bugs@FreeBSD.org Resent-Reply-To: FreeBSD-gnats-submit@FreeBSD.org, Miroslav Lachman <000.fbsd@quip.cz> Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id D76A010656A6 for ; Wed, 14 Oct 2009 23:04:36 +0000 (UTC) (envelope-from nobody@FreeBSD.org) Received: from www.freebsd.org (www.freebsd.org [IPv6:2001:4f8:fff6::21]) by mx1.freebsd.org (Postfix) with ESMTP id C60698FC25 for ; Wed, 14 Oct 2009 23:04:36 +0000 (UTC) Received: from www.freebsd.org (localhost [127.0.0.1]) by www.freebsd.org (8.14.3/8.14.3) with ESMTP id n9EN4aRB003969 for ; Wed, 14 Oct 2009 23:04:36 GMT (envelope-from nobody@www.freebsd.org) Received: (from nobody@localhost) by www.freebsd.org (8.14.3/8.14.3/Submit) id n9EN4aIu003968; Wed, 14 Oct 2009 23:04:36 GMT (envelope-from nobody) Message-Id: <200910142304.n9EN4aIu003968@www.freebsd.org> Date: Wed, 14 Oct 2009 23:04:36 GMT From: Miroslav Lachman <000.fbsd@quip.cz> To: freebsd-gnats-submit@FreeBSD.org X-Send-Pr-Version: www-3.1 Cc: Subject: ports/139615: databases/mytop - error in case of client IP without hostname X-BeenThere: freebsd-ports-bugs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Ports bug reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Oct 2009 23:10:01 -0000 >Number: 139615 >Category: ports >Synopsis: databases/mytop - error in case of client IP without hostname >Confidential: no >Severity: non-critical >Priority: low >Responsible: freebsd-ports-bugs >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Wed Oct 14 23:10:01 UTC 2009 >Closed-Date: >Last-Modified: >Originator: Miroslav Lachman >Release: 7.2-RELEASE-p4 >Organization: codeLab.cz >Environment: FreeBSD 7.2-RELEASE-p4 #0: Fri Oct 2 08:22:32 UTC 2009 root@amd64-builder.daemonology.net:/usr/obj/usr/src/sys/GENERIC amd64 >Description: On machine with private network IP address (192.168.1.xx) without DNS or entry in /etc/hosts mytop command shows following error message for each line containing hosts connected from unresolvable IP: Use of uninitialized value in substitution (s///) at /usr/local/bin/mytop line 998. It is old known problem. The fix can be found on other systems: http://groups.google.com/group/linux.debian.bugs.dist/browse_thread/thread/7ac750bd208e819a?pli=1 >How-To-Repeat: Install and use mytop on machine with LAN clients without IP to hostname entry in DNS or /etc/hosts. For example machine with 192.168.1.2, run mytop, connect to configurred mysql server from client with IP 192.168.1.3 and mytop show: Use of uninitialized value in substitution (s///) at /usr/local/bin/mytop line 998. >Fix: @@ -952,8 +955,11 @@ { $thread->{Host} =~ s/:\d+$//; my $host = gethostbyaddr(inet_aton($thread->{Host}), AF_INET); - $host =~ s/^([^.]+).*/$1/; - $thread->{Host} = $host; + if ($host) + { + $host =~ s/^([^.]+).*/$1/; + $thread->{Host} = $host; + } } Attached patch is reorganized original patch-mytop including fix above. Patch attached with submission follows: --- mytop.orig 2007-02-17 05:57:46.000000000 +0100 +++ mytop 2009-10-15 00:19:14.000000000 +0200 @@ -153,7 +153,7 @@ "idle|i" => \$config{idle}, "resolve|r" => \$config{resolve}, "prompt!" => \$config{prompt}, - "long|!" => \$config{long_nums}, + "long!" => \$config{long_nums}, "mode|m=s" => \$config{mode}, "sort=s" => \$config{sort}, ); @@ -193,6 +193,7 @@ *BLUE = sub { }; *WHITE = sub { }; *BOLD = sub { }; + *MAGENTA = sub { }; } my $RESET = RESET() || ''; @@ -202,6 +203,7 @@ my $BLUE = BLUE() || ''; my $WHITE = WHITE() || ''; my $BOLD = BOLD() || ''; +my $MAGENTA= MAGENTA() || ''; ## Connect @@ -369,6 +371,10 @@ require Data::Dumper; print Data::Dumper::Dumper([\%config]); ReadKey(0); + + if (-M $0) { # restart application, if it was modified - for debugging + exec('perl', $0, @ARGV); + } } ## m - mode swtich to qps @@ -377,7 +383,7 @@ { $config{mode} = 'qps'; Clear() unless $config{batchmode}; - print "Queries Per Second [hit q to exit this mode]\n"; + print "Queries Per Second [hit q to exit, hit t for top mode]\n"; next; } @@ -710,7 +716,7 @@ ## if ($config{header}) { - my @recs = Hashes("show status"); + my @recs = Hashes("SHOW /*!50002 GLOBAL */ STATUS"); ## if the server died or we lost connectivity if (not @recs) @@ -819,7 +825,7 @@ $lines_left--; - printf " Queries: %-5s qps: %4.0f Slow: %7s Se/In/Up/De(%%): %02.0f/%02.0f/%02.0f/%02.0f \n", + printf " Queries: %-6s qps: %4.0f Slow: %7s Se/In/Up/De(%%): %02.0f/%02.0f/%02.0f/%02.0f \n", make_short( $STATUS{Questions} ), # q total $STATUS{Questions} / $STATUS{Uptime}, # qps, average make_short( $STATUS{Slow_queries} ), # slow @@ -889,8 +895,42 @@ make_short(($STATUS{Bytes_received} - $OLD_STATUS{Bytes_received}) / $t_delta ), make_short(($STATUS{Bytes_sent} - $OLD_STATUS{Bytes_sent}) / $t_delta )) if ($t_delta); - print "\n\n"; + print "\n"; + + my @master_status = Hashes("show master status"); + if (@master_status) + { + foreach my $m (@master_status) { + print " Master: $m->{File}/$m->{Position} ", + "do: ", GREEN(), "$m->{Binlog_Do_DB} ", RESET(), + "ign: ", MAGENTA(), $m->{Binlog_Ignore_DB}, RESET(), "\n"; + #$line_prefix = ' ' x length($line_prefix); + $lines_left--; + } + } + + my @slave_status = Hashes("show slave status"); + if (@slave_status) + { + my $line_prefix = " Slave: "; + foreach my $s (@slave_status) { + print $line_prefix, BOLD(), + ($s->{Slave_IO_Running} eq 'Yes' + && $s->{Slave_SQL_Running} eq 'Yes' + && $s->{Last_Errno} == 0 + ? ($s->{Seconds_Behind_Master} > 60 ? BOLD('WARN') : GREEN('OK ')) : RED('ERR ') + ), RESET(), + " Delay: ", + defined($s->{Seconds_Behind_Master}) ? sprintf('%03d:%02d', int($s->{Seconds_Behind_Master} / 60), $s->{Seconds_Behind_Master} % 60) : '---:--', + " $s->{Master_User}\@$s->{Master_Host}: ", + "$s->{Master_Log_File}/$s->{Read_Master_Log_Pos} ", + "\n"; + #$line_prefix = ' ' x length($line_prefix); + $lines_left--; + } + } + print "\n"; $lines_left--; } @@ -952,8 +992,11 @@ { $thread->{Host} =~ s/:\d+$//; my $host = gethostbyaddr(inet_aton($thread->{Host}), AF_INET); - $host =~ s/^([^.]+).*/$1/; - $thread->{Host} = $host; + if ($host) + { + $host =~ s/^([^.]+).*/$1/; + $thread->{Host} = $host; + } } ## Fix possible undefs @@ -1099,8 +1142,8 @@ my @data = Hashes("SHOW INNODB STATUS"); open P, "|$config{pager}" or die "$!"; - print keys %{$data[0]}; - print $data[0]->{Status},"\n"; + print P keys %{$data[0]}; + print P $data[0]->{Status},"\n"; close P; } >Release-Note: >Audit-Trail: >Unformatted: