logger setup, wait for node start before sending requests
[scpubgit/Tak.git] / lib / Tak / STDIOSetup.pm
index 53185d8..c06efbc 100644 (file)
@@ -1,20 +1,30 @@
 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 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: $!";
   # 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 +35,8 @@ sub run {
   if ($0 eq '-') {
     $0 = 'tak-stdio-node';
   }
+  log_debug { "Node starting" };
+  print $stdout "UP\n";
   Tak->loop_until($done);
 }