159 lines
4.5 KiB
Perl
159 lines
4.5 KiB
Perl
# 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';
|
|
<div class="container-fluid">
|
|
<table id="tbl" class="table table-striped table-bordered table-sm nowrap" style="width:100%">
|
|
<thead>
|
|
<tr>
|
|
<th>server</th><th>user</th><th>day</th><th>min</th><th>month</th><th>monthday</th><th>std</th><th>datei</th><th>programm</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
% use Data::Dumper;
|
|
% for my $d ( @{$da} ) {
|
|
% print Dumper( $d);
|
|
<tr>
|
|
<td><%= $d->{server} %></td>
|
|
<td><%= $d->{user} %></td>
|
|
<td><%= $d->{day} %></td>
|
|
<td><%= $d->{min} %></td>
|
|
<td><%= $d->{month} %></td>
|
|
<td><%= $d->{monthday} %></td>
|
|
<td><%= $d->{std} %></td>
|
|
<td><%= $d->{datei} %></td>
|
|
<td><%= $d->{programm} %></td>
|
|
</tr>
|
|
%}
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
|
|
@@ layouts/mylayout.html.ep
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>MyApp</title>
|
|
|
|
%= stylesheet 'http://htlib/htlib/bootstrap/4.3.1/css/bootstrap.min.css'
|
|
%= stylesheet 'http://htlib/htlib/jquery-datatables/1.10.19/css/dataTables.bootstrap4.min.css'
|
|
%= stylesheet 'http://htlib/htlib/jquery-datatables/extensions/Scroller/1.5.0/css/scroller.bootstrap4.min.css'
|
|
<!-- Jquery / Datatables -->
|
|
%= javascript 'http://htlib/htlib/jquery/jquery-3.3.1.js'
|
|
%= javascript 'http://htlib/htlib/bootstrap/4.3.1/js/bootstrap.bundle.min.js'
|
|
%= javascript 'http://htlib/htlib/jquery-datatables/1.10.19/js/jquery.dataTables.min.js'
|
|
%= javascript 'http://htlib/htlib/jquery-datatables/extensions/Scroller/1.5.0/js/dataTables.scroller.min.js'
|
|
</head>
|
|
<body>
|
|
<%= content %>
|
|
|
|
<script>
|
|
$(document).ready(function() {
|
|
$('#tbl').DataTable({
|
|
scrollY: '87vh',
|
|
deferRender: true,
|
|
scroller: true,
|
|
});
|
|
});
|
|
</script>
|
|
</body>
|
|
|
|
</html> |