# 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 '/' => sub { my $c = shift; $c->render(template => 'index', da => $daten ); }; # Route with placeholder any '/jobs/:new/:server' => {new => '', server => ''} => sub { my $c = shift; my $j = $c->req->json; my $new = $c->stash('new'); my $server = $c->stash('server'); if ( $j->{new} && $j->{server} ) { $server = $j->{server}; $new = $j->{new}; } my @servers; my @neline; my %se; my @allserver; # bei angabe der richtigen Parameter ... 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}; } } elsif ( defined $old->{server} && $old->{server} ne $server ) { push @neline, $old; } } if ( $new eq "upd" ) { if ( $server ne "alle" ) { push @servers, $server; } for my $ser ( @servers ) { try { my $ssh = Net::SSH::Perl->new($ser, options => [ "MACs +hmac-sha1" ]); $ssh->login('root', '8-Tung'); my($stdout, $stderr, $exit) = $ssh->cmd("grep -rHv '##' '/etc/cron.d'"); next if ( defined $stderr ); for my $text ( split '\n', $stdout ) { my @s = split ':', $text; if ( scalar(@s) == 1 || $s[1] =~ /$config->{ignore}/ ) { } else { my $status = "Ja"; if ( $s[1] =~ /^#/ ) { $status = "Nein"; } my @file = split( '/', $s[0]); my @j = split( ' ', $s[1]); 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) > 2 ) { for my $p ( 2 .. scalar(@s)-1 ) { $pro .= ":$s[$p]"; } } push @neline, { datei => $file[scalar(@file)-1], user => $j[5], min => $j[0] =~ s/#//r , std => $j[1], day => $j[2], month => $j[3], monthday => $j[4], programm => $pro, server => $ser, status => $status }; } } } } catch { push @neline, { datei => '', user =>'', min => '', std => '', day => '', month => '', monthday => '', programm => 'error', server => $ser, status => '' }; }; } } # schreiben der neuen Daten in JSON Datei write_file('sshcron.json', encode_json(\@neline) ); $daten = \@neline; } my %s; for my $old ( @{$daten} ) { if ( !$s{$old->{server}} ) { $s{$old->{server}} = 1; push @allserver, $old->{server}; } } # p $daten; if ( $j->{new} && $j->{server} ) { $c->render(json => { rc => 0, msg => 'OK' }); } else { $c->render(template => 'jobs', da => $daten , server => \@allserver); } }; # Start the Mojolicious command system app->start; __DATA__ @@ index.html.ep % layout 'index';
| activ | server | min | hour | day | month | monthday | user | file | program |
|---|---|---|---|---|---|---|---|---|---|
| <%= $d->{status} %> | <%= $d->{server} %> | <%= $d->{min} %> | <%= $d->{std} %> | <%= $d->{day} %> | <%= $d->{month} %> | <%= $d->{monthday} %> | <%= $d->{user} %> | <%= $d->{datei} %> | <%= $d->{programm} %> |