logger setup, wait for node start before sending requests
[scpubgit/Tak.git] / lib / Tak / STDIOSetup.pm
CommitLineData
77bf1d9b 1package Tak::STDIOSetup;
2
7b71b06e 3use Log::Contextual qw(:log);
4use Log::Contextual::SimpleLogger;
77bf1d9b 5use Tak::ConnectionService;
6use Tak::Router;
7use Tak;
8use strictures 1;
9
10sub run {
7b71b06e 11 open my $stdin, '<&', \*STDIN or die "Duping stdin: $!";
12 open my $stdout, '>&', \*STDOUT or die "Duping stdout: $!";
2791fd73 13 # if we don't re-open them then 0 and 1 get re-used - which is not
14 # only potentially bloody confusing but results in warnings like:
15 # "Filehandle STDOUT reopened as STDIN only for input"
7b71b06e 16 close STDIN or die "Closing stdin: $!";
17 open STDIN, '<', '/dev/null' or die "Re-opening stdin: $!";
18 close STDOUT or die "Closing stdout: $!";
19 open STDOUT, '>', '/dev/null' or die "Re-opening stdout: $!";
20 my ($host, $level) = @ARGV;
21 my $sig = '<'.join ':', $host, $$.'> ';
22 Log::Contextual::set_logger(
23 Log::Contextual::SimpleLogger->new({
24 levels_upto => $level,
25 coderef => sub { print STDERR $sig, @_; }
26 })
27 );
986f5290 28 my $done;
77bf1d9b 29 my $connection = Tak::ConnectionService->new(
30 read_fh => $stdin, write_fh => $stdout,
986f5290 31 listening_service => Tak::Router->new,
32 on_close => sub { $done = 1 }
77bf1d9b 33 );
2791fd73 34 $connection->receiver->service->register_weak(remote => $connection);
35 if ($0 eq '-') {
36 $0 = 'tak-stdio-node';
37 }
7b71b06e 38 log_debug { "Node starting" };
39 print $stdout "UP\n";
986f5290 40 Tak->loop_until($done);
77bf1d9b 41}
42
431;