From 1be4eb49815a40fd5de052b2f7ceef7b99c4e08d Mon Sep 17 00:00:00 2001 From: Carlo von lynX Date: Tue, 31 May 2016 17:00:55 +0000 Subject: taught gnunet-logread to also do what gnunet-logread-ipc used to do --- contrib/gnunet-logread | 48 +++++++++++++++++++++++++++++++----------------- 1 file changed, 31 insertions(+), 17 deletions(-) (limited to 'contrib/gnunet-logread') diff --git a/contrib/gnunet-logread b/contrib/gnunet-logread index 1a3650d79..6205f4123 100755 --- a/contrib/gnunet-logread +++ b/contrib/gnunet-logread @@ -4,25 +4,28 @@ use strict; use warnings; +my $DEFAULT_SOCKET = '/tmp/gnunet-logread-ipc.sock'; use Getopt::Std; my (%opts, $name, $ipc, $msg_level, $msg_regex); -getopts ('i:x:n:s:L:m:h', \%opts); +getopts ('i:x:n:s:L:m:fh', \%opts); die < |& $0 [] or - $0 [] + $0 [] [] Options: + -f Follow input from IPC FIFO socket. + Regular screen output options: - -i Include only messages that match regex. - -x Exclude all messages that match regex. + -i Include only messages that match . + -x Exclude all messages that match . Options to enable message passing to IPC socket: -n Name of this component to use for IPC logging. - -s Path to IPC logging socket. + -s Default = $DEFAULT_SOCKET -L Minimum level of messages to pass on. Log levels: NONE, ERROR, WARNING, INFO, DEBUG. -m Only pass messages matching a regular expression. @@ -35,6 +38,7 @@ $Term::ANSIColor::AUTOLOCAL = 1; my %msgtypes; my $prefix = $ENV{GNUNET_PREFIX} || '/usr'; my $filename = "$prefix/include/gnunet/gnunet_protocols.h"; +$ipc = $opts{s} || $DEFAULT_SOCKET; if (open HEADER, $filename) { @@ -56,17 +60,28 @@ X my %levels = ( NONE => 0, ERROR => 1, WARNING => 2, INFO => 4, DEBUG => 8 ); if (exists $opts{n}) { + die "You can't read and write the socket at the same time" if exists $opts{f}; $name = $opts{n}; - $ipc = $opts{s} || '/tmp/gnunet-logread-ipc.sock'; - $msg_level = exists $levels{$opts{L}} ? $levels{$opts{L}} : 0; + $msg_level = $opts{L} && exists $levels{$opts{L}} ? $levels{$opts{L}} : 0; $msg_regex = $opts{m}; print STDERR "RE: /$msg_regex/\n" if defined $msg_regex; - open IPC, '>', $ipc or die "$ipc: $!\n"; + open O, '>', $ipc or die "Cannot write to $ipc: $!"; } -while (<>) -{ - if (fileno IPC) { +if (exists $opts{f}) { + system('/bin/mkfifo', $ipc) unless -r $ipc; + open(I, $ipc) or die "Cannot read from $ipc: $!"; + &perform while ; + close I; +} else { + &perform while <>; +} +fileno O and close O; +exit; + + +sub perform { + if (fileno O) { my ($time, $type, $size, $from, $to, $level, $msg); if (($time, $type, $size, $from, $to) = /^([A-Z][a-z]{2}\ .[0-9]\ [0-9:]{8}(?:-[0-9]{6})?)\ util-.*\b @@ -81,8 +96,8 @@ while (<>) my ($time, $type, $size, $from, $to) = ($1, $2, $3, $4 || $name, $5 || $name); my $msg = exists $msgtypes{$type} ? $msgtypes{$type} : $type; - my $ofh = select IPC; - print IPC "$time\t$from -> $to\t$msg ($size)\n"; + my $ofh = select O; + print O "$time\t$from -> $to\t$msg ($size)\n"; $| = 1; select $ofh; } @@ -93,11 +108,11 @@ while (<>) && $levels{$level} <= $msg_level && (!defined $msg_regex || $msg =~ /$msg_regex/i))) { - print IPC "$time\t$name\t$level: $msg\n"; + print O "$time\t$name\t$level: $msg\n"; } } - next if $opts{x} and /$opts{x}/io; - next if $opts{i} and not /$opts{i}/io; + return if $opts{x} and /$opts{x}/io; + return if $opts{i} and not /$opts{i}/io; # Timestamp (e.g. Nov 01 19:36:11-384136) s/^([A-Z][a-z]{2} .[0-9] [0-9:]{8}(?:-[0-9]{6})?)/YELLOW $1/e; @@ -123,4 +138,3 @@ while (<>) print; } -fileno IPC and close IPC; -- cgit v1.2.3