summaryrefslogtreecommitdiffstats
path: root/scripts/cereal.pl
blob: 4ca8df3518c98b8b57f248cf4fd52af5f581ef5f (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
53
54
55
56
57
#!/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;