summaryrefslogtreecommitdiffstats
path: root/scripts/cereal.pl
blob: bc4d8abd4ae0d17f00cf90856e79ddbbf4002700 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/perl
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
#
# This Source Code Form is "Incompatible With Secondary Licenses", as
# defined by the Mozilla Public License, v. 2.0.

use 5.10.1;
use strict;
use warnings;

use File::Basename;
use File::Spec;
BEGIN {
    require lib;
    my $dir = File::Spec->rel2abs(File::Spec->catdir(dirname(__FILE__), '..'));
    lib->import($dir, File::Spec->catdir($dir, 'lib'), File::Spec->catdir($dir, qw(local lib perl5)));
}

use Bugzilla::DaemonControl qw(catch_signal);
use Future;
use IO::Async::Loop;
use IO::Async::Protocol::LineStream;
use IO::Handle;

$ENV{LOGGING_PORT} //= 5880;

STDOUT->autoflush(1);

my $loop = IO::Async::Loop->new;
my $on_stream = sub {
    my ($stream) = @_;
    my $protocol = IO::Async::Protocol::LineStream->new(
        transport    => $stream,
        on_read_line => sub {
            my ( $self, $line ) = @_;
            say $line;
        },
    );
    $loop->add($protocol);
};
my @signals = qw( TERM INT KILL );

$loop->listen(
    host      => '127.0.0.1',
    service   => $ENV{LOGGING_PORT},
    socktype  => 'stream',
    on_stream => $on_stream,
)->get;

exit Future->wait_any(map { catch_signal($_, 0) } @signals)->get;