188 lines
5.7 KiB
Perl
188 lines
5.7 KiB
Perl
#!/usr/bin/perl
|
|
#use Data::Dumper;
|
|
|
|
if ($ARGV[0] eq "") {
|
|
printf "no mail address given to send report to. exit\n";
|
|
exit 1;
|
|
}
|
|
|
|
@servers = qw/conpve29 conpve28 conpve20 conpve17/;
|
|
|
|
print "-- get general info from every host\n";
|
|
for $server (@servers) {
|
|
print "--- server $server\n";
|
|
@serverinfo = `ssh -q -l root $server qm list | sed "s/\$/$server/" | grep -v VMID 2> /dev/null`;
|
|
foreach (@serverinfo) {
|
|
($vmid,
|
|
$vms{$1}{'name'},
|
|
$vms{$1}{'status'},
|
|
$vms{$1}{'memory'},
|
|
$vms{$1}{'bootdisk'},
|
|
$vms{$1}{'pid'},
|
|
$vms{$1}{'host'}
|
|
) = $_ =~ / *([0-9]{3,4}) *([^ ]*) *([a-z]*) *([0-9]*) *([0-9.]*) *([0-9]*) *($server)/gm;
|
|
}
|
|
$vmlist="";
|
|
foreach $vmid (keys %vms) {
|
|
$vmlist = $vmlist . "$vmid " if ($vms{$vmid}{'host'} eq $server);
|
|
}
|
|
chomp $vmlist;
|
|
|
|
print "---- get more details from vms $vmlist\n";
|
|
@more = `ssh -q -l root $server bash /opt/pve-reporting/get_vmid_info.sh $vmlist 2> /dev/null`;
|
|
foreach (@more) {
|
|
chomp;
|
|
( $vmid,
|
|
$vms{$1}{'os'},
|
|
$vms{$1}{'disksizes'},
|
|
$vms{$1}{'diskusages'},
|
|
$vms{$1}{'sockets'},
|
|
$vms{$1}{'cores'},
|
|
$vms{$1}{'description'},
|
|
$vms{$1}{'tags'},
|
|
$vms{$1}{'cdrom'}
|
|
) = $_ =~ /([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*)$/gm;
|
|
@tags=split ";", $vms{$1}{'tags'};
|
|
print "tags $vms{$1}{'tags'}\n";
|
|
foreach (@tags) { print "tag $_\n"; $tag{$_}{'name'}=$_; }
|
|
print "----- ID $vmid\n";
|
|
}
|
|
print "\n";
|
|
}
|
|
|
|
open HTML, ">output1.html";
|
|
printf HTML "<html>\n<head>\n<!-- conetadm\@conlxobs1:/scripts/conetadm/pve-reporting/get_vminfo_clu1.pl -->\n";
|
|
printf HTML '<meta name=viewport content=width=device-width,initial-scale=1/>
|
|
<link rel=stylesheet type=text/css href=jquery/jquery.dataTables.min.css>
|
|
|
|
<script type=text/javascript language=javascript src=jquery/jquery-3.5.1.js></script>
|
|
<script type=text/javascript language=javascript src=jquery/jquery.dataTables.min.js></script>
|
|
<script type=text/javascript class=init>
|
|
$(document).ready(function () {
|
|
$(\'#example\').DataTable( {
|
|
\'pageLength\': 20,
|
|
} );
|
|
|
|
});
|
|
</script>
|
|
<style>
|
|
.par {
|
|
background-color:#00ff00;
|
|
color:#666666;
|
|
}
|
|
.unpar {
|
|
background-color:#ff0000;
|
|
color:#666666;
|
|
}
|
|
</style>
|
|
';
|
|
printf HTML "<head>\n<body>\n";
|
|
|
|
open OUTPUT, ">output1.csv";
|
|
print "-- print vm information to console and in file output1.csv\n";
|
|
$hstr = sprintf "VMID|NAME|OS|DISKSIZE(S)|DISKUSAGE(S)|SOCKETS|CORES|MEMORY(MB)|BOOTDISK(GB)|DESCRIPTION|TAGS|STATUS|HOST|PID|CDROM\n";
|
|
printf $hstr;
|
|
printf OUTPUT $hstr;
|
|
|
|
$str = sprintf "<table border='1' id='example' class='display compact' width='100%'>\n<thead><tr><th>VMID</th><th>NAME</th><th>OS</th><th>DISKSIZE(S)</th><th>DISKUSAGE(S)</th><th>SOCKETS</th><th>CORES</th><th>MEMORY(MB)</th><th>BOOTDISK(GB)</th><th>DESCRIPTION</th><th>TAGS</th><th>STATUS</th><th>HOST</th><th>PID</th><th>CDROM</th></tr></thead>\n";
|
|
printf HTML $str;
|
|
|
|
foreach $vm (sort keys %vms) {
|
|
$str = sprintf ("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
|
|
$vm,
|
|
$vms{$vm}{'name'},
|
|
$vms{$vm}{'os'},
|
|
$vms{$vm}{'disksizes'},
|
|
$vms{$vm}{'diskusages'},
|
|
$vms{$vm}{'sockets'},
|
|
$vms{$vm}{'cores'},
|
|
$vms{$vm}{'memory'},
|
|
$vms{$vm}{'bootdisk'},
|
|
$vms{$vm}{'description'},
|
|
$vms{$vm}{'tags'},
|
|
$vms{$vm}{'status'},
|
|
$vms{$vm}{'host'},
|
|
$vms{$vm}{'pid'},
|
|
$vms{$vm}{'cdrom'}
|
|
);
|
|
printf $str;
|
|
|
|
# if tag = euregon : extra datei
|
|
#printf EUREGON $str if ($vms{$vm}{'tags'} =~ /euregon/i);
|
|
|
|
# ausgabe
|
|
printf OUTPUT $str;
|
|
|
|
$alltags = $vms{$vm}{'tags'};
|
|
$alltags =~ s/;/<br>/g;
|
|
$allsizes = $vms{$vm}{'disksizes'};
|
|
$allsizes =~ s/;/<br>/g;
|
|
$allusages = $vms{$vm}{'diskusages'};
|
|
$allusages =~ s/;/<br>/g;
|
|
|
|
$str = sprintf ("<tr><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td><td>%s</td></tr>\n",
|
|
$vm,
|
|
$vms{$vm}{'name'},
|
|
$vms{$vm}{'os'},
|
|
$allsizes,
|
|
$allusages,
|
|
$vms{$vm}{'diskusages'},
|
|
$vms{$vm}{'sockets'},
|
|
$vms{$vm}{'cores'},
|
|
$vms{$vm}{'memory'},
|
|
$vms{$vm}{'bootdisk'},
|
|
$vms{$vm}{'description'},
|
|
$alltags,
|
|
$vms{$vm}{'status'},
|
|
$vms{$vm}{'host'},
|
|
$vms{$vm}{'pid'},
|
|
$vms{$vm}{'cdrom'}
|
|
);
|
|
printf HTML $str;
|
|
}
|
|
close OUTPUT;
|
|
printf HTML "\n</table>\n</body></html>";
|
|
close HTML;
|
|
|
|
# schreibe einzelne tagfiles
|
|
foreach $t (keys %tag) {
|
|
print "t $t\n";
|
|
open OUT, ">output1_$t.csv";
|
|
printf OUT $hstr;
|
|
foreach $vm (sort keys %vms) {
|
|
print "1 $vms{$vm}{'tags'} 2 $tag{$t}{'name'}\n";
|
|
if ( $vms{$vm}{'tags'} =~ /$t/ ) {
|
|
$str = sprintf ("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
|
|
$vm,
|
|
$vms{$vm}{'name'},
|
|
$vms{$vm}{'os'},
|
|
$vms{$vm}{'disksizes'},
|
|
$vms{$vm}{'diskusages'},
|
|
$vms{$vm}{'sockets'},
|
|
$vms{$vm}{'cores'},
|
|
$vms{$vm}{'memory'},
|
|
$vms{$vm}{'bootdisk'},
|
|
$vms{$vm}{'description'},
|
|
$vms{$vm}{'tags'},
|
|
$vms{$vm}{'status'},
|
|
$vms{$vm}{'host'},
|
|
$vms{$vm}{'pid'},
|
|
$vms{$vm}{'cdrom'}
|
|
);
|
|
print OUT $str;
|
|
}
|
|
}
|
|
close OUT;
|
|
}
|
|
print "-- send output1.csv as attachement via email\n";
|
|
|
|
# mail
|
|
open MAIL, ">mail1.tmp";
|
|
printf MAIL "TO: $ARGV[0]\n";
|
|
printf MAIL "FROM: CONET Services Monitoring Reporter <help\@conet.de\n";
|
|
printf MAIL "SUBJECT: Proxmox VE Report Cluster 1\n";
|
|
printf MAIL "X-CONET-SRC: conetadm\@conlxobs1:/scripts/conetadm/pve-reporting/get_vminfo_clu1.pl\n";
|
|
printf MAIL "\n\n";
|
|
`echo "" | mutt -H mail1.tmp -a output1.csv -- $ARGV[0]`;
|
|
unlink "mail1.tmp";
|