sub NixNodes(@) { my @nixnodes = @_; my ($display, $chkbo_separator, $index, @threads, @header, @host_data, @hosts) = ("", hr, 0, (), (), (), ()); my @thr_output : shared; foreach my $entry (@nixnodes) { next unless $entry; my ($host,$os,$tasks) = (split(/,/, $entry, 3)); $hosts[$index] = $host; $header[$index] = a({name=>$host}); if (&CheckVersion($host, VERSION) == -1) { warn "$host: Version mismatch or /usr/local/bin/report_agent.pl is not in (x)inetd config"; } else { foreach my $task ((split(/,/,$tasks))) { print "Host: $host, Task: $task\n"; no strict 'refs'; my $command="parse_".$task; my @chkbo = (); if ($task eq 'top20') { # $threads[$index] = threads->create("parse_top20",$os,&RunCommand($host, 'top20')); $threads[$index] = async {&parse_top20($os,&RunCommand($host, 'top20'))}; } elsif ($task eq 'chkfs') { # $threads[$index] = threads->create("parse_chkfs","",&RunCommand($host, 'chkfs')); $threads[$index] = async {&parse_chkfs("",&RunCommand($host, 'chkfs'))}; } elsif ($task eq 'chkbo') { $/ = "\n****************************************\n"; if ($hour >= 14) { @chkbo = &RunCommand($host,'chkbo -d1'); } else { @chkbo = &RunCommand($host,'chkbo'); } if (scalar(@chkbo) > 1) { shift @chkbo if (defined $chkbo[0] and $chkbo[0] =~ /^\s*$/); } # $threads[$index] = threads->create("parse_chkbo","$host","@chkbo"); $threads[$index] = async {&parse_chkbo("$host","@chkbo")}; } else { # $threads[$index] = threads->create("$command",&RunCommand($host, $task)); $threads[$index] = async{&$command(&RunCommand($host, $task))}; } } } $index++; } my $index2 = 0; for my $thr (threads->list) { if ($thr->tid && !threads::equal($thr, threads->self)) { print "Thread ID is ".$thr->tid." of $index\n"; $host_data[$index2] = $thr->join; $display .= $header[$index2] if ($header[$index2]); $display .= table({-width=>'100%',-border=>'1',-class=>'main'}, Tr(th({-class=>'nodename'},b(uc($hosts[$index2])))), Tr(td($host_data[$index2]))). a({-href=>'#top'},font({-class=>'top'},"Top")); $index2++; } } return $display; } #### Host: bbsmce, Task: top20 Host: bbsmce, Task: chkfs Host: bbsmce, Task: errpt Host: bbsmce, Task: chkbo Host: bbspro, Task: top20 Host: bbspro, Task: chkfs Host: bbspro, Task: errpt Host: bbspro, Task: chkbo Host: bbsfin, Task: top20 Host: bbsfin, Task: chkfs Host: bbsfin, Task: errpt Host: bbsfin, Task: chkbo Host: bbsdev, Task: top20 Host: bbsdev, Task: chkfs Host: bbsdev, Task: errpt Host: price, Task: top20 Host: price, Task: chkfs Host: price, Task: errpt Host: perch, Task: top20 Host: perch, Task: chkfs Host: perch, Task: errpt Host: minke, Task: top20 Host: minke, Task: chkfs Host: minke, Task: errpt Host: plaice01, Task: top20 Host: plaice01, Task: chkfs Host: plaice01, Task: errpt Host: hake01, Task: top20 Host: hake01, Task: chkfs Host: hake01, Task: errpt Host: tuna, Task: top20 Host: tuna, Task: chkfs Host: tuna, Task: errpt emperor: Version mismatch or /usr/local/bin/report_agent.pl is not in (x)inetd config at /usr/local/bin/generate_report_threaded.pl line 1042. Host: tbits, Task: top20 Host: tbits, Task: chkfs Host: swordfish, Task: top20 Host: swordfish, Task: chkfs Thread ID is '1' Thread ID is '2' Thread ID is '3' Thread ID is '4' Thread ID is '5' Thread ID is '6' Thread ID is '7' Thread ID is '8' Thread ID is '9' Thread ID is '10' Thread ID is '11' Thread ID is '12' Thread ID is '13' Thread ID is '14' Thread ID is '15' Thread ID is '16' Thread ID is '17' Thread ID is '18' Thread ID is '19' Thread ID is '20' Thread ID is '21' Thread ID is '22' Thread ID is '23' Thread ID is '24' Thread ID is '25' Thread ID is '26' Thread ID is '27' Thread ID is '28' Thread ID is '29' Thread ID is '30' Thread ID is '31' Thread ID is '32' Thread ID is '33' Thread ID is '34' Thread ID is '35' Thread ID is '36' Thread ID is '37' Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 1 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 1 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2 Scalars leaked: 2