X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FTak%2FSTDIOSetup.pm;h=1a9fc9e905a8aab46ee5dc71a81fe87c2df328bf;hb=3e8833259b5bf95efa2137543051a35e7655e1d3;hp=53185d86dc6cbbbf347546a9e27bed45d492f7e1;hpb=e99bc1419a3c02cd19429e4c80393342f811082a;p=scpubgit%2FTak.git diff --git a/lib/Tak/STDIOSetup.pm b/lib/Tak/STDIOSetup.pm index 53185d8..1a9fc9e 100644 --- a/lib/Tak/STDIOSetup.pm +++ b/lib/Tak/STDIOSetup.pm @@ -1,20 +1,32 @@ package Tak::STDIOSetup; -BEGIN { require MRO::Compat; } - +use Log::Contextual qw(:log); +use Log::Contextual::SimpleLogger; use Tak::ConnectionService; use Tak::Router; use Tak; +use IO::Handle; use strictures 1; sub run { - open my $stdin, '<&', \*STDIN; - open my $stdout, '>&', \*STDOUT; + open my $stdin, '<&', \*STDIN or die "Duping stdin: $!"; + open my $stdout, '>&', \*STDOUT or die "Duping stdout: $!"; + $stdout->autoflush(1); # if we don't re-open them then 0 and 1 get re-used - which is not # only potentially bloody confusing but results in warnings like: # "Filehandle STDOUT reopened as STDIN only for input" - close STDIN; open STDIN, '<', '/dev/null'; - close STDOUT; open STDOUT, '>', '/dev/null'; + close STDIN or die "Closing stdin: $!"; + open STDIN, '<', '/dev/null' or die "Re-opening stdin: $!"; + close STDOUT or die "Closing stdout: $!"; + open STDOUT, '>', '/dev/null' or die "Re-opening stdout: $!"; + my ($host, $level) = @ARGV; + my $sig = '<'.join ':', $host, $$.'> '; + Log::Contextual::set_logger( + Log::Contextual::SimpleLogger->new({ + levels_upto => $level, + coderef => sub { print STDERR $sig, @_; } + }) + ); my $done; my $connection = Tak::ConnectionService->new( read_fh => $stdin, write_fh => $stdout, @@ -25,6 +37,8 @@ sub run { if ($0 eq '-') { $0 = 'tak-stdio-node'; } + log_debug { "Node starting" }; + print $stdout "UP\n"; Tak->loop_until($done); }