Skip to content

Commit b4db9fe

Browse files
author
dasantiago
committed
Log Uniformization
This change will remove the ServerStartup, which is only used for log configuration. The FakeApp was extended to support the ServerStartup functionality.
1 parent cfb986c commit b4db9fe

12 files changed

+222
-182
lines changed

Diff for: lib/OpenQA/ServerStartup.pm renamed to lib/OpenQA/Base.pm

+100-42
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright (C) 2015-2016 SUSE LLC
1+
# Copyright (C) 2016 SUSE LLC
22
#
33
# This program is free software; you can redistribute it and/or modify
44
# it under the terms of the GNU General Public License as published by
@@ -13,20 +13,113 @@
1313
# You should have received a copy of the GNU General Public License along
1414
# with this program; if not, see <http://www.gnu.org/licenses/>.
1515

16-
# This package contains shared functions between WebAPI and WebSockets
17-
package OpenQA::ServerStartup;
18-
16+
package OpenQA::Base;
17+
use Mojo::Log;
18+
use Mojo::Home;
1919
use strict;
2020
use warnings;
21+
use Mojo::Base -base;
22+
use Sys::Hostname;
23+
use File::Spec::Functions 'catfile';
24+
use Mojo::File 'path';
2125
use Config::IniFiles;
2226
use db_profiler;
2327
use db_helpers;
2428
use OpenQA::Utils;
25-
use Mojo::File 'path';
2629

27-
sub read_config {
28-
my $app = shift;
30+
has config => sub { {} };
31+
32+
has log => sub { setup_log(shift) };
33+
34+
has home => sub { Mojo::Home->new($ENV{MOJO_HOME} || '/') };
35+
36+
has mode => 'production';
37+
38+
has log_name => 'scheduler';
39+
40+
has level => 'debug';
41+
42+
has instance => undef;
43+
44+
has log_dir => undef;
45+
46+
has schema => sub { OpenQA::Schema::connect_db() };
47+
48+
sub setup_log {
49+
my ($self) = @_;
50+
my ($logfile, $logdir, $level, $log);
51+
52+
if ($self->isa('OpenQA::Base')) {
53+
$logdir = $self->log_dir;
54+
$level = $self->level;
55+
}
56+
else {
57+
$log = $self->log;
58+
$level = $self->config->{logging}->{level} || 'debug';
59+
}
60+
$logfile = $ENV{OPENQA_LOGFILE} || $self->config->{logging}->{file};
61+
print "Logging to: $logfile";
62+
use Data::Dumper;
63+
print Dumper(\%ENV);
64+
65+
if ($logfile && $logdir) {
66+
$logfile = catfile($logdir, $logfile);
67+
$log = Mojo::Log->new(
68+
handle => path($logfile)->open('>>'),
69+
level => $self->level,
70+
format => sub { return log_format($self->log_name, @_); });
71+
}
72+
elsif ($logfile) {
73+
$log = Mojo::Log->new(
74+
handle => path($logfile)->open('>>'),
75+
level => $level,
76+
format => sub { return log_format($self->log_name, @_); });
77+
}
78+
elsif ($logdir) {
79+
# So each worker from each host get it's own log (as the folder can be shared). Hopefully the machine hostname
80+
# is already sanitized. Otherwise we need to check
81+
$logfile
82+
= catfile($logdir, hostname() . (defined $self->instance ? "-${\$self->instance}" : '') . ".log");
83+
$log = Mojo::Log->new(
84+
handle => path($logfile)->open('>>'),
85+
level => $self->level,
86+
format => sub { return log_format($self->log_name, @_); });
87+
}
88+
else {
89+
$log = Mojo::Log->new(
90+
handle => \*STDOUT,
91+
level => $level,
92+
format => sub {
93+
my ($time, $level, @lines) = @_;
94+
return "[${\$self->log_name}:$level] " . join "\n", @lines, '';
95+
});
96+
}
2997

98+
unless ($self->isa('OpenQA::Base')) {
99+
$self->log($log);
100+
if ($ENV{OPENQA_SQL_DEBUG} // $self->config->{logging}->{sql_debug} // 'false' eq 'true') {
101+
# avoid enabling the SQL debug unless we really want to see it
102+
# it's rather expensive
103+
db_profiler::enable_sql_debugging($self);
104+
}
105+
}
106+
107+
$OpenQA::Utils::app = $self;
108+
return $log;
109+
}
110+
111+
sub log_format {
112+
my ($logname, $time, $level, @lines) = @_;
113+
return '[' . localtime($time) . "] [$logname:$level] " . join "\n", @lines, '';
114+
}
115+
116+
sub emit_event {
117+
my ($self, $event, $data) = @_;
118+
# nothing to see here, move along
119+
}
120+
121+
sub read_config {
122+
my $app = shift;
30123
my %defaults = (
31124
global => {
32125
appname => 'openQA',
@@ -123,41 +216,6 @@ sub read_config {
123216
$app->config->{auth}->{method} =~ s/\s//g;
124217
}
125218

126-
sub setup_logging {
127-
my ($app) = @_;
128-
129-
my $config = $app->config;
130-
my $logfile = $ENV{OPENQA_LOGFILE} || $config->{logging}->{file};
131-
132-
if ($logfile) {
133-
$app->log->handle(path($logfile)->open('>>'));
134-
$app->log->path($logfile);
135-
$app->log->format(
136-
sub {
137-
my ($time, $level, @lines) = @_;
138-
return '[' . localtime($time) . "] [" . $app->log_name . ":$level] " . join "\n", @lines, '';
139-
});
140-
}
141-
else {
142-
$app->log->format(
143-
sub {
144-
my (undef, $level, @lines) = @_;
145-
return '[' . $app->log_name . ":$level] " . join "\n", @lines, '';
146-
});
147-
}
148-
149-
if ($config->{logging}->{level}) {
150-
$app->log->level($config->{logging}->{level});
151-
}
152-
if ($ENV{OPENQA_SQL_DEBUG} // $config->{logging}->{sql_debug} // 'false' eq 'true') {
153-
# avoid enabling the SQL debug unless we really want to see it
154-
# it's rather expensive
155-
db_profiler::enable_sql_debugging($app);
156-
}
157-
158-
$OpenQA::Utils::app = $app;
159-
}
160-
161219
# Update config definition from plugin requests
162220
sub update_config {
163221
my ($config, @namespaces) = @_;

Diff for: lib/OpenQA/FakeApp.pm

-72
This file was deleted.

Diff for: lib/OpenQA/ResourceAllocator.pm

+4-5
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,9 @@ use Scalar::Util 'blessed';
2525

2626
use OpenQA::IPC;
2727
use OpenQA::Utils qw(log_debug wakeup_scheduler exists_worker safe_call);
28-
use OpenQA::ServerStartup;
2928
use OpenQA::Resource::Jobs ();
3029
use OpenQA::Resource::Locks ();
31-
use OpenQA::FakeApp;
30+
use OpenQA::Base;
3231
use sigtrap handler => \&normal_signals_handler, 'normal-signals';
3332

3433
my $singleton;
@@ -59,9 +58,9 @@ sub new {
5958

6059
sub run {
6160
my $self = shift;
62-
my $fakeapp = OpenQA::FakeApp->new(log_name => 'resource-allocator');
63-
OpenQA::ServerStartup::read_config($fakeapp);
64-
OpenQA::ServerStartup::setup_logging($fakeapp);
61+
my $base = OpenQA::Base->new(log_name => 'resource-allocator');
62+
OpenQA::Base::read_config($base);
63+
OpenQA::Base::setup_log($base);
6564
log_debug("Resource allocator started");
6665
$self->{reactor}->run()
6766
if exists $self->{reactor} && blessed($self->{reactor}) && $self->{reactor}->isa("Net::DBus::Reactor");

Diff for: lib/OpenQA/Scheduler.pm

+5-6
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,9 @@ use Net::DBus::Reactor;
2323
use Data::Dump 'pp';
2424

2525
use OpenQA::IPC;
26-
use OpenQA::FakeApp;
26+
use OpenQA::Base;
2727

2828
use OpenQA::Utils 'log_debug';
29-
use OpenQA::ServerStartup;
3029

3130
# How many jobs to allocate in one tick. Defaults to 50 ( set it to 0 for as much as possible)
3231
use constant MAX_JOB_ALLOCATION => $ENV{OPENQA_SCHEDULER_MAX_JOB_ALLOCATION} // 50;
@@ -75,11 +74,11 @@ sub _is_method_allowed {
7574
return $ret;
7675
}
7776

78-
our $fakeapp;
77+
our $base;
7978
sub run {
80-
$fakeapp = OpenQA::FakeApp->new;
81-
OpenQA::ServerStartup::read_config($fakeapp);
82-
OpenQA::ServerStartup::setup_logging($fakeapp);
79+
$base = OpenQA::Base->new;
80+
OpenQA::Base::read_config($base);
81+
OpenQA::Base::setup_log($base);
8382

8483
OpenQA::Scheduler->new();
8584
log_debug("Scheduler started");

Diff for: lib/OpenQA/WebAPI.pm

+4-6
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ use OpenQA::Schema;
2121
use OpenQA::WebAPI::Plugin::Helpers;
2222
use OpenQA::IPC;
2323
use OpenQA::Utils qw(log_warning job_groups_and_parents detect_current_version);
24-
use OpenQA::ServerStartup;
25-
24+
use OpenQA::Base;
2625
use Mojo::IOLoop;
2726
use Mojolicious::Commands;
2827
use DateTime;
@@ -69,9 +68,8 @@ sub log_name {
6968
# This method will run once at server start
7069
sub startup {
7170
my $self = shift;
72-
73-
OpenQA::ServerStartup::read_config($self);
74-
OpenQA::ServerStartup::setup_logging($self);
71+
OpenQA::Base::read_config($self);
72+
OpenQA::Base::setup_log($self);
7573

7674
# Set some application defaults
7775
$self->defaults(appname => $self->app->config->{global}->{appname});
@@ -127,7 +125,7 @@ sub startup {
127125
}
128126

129127
# Read configurations expected by plugins.
130-
OpenQA::ServerStartup::update_config($self->config, @{$self->plugins->namespaces}, "OpenQA::WebAPI::Auth");
128+
OpenQA::Base::update_config($self->config, @{$self->plugins->namespaces}, "OpenQA::WebAPI::Auth");
131129

132130
# End plugin loading/handling
133131

Diff for: lib/OpenQA/WebSockets/Server.pm

+3-4
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ use Try::Tiny;
2121
use OpenQA::IPC;
2222
use OpenQA::Utils qw(log_debug log_warning log_error);
2323
use OpenQA::Schema;
24-
use OpenQA::ServerStartup;
24+
use OpenQA::Base;
2525
use Data::Dumper;
2626

2727
use db_profiler;
@@ -455,9 +455,8 @@ sub setup {
455455

456456
app->helper(log_name => sub { return 'websockets' });
457457
app->helper(schema => sub { return OpenQA::Schema::connect_db; });
458-
459-
OpenQA::ServerStartup::read_config(app);
460-
OpenQA::ServerStartup::setup_logging(app);
458+
OpenQA::Base::read_config(app);
459+
OpenQA::Base::setup_log(app);
461460

462461
# not really meaningful for websockets, but required for mode defaults
463462
app->defaults(appname => "openQA Websocket Server");

Diff for: lib/OpenQA/Worker.pm

+2-3
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ use OpenQA::Worker::Common;
3030
use OpenQA::Worker::Commands;
3131
use OpenQA::Worker::Pool qw(lockit clean_pool);
3232
use OpenQA::Worker::Jobs;
33-
use OpenQA::FakeApp;
33+
use OpenQA::Base;
3434

3535
sub init {
3636
my ($host_settings, $options) = @_;
@@ -39,7 +39,7 @@ sub init {
3939
$nocleanup = $options->{"no-cleanup"};
4040

4141
my $logdir = $ENV{OPENQA_WORKER_LOGDIR} // $worker_settings->{LOG_DIR};
42-
my $app = OpenQA::FakeApp->new(
42+
my $app = OpenQA::Base->new(
4343
mode => 'production',
4444
log_name => 'worker',
4545
instance => $instance,
@@ -48,7 +48,6 @@ sub init {
4848

4949
$app->level($worker_settings->{LOG_LEVEL}) if $worker_settings->{LOG_LEVEL};
5050
$app->setup_log();
51-
$OpenQA::Utils::app = $app;
5251
OpenQA::Worker::Common::api_init($host_settings, $options);
5352
OpenQA::Worker::Engines::isotovideo::set_engine_exec($options->{isotovideo}) if $options->{isotovideo};
5453
}

Diff for: t/04-scheduler.t

+8-9
Original file line numberDiff line numberDiff line change
@@ -429,15 +429,14 @@ is_deeply(
429429
my $asset = $schema->resultset('Assets')->register('iso', $settings{ISO});
430430
is($asset->name, $settings{ISO}, "asset register returns same");
431431

432-
subtest 'OpenQA::FakeApp object test' => sub {
433-
use OpenQA::FakeApp;
434-
use OpenQA::ServerStartup;
435-
my $fakeapp = OpenQA::FakeApp->new;
436-
OpenQA::ServerStartup::read_config($fakeapp);
437-
OpenQA::ServerStartup::setup_logging($fakeapp);
438-
isa_ok($fakeapp->home, 'Mojo::Home');
439-
isa_ok($fakeapp->schema, 'OpenQA::Schema');
440-
isa_ok($fakeapp->log, 'Mojo::Log');
432+
subtest 'OpenQA::Base object test' => sub {
433+
use OpenQA::Base;
434+
my $base = OpenQA::Base->new;
435+
OpenQA::Base::read_config($base);
436+
OpenQA::Base::setup_log($base);
437+
isa_ok($base->home, 'Mojo::Home');
438+
isa_ok($base->schema, 'OpenQA::Schema');
439+
isa_ok($base->log, 'Mojo::Log');
441440
};
442441

443442
done_testing;

0 commit comments

Comments
 (0)