# Automatically enables "strict", "warnings", "utf8" and Perl 5.10 features use Mojolicious::Lite; use Net::SSH::Perl; # use Data::Printer; use Try::Tiny; use File::Slurp qw(:std); use JSON; my $config = plugin 'Config'; # Datei einlesen my $fi = read_file( 'sshcron.json', err_mode => "quiet"); my $daten; if ( $fi ) { $daten = decode_json($fi); } # Route with placeholder get '/:new/:server' => {new => '', server => ''} => sub { my $c = shift; my $new = $c->stash('new'); my $server = $c->stash('server'); my @servers = []; my @neline; my %se; if ( $new =~ /upd|del/ && $server ne "" ) { for my $old ( @{$daten} ) { if ( $server eq 'alle' ) { if ( !$se{$old->{server}} ) { $se{$old->{server}} = 1; push @servers, $old->{server}; @neline = []; } } elsif ( $old->{server} ne $server ) { push @neline, $old; } } if ( $new eq "upd" ) { if ( $server ne "alle" ) { @servers = []; push @servers, $server; } for my $ser ( @servers ) { try { my $ssh = Net::SSH::Perl->new($ser); $ssh->login('root', '8-Tung'); my($stdout, $stderr, $exit) = $ssh->cmd("grep --exclude-dir={.placeholder} -rnw -v '#' '/etc/cron.d'"); next if ( defined $stderr ); for my $text ( split '\n', $stdout ) { my @s = split ':', $text; if ( scalar(@s) == 2 || $s[2] =~ /$config->{ignore}/ ) { } else { my @file = split( '/', $s[0]); my @j = split( ' ', $s[2]); my $pro = ""; if (scalar(@j) > 6) { for my $p ( 6 .. scalar(@j)-1 ) { if ($p == scalar(@j)-1 ) { $pro .= "$j[$p]"; } else { $pro .= "$j[$p] "; } } if (scalar(@s) > 3 ) { for my $p ( 3 .. scalar(@s)-1 ) { $pro .= ":$s[$p]"; } } } push @neline, { datei => $file[scalar(@file)-1], user => $j[5], min => $j[0], std => $j[1], day => $j[2], month => $j[3], monthday => $j[4], programm => $pro, server => $ser }; } } } catch { push @neline, { datei => '', user =>'', min => '', std => '', day => '', month => '', monthday => '', programm => 'error', server => $ser }; }; } } write_file('sshcron.json', encode_json(\@neline) ); $daten = \@neline; } # p $daten; $c->render(template => 'foo/bar', da => $daten ); }; # Start the Mojolicious command system app->start; __DATA__ @@ foo/bar.html.ep % layout 'mylayout';
| server | user | day | min | month | monthday | std | datei | programm |
|---|---|---|---|---|---|---|---|---|
| <%= $d->{server} %> | <%= $d->{user} %> | <%= $d->{day} %> | <%= $d->{min} %> | <%= $d->{month} %> | <%= $d->{monthday} %> | <%= $d->{std} %> | <%= $d->{datei} %> | <%= $d->{programm} %> |