Skip to content

Commit 2ec9bfb

Browse files
Ahmet OeztuerkAhmet Oeztuerk
authored andcommitted
Merge remote-tracking branch 'origin' into fix-xls-exports
2 parents e397997 + f74684e commit 2ec9bfb

13 files changed

Lines changed: 132 additions & 115 deletions

File tree

.ci/prepare_machine.sh

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ apt-get -y install \
7272

7373
# list of mirrors: https://mirrors.opensuse.org/
7474
mkdir -p /etc/apt/sources.list.d
75-
curl -sS "https://build.opensuse.org/projects/home:naemon/signing_keys/download?kind=gpg" -o /etc/apt/trusted.gpg.d/naemon.asc
75+
test -s /etc/apt/trusted.gpg.d/naemon.asc ||
76+
curl -sS "https://download.thruk.org/obs_naemon.asc" -o /etc/apt/trusted.gpg.d/naemon.asc || \
77+
curl -sS "https://build.opensuse.org/projects/home:naemon/signing_keys/download?kind=gpg" -o /etc/apt/trusted.gpg.d/naemon.asc
7678
#echo "deb [signed-by=/etc/apt/trusted.gpg.d/naemon.asc] http://download.opensuse.org/repositories/home:/naemon:/daily/xUbuntu_$(lsb_release -rs)/ ./" >> /etc/apt/sources.list.d/naemon.list
7779
echo "deb [signed-by=/etc/apt/trusted.gpg.d/naemon.asc] https://slc-mirror.opensuse.org/repositories/home:/naemon:/daily/xUbuntu_$(lsb_release -rs)/ ./" >> /etc/apt/sources.list.d/naemon.list
7880
apt-get -y update

.github/workflows/citest.yml

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,18 @@ jobs:
8282
8383
- name: make quicktest
8484
run: |
85-
timeout -v 10m sudo su naemon -c 'eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) && HARNESS_TIMER=1 stdbuf -o0 -e0 make quicktest'
85+
timeout -v 10m sudo su naemon -c 'eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) && THRUK_TEST_MODULES_CACHE=${{ env.THRUK_TEST_MODULES_CACHE }} THRUK_CRITIC_CACHE_FILE=${{ env.THRUK_CRITIC_CACHE_FILE }} HARNESS_TIMER=1 stdbuf -o0 -e0 make quicktest'
8686
8787
- name: make citest
8888
run: |
89-
timeout -v 90m sudo su naemon -c 'eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) && HARNESS_TIMER=1 stdbuf -o0 -e0 make citest'
89+
timeout -v 90m sudo su naemon -c 'eval $(perl -I ~/perl5/lib/perl5/ -Mlocal::lib) && THRUK_TEST_MODULES_CACHE=${{ env.THRUK_TEST_MODULES_CACHE }} THRUK_CRITIC_CACHE_FILE=${{ env.THRUK_CRITIC_CACHE_FILE }} HARNESS_TIMER=1 stdbuf -o0 -e0 make citest'
90+
91+
- name: remove cache
92+
run: |
93+
gh cache delete --all
94+
ls -la ${{ env.THRUK_TEST_MODULES_CACHE }} ${{ env.THRUK_CRITIC_CACHE_FILE }} || :
95+
env:
96+
GH_TOKEN: ${{ github.token }}
9097

9198
- name: save updated cache back
9299
id: thruk-test-cache-save

lib/Thruk/Action/AddDefaults.pm

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -394,14 +394,15 @@ sub end {
394394
=cut
395395

396396
sub add_defaults {
397-
my ($c, $flags, $no_config_adjustments) = @_;
397+
my ($c, $flags, $no_config_adjustments, $group_start_over) = @_;
398398
confess("no c?") unless defined $c;
399399

400400
my($flags_hash, $flags_name) = _get_flags($flags);
401401
$c->stats->profile(begin => "AddDefaults::add_defaults(".$flags_name.")");
402402

403403
###############################
404404
# user / group specific config?
405+
my $user_groups = $c->user_exists ? $c->user->{'groups'} : [];
405406
if(!$no_config_adjustments && $c->user_exists) {
406407
$c->stash->{'usr_config_adjustments'} = [];
407408
for my $group (@{$c->user->{'groups'}}) {
@@ -428,7 +429,7 @@ sub add_defaults {
428429
require Thruk::Backend::Manager;
429430
$c->{'db'} = Thruk::Backend::Manager->new($pool);
430431
}
431-
add_defaults($c, $flags, 1);
432+
add_defaults($c, $flags, 1, $group_start_over);
432433
}
433434
}
434435
if($flags_hash->{ADD_USER_ONLY}) {
@@ -590,6 +591,16 @@ sub add_defaults {
590591
) {
591592
# refresh dynamic roles and groups
592593
$c->user->set_dynamic_attributes($c);
594+
595+
# check if groups have changed and restart if so (check if there are group adjustments in the config at all)
596+
if(!Thruk::Utils::deep_compare($c->user->{'groups'}, $user_groups)) {
597+
for my $group (@{$c->user->{'groups'}}) {
598+
if($c->config->{'Group'}->{$group}) {
599+
# found a new group and there are adjustments for it, start over
600+
return(add_defaults($c, $flags, 0, 1)) unless $group_start_over;
601+
}
602+
}
603+
}
593604
}
594605
if($c->{'session'} && !$c->{'session'}->{'fake'}) {
595606
$c->stash->{'cookie_auth'} = 1;

plugins/plugins-available/node-control/lib/Thruk/Controller/node_control.pm

Lines changed: 7 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ use warnings;
44
use strict;
55

66
use Thruk::Action::AddDefaults ();
7-
use Thruk::Backend::Manager ();
87
use Thruk::NodeControl::Utils ();
98
use Thruk::Utils::External ();
109
use Thruk::Utils::Log qw/:all/;
@@ -110,29 +109,11 @@ sub index {
110109
$c->stash->{omd_default_version} = $config->{'omd_default_version'},
111110
$c->stash->{omd_available_versions} = Thruk::NodeControl::Utils::get_available_omd_versions($c, $peers);
112111

113-
# sort servers by section, host_name, site
114-
map { $_->{'section'} = '' if $_->{'section'} eq 'Default' } @{$servers};
115-
$servers = Thruk::Backend::Manager::sort_result({}, $servers, ['section', 'peer_name', 'host_name', 'omd_site']);
112+
my $columns = [qw/section backend hostname site omd status os virt cpu memory disk actions/];
113+
($servers, $columns) = Thruk::NodeControl::Utils::finish_servers_list($c, $servers, $columns);
116114

117-
$c->stash->{'columns'} = [qw/section backend hostname site omd status os virt cpu memory disk actions/];
118-
119-
# allow addons to change and extend visible columns
120-
my $modules = Thruk::NodeControl::Utils::get_addon_modules();
121-
for my $mod (@{$modules}) {
122-
if($mod->can("set_columns")) {
123-
my($cols) = $mod->set_columns($c->stash->{'columns'});
124-
$c->stash->{'columns'} = $cols if $cols;
125-
}
126-
}
127-
128-
# allow addons to change server list
129-
for my $mod (@{$modules}) {
130-
if($mod->can("adjust_server_list")) {
131-
my($s) = $mod->adjust_server_list($c, $servers);
132-
$servers = $s if $s;
133-
}
134-
}
135-
$c->stash->{data} = $servers;
115+
$c->stash->{'columns'} = $columns;
116+
$c->stash->{'data'} = $servers;
136117

137118
return 1;
138119
}
@@ -153,22 +134,10 @@ sub TO_JSON {
153134
}
154135
Thruk::Action::AddDefaults::set_possible_backends($c, $c->stash->{'disabled_backends'}, $peers);
155136

156-
# allow addons to change and extend visible columns
157-
my $modules = Thruk::NodeControl::Utils::get_addon_modules();
158-
for my $mod (@{$modules}) {
159-
if($mod->can("set_columns")) {
160-
my($cols) = $mod->set_columns($c->stash->{'columns'});
161-
$c->stash->{'columns'} = $cols if $cols;
162-
}
163-
}
137+
my $columns = [qw/section backend hostname site omd status os virt cpu memory disk actions/];
138+
($servers, $columns) = Thruk::NodeControl::Utils::finish_servers_list($c, $servers, $columns);
164139

165-
# allow addons to change server list
166-
for my $mod (@{$modules}) {
167-
if($mod->can("adjust_server_list")) {
168-
my($s) = $mod->adjust_server_list($c, $servers);
169-
$servers = $s if $s;
170-
}
171-
}
140+
$c->stash->{'columns'} = $columns;
172141

173142
return $servers;
174143
}

plugins/plugins-available/node-control/lib/Thruk/NodeControl/Utils.pm

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use Cpanel::JSON::XS ();
77
use Cwd qw/abs_path/;
88
use File::Temp qw/tempfile/;
99

10+
use Thruk::Backend::Manager ();
1011
use Thruk::Constants qw/:peer_states/;
1112
use Thruk::Utils ();
1213
use Thruk::Utils::External ();
@@ -105,6 +106,42 @@ sub get_peers {
105106

106107
##########################################################
107108

109+
=head2 finish_servers_list
110+
111+
finish_servers_list($c, $servers, $columns)
112+
113+
return final peers list and columns
114+
115+
=cut
116+
sub finish_servers_list {
117+
my($c, $servers, $columns) = @_;
118+
119+
# allow addons to change and extend visible columns
120+
my $modules = Thruk::NodeControl::Utils::get_addon_modules();
121+
for my $mod (@{$modules}) {
122+
if($mod->can("set_columns")) {
123+
my($cols) = $mod->set_columns($columns);
124+
$columns = $cols if $cols;
125+
}
126+
}
127+
128+
# allow addons to change server list
129+
for my $mod (@{$modules}) {
130+
if($mod->can("adjust_server_list")) {
131+
my($s) = $mod->adjust_server_list($c, $servers);
132+
$servers = $s if $s;
133+
}
134+
}
135+
136+
# sort servers by section, host_name, site
137+
map { $_->{'section'} = '' if $_->{'section'} eq 'Default' } @{$servers};
138+
$servers = Thruk::Backend::Manager::sort_result({}, $servers, ['section', 'peer_name', 'host_name', 'omd_site']);
139+
140+
return($servers, $columns);
141+
}
142+
143+
##########################################################
144+
108145
=head2 get_server
109146
110147
get_server($c, $peer, [$config])

plugins/plugins-available/node-control/lib/Thruk/Utils/CLI/Nodecontrol.pm

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -166,16 +166,25 @@ sub _action_list {
166166
my($c, $opt, $commandoptions, $config, $global_options) = @_;
167167
my @data;
168168

169-
for my $peer (@{Thruk::NodeControl::Utils::get_peers($c)}) {
170-
my $s = Thruk::NodeControl::Utils::get_server($c, $peer, $config);
169+
my $peers = Thruk::NodeControl::Utils::get_peers($c);
170+
my $servers = [];
171+
for my $peer (@{$peers}) {
172+
push @{$servers}, Thruk::NodeControl::Utils::get_server($c, $peer, $config);
173+
}
174+
Thruk::Action::AddDefaults::set_possible_backends($c, $c->stash->{'disabled_backends'}, $peers);
175+
176+
my $columns = [qw/section backend hostname site omd status os virt cpu memory disk actions/];
177+
($servers, $columns) = Thruk::NodeControl::Utils::finish_servers_list($c, $servers, $columns);
178+
179+
for my $s (@{$servers}) {
171180
my $v = $s->{'omd_version'};
172181
$v =~ s/-labs-edition//gmx;
173182
if(defined $opt->{'version'} && $v ne $opt->{'version'}) { next; }
174183
my $found = 1;
175184
if(defined $commandoptions && scalar @{$commandoptions} > 0) {
176185
$found = 0;
177186
for my $pat (@{$commandoptions}) {
178-
if(lc($pat) eq 'ALL' || $peer->{'name'} =~ m/$pat/mx || $peer->{'key'} =~ m/$pat/mx || $peer->{'section'} =~ m/$pat/mx) {
187+
if(lc($pat) eq 'ALL' || $s->{'peer_name'} =~ m/$pat/mx || $s->{'peer_key'} =~ m/$pat/mx || $s->{'section'} =~ m/$pat/mx) {
179188
$found = 1;
180189
last;
181190
}
@@ -184,8 +193,8 @@ sub _action_list {
184193
next unless $found;
185194
push @data, {
186195
Section => $s->{'section'} eq 'Default' ? '' : $s->{'section'},
187-
Name => $peer->{'name'},
188-
ID => $peer->{'key'},
196+
Name => $s->{'peer_name'},
197+
ID => $s->{'peer_key'},
189198
Host => $s->{'host_name'},
190199
Site => $s->{'omd_site'},
191200
Version => $v,

root/thruk/javascript/thruk-3.26.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10257,6 +10257,7 @@ var ajax_search = {
1025710257
resetRefresh();
1025810258
evt = (evt) ? evt : ((window.event) ? event : null);
1025910259
if(!evt) { return false; }
10260+
if(!ajax_search.input_field) { return false; }
1026010261
var input = document.getElementById(ajax_search.input_field);
1026110262
var panel = document.getElementById(ajax_search.result_pan);
1026210263
var focus = false;

t/TestUtils.pm

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ use File::Temp qw/tempfile/;
2424
use HTTP::Cookies::Netscape;
2525
use HTTP::Request ();
2626
use HTTP::Request::Common 6.12 qw/GET POST/;
27+
use POSIX ();
2728
use Plack::Test;
2829
use Test::More;
2930
use Time::HiRes qw/sleep gettimeofday tv_interval/;
@@ -756,6 +757,7 @@ sub test_command {
756757
}
757758

758759
my($prg,$arg) = split(/\s+/, $test->{'cmd'}, 2);
760+
$test->{'start_time'} = &time_milli_str();
759761

760762
# wait for something?
761763
if(defined $test->{'waitfor'}) {
@@ -1116,12 +1118,14 @@ sub bail_out_cmd {
11161118

11171119
diag("\n######################################################\n");
11181120
diag("cmd diagnostics:");
1119-
diag("error: '".(ref $msg ? Dumper($msg) : $msg)."'\n");
1121+
diag("error: '".(ref $msg ? Dumper($msg) : $msg)."'\n");
11201122
my $cmd = $test->{'test_cmd'};
1121-
diag("cmd: '".$test->{'cmd'}."' failed\n");
1122-
diag("stdout: '".($cmd->stdout // '')."'\n") if $cmd;
1123-
diag("stderr: '".($cmd->stderr // '')."'\n") if $cmd;
1124-
diag("exit: '".($rc // '(none)')."'\n");
1123+
diag("cmd: '".$test->{'cmd'}."' failed\n");
1124+
diag("stdout: '".($cmd->stdout // '')."'\n") if $cmd;
1125+
diag("stderr: '".($cmd->stderr // '')."'\n") if $cmd;
1126+
diag("exit: ".($rc // '(none)')."\n");
1127+
diag("time (start): ".($test->{'start_time'} // '<unknown>')."\n");
1128+
diag("time (end): ".time_milli_str()."\n");
11251129

11261130
diag(Carp::longmess("started here:"));
11271131
diag("\n######################################################\n");
@@ -1317,7 +1321,6 @@ sub js_init {
13171321
headless => 1,
13181322
separate_session => 1,
13191323
incognito => 1,
1320-
tab => 'current',
13211324
launch_arg => ["--password-store=basic", "--remote-allow-origins=*"],
13221325
);
13231326
$mech->get_local(-f "./data/blank.html" ? "./data/blank.html" : "../../data/blank.html");
@@ -1396,6 +1399,14 @@ sub js_is {
13961399
#################################################
13971400
sub _js_diag_error {
13981401
my($e, $diag) = @_;
1402+
1403+
if($e->{'type'} && ($e->{'type'} eq 'debug' || $e->{'type'} eq 'info')) {
1404+
return unless $ENV{'HARNESS_VERBOSE'};
1405+
diag("not failing on debug ".$e->{'type'}." console message");
1406+
} else {
1407+
fail("got js error");
1408+
}
1409+
13991410
diag($diag) if $diag;
14001411
my $known = 0;
14011412
if($e->{'message'}) {
@@ -1418,12 +1429,6 @@ sub _js_diag_error {
14181429
}
14191430
$known = 1;
14201431
}
1421-
if($e->{'type'} && ($e->{'type'} eq 'debug' || $e->{'type'} eq 'info')) {
1422-
#diag("not failing on debug lvl console message");
1423-
return;
1424-
} else {
1425-
fail("got js error");
1426-
}
14271432
if($e->{'stackTrace'} && ref $e->{'stackTrace'} eq 'HASH' && $e->{'stackTrace'}->{'callFrames'}) {
14281433
diag("Stack Trace:");
14291434
for my $frame (@{$e->{'stackTrace'}->{'callFrames'}}) {
@@ -1445,16 +1450,16 @@ sub _js_format_err_arg {
14451450

14461451
if($arg->{'type'} eq 'object' && defined $arg->{'preview'} && defined $arg->{'preview'}->{'properties'}) {
14471452
my $x = 0;
1448-
my $str = ($arg->{'className'} // "unknown") . "(";
1453+
my $str = ($arg->{'className'} // "unknown") . "{ ";
14491454
for my $p (@{$arg->{'preview'}->{'properties'}}) {
14501455
if($x > 0) {
14511456
$str .= ", ";
14521457
}
14531458
$x++;
14541459

1455-
$str .= sprintf("%s (%s): %s", $p->{'name'}, $p->{'type'}, $p->{'value'});
1460+
$str .= sprintf("'%s' (%s): %s", $p->{'name'}, $p->{'type'}, $p->{'value'});
14561461
}
1457-
$str .= ")";
1462+
$str .= " }";
14581463
return($str);
14591464
}
14601465

@@ -1504,6 +1509,16 @@ sub is_deeply_diff {
15041509
return 0;
15051510
}
15061511

1512+
#################################################
1513+
# return current time with milliseconds
1514+
sub time_milli_str {
1515+
my($seconds, $microseconds) = Time::HiRes::gettimeofday;
1516+
return(sprintf("%s,%s",
1517+
POSIX::strftime("%Y-%m-%d %H:%M:%S", localtime($seconds)),
1518+
substr(sprintf("%06s", $microseconds), 0, 3),
1519+
));
1520+
}
1521+
15071522
# replace is_deeply with our own version which shows the diff if the test fails
15081523
{
15091524
no warnings 'redefine';

t/scenarios/_common/ansible/install_role.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ ROLE=$1
44
shift
55

66
if [ "$ROLE" = "" ]; then
7-
echo "Usage: $0 <role>"
7+
echo "Usage: $0 <role> [<ansible args>]"
88
echo "available roles:"
99
ls -1 $ANSIBLE_ROLES_PATH
1010
exit 1

t/scenarios/_common/ansible/roles/common/tasks/main.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -88,6 +88,7 @@
8888
- 'alias l="ls -la"'
8989
- 'alias vi="vim"'
9090
- 'alias psg="ps -efl | grep"'
91+
- 'alias install_ansible_role="/thruk/t/scenarios/_common/ansible/install_role.sh"'
9192
- 'export HISTCONTROL="ignoredups:ignorespace:erasedups"'
9293
- 'export HISTSIZE=100000'
9394
- 'shopt -s histappend'

0 commit comments

Comments
 (0)