summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Bugzilla/DaemonControl.pm34
-rwxr-xr-xscripts/cereal.pl49
2 files changed, 52 insertions, 31 deletions
diff --git a/Bugzilla/DaemonControl.pm b/Bugzilla/DaemonControl.pm
index 05aaf8130..b7f7bcbe9 100644
--- a/Bugzilla/DaemonControl.pm
+++ b/Bugzilla/DaemonControl.pm
@@ -39,6 +39,8 @@ our %EXPORT_TAGS = (
utils => [qw(catch_signal on_exception on_finish)],
);
+use constant CEREAL_BIN => realpath(catfile( bz_locations->{cgi_path}, 'scripts', 'cereal.pl'));
+
use constant HTTPD_BIN => '/usr/sbin/httpd';
use constant HTTPD_CONFIG => realpath(catfile( bz_locations->{confdir}, 'httpd.conf' ));
@@ -67,41 +69,11 @@ sub catch_signal {
return $signal_f;
}
-sub cereal {
- local $PROGRAM_NAME = "cereal";
- $ENV{LOGGING_PORT} //= 5880;
-
- 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 = (
- catch_signal('TERM', 0),
- catch_signal('INT', 0 ),
- catch_signal('KILL', 0 ),
- );
- $loop->listen(
- host => '127.0.0.1',
- service => $ENV{LOGGING_PORT},
- socktype => 'stream',
- on_stream => $on_stream,
- )->get;
- exit Future->wait_any(@signals)->get;
-}
-
sub run_cereal {
my $loop = IO::Async::Loop->new;
my $exit_f = $loop->new_future;
my $cereal = IO::Async::Process->new(
- code => \&cereal,
+ command => [CEREAL_BIN],
on_finish => on_finish($exit_f),
on_exception => on_exception( "cereal", $exit_f ),
);
diff --git a/scripts/cereal.pl b/scripts/cereal.pl
new file mode 100755
index 000000000..d5b556451
--- /dev/null
+++ b/scripts/cereal.pl
@@ -0,0 +1,49 @@
+#!/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;
+
+$ENV{LOGGING_PORT} //= 5880;
+
+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; \ No newline at end of file