This commit is contained in:
conetadm
2025-03-10 08:26:47 +01:00
parent 7fe35abee0
commit fba07d666f
2 changed files with 166 additions and 142 deletions

View File

@@ -2,8 +2,8 @@
#use Data::Dumper; #use Data::Dumper;
if ($ARGV[0] eq "") { if ($ARGV[0] eq "") {
printf "no mail address given to send report to. exit\n"; printf "no mail address given to send report to. exit\n";
exit 1; exit 1;
} }
@servers = qw/conpve29 conpve28 conpve20 conpve17/; @servers = qw/conpve29 conpve28 conpve20 conpve17/;
@@ -14,37 +14,40 @@ for $server (@servers) {
@serverinfo = `ssh -q -l root $server qm list | sed "s/\$/$server/" | grep -v VMID 2> /dev/null`; @serverinfo = `ssh -q -l root $server qm list | sed "s/\$/$server/" | grep -v VMID 2> /dev/null`;
foreach (@serverinfo) { foreach (@serverinfo) {
($vmid, ($vmid,
$vms{$1}{'name'}, $vms{$1}{'name'},
$vms{$1}{'status'}, $vms{$1}{'status'},
$vms{$1}{'memory'}, $vms{$1}{'memory'},
$vms{$1}{'bootdisk'}, $vms{$1}{'bootdisk'},
$vms{$1}{'pid'}, $vms{$1}{'pid'},
$vms{$1}{'host'} $vms{$1}{'host'}
) = $_ =~ / *([0-9]{3,4}) *([^ ]*) *([a-z]*) *([0-9]*) *([0-9.]*) *([0-9]*) *($server)/gm; ) = $_ =~ / *([0-9]{3,4}) *([^ ]*) *([a-z]*) *([0-9]*) *([0-9.]*) *([0-9]*) *($server)/gm;
} }
$vmlist=""; $vmlist="";
foreach $vmid (keys %vms) { foreach $vmid (keys %vms) {
$vmlist = $vmlist . "$vmid " if ($vms{$vmid}{'host'} eq $server); $vmlist = $vmlist . "$vmid " if ($vms{$vmid}{'host'} eq $server);
} }
chomp $vmlist; chomp $vmlist;
print "---- get more details from vms $vmlist\n"; 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`; @more = `ssh -q -l root $server bash /opt/pve-reporting/get_vmid_info.sh $vmlist 2> /dev/null`;
foreach (@more) { foreach (@more) {
chomp; chomp;
( $vmid, ( $vmid,
$vms{$1}{'os'}, $vms{$1}{'os'},
$vms{$1}{'disksizes'}, $vms{$1}{'disksizes'},
$vms{$1}{'diskusages'}, $vms{$1}{'diskusages'},
$vms{$1}{'sockets'}, $vms{$1}{'sockets'},
$vms{$1}{'cores'}, $vms{$1}{'cores'},
$vms{$1}{'description'}, $vms{$1}{'description'},
$vms{$1}{'tags'}, $vms{$1}{'tags'},
$vms{$1}{'cdrom'} $vms{$1}{'cdrom'}
) = $_ =~ /([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*)$/gm; ) = $_ =~ /([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*)$/gm;
print "----- ID $vmid\n"; @tags=split ";", $vms{$1}{'tags'};
print "tags $vms{$1}{'tags'}\n";
foreach (@tags) { print "tag $_\n"; $tag{$_}{'name'}=$_; }
print "----- ID $vmid\n";
} }
print "\n"; print "\n";
} }
open HTML, ">output1.html"; open HTML, ">output1.html";
@@ -75,73 +78,103 @@ printf HTML '<meta name=viewport content=width=device-width,initial-scale=1/>
'; ';
printf HTML "<head>\n<body>\n"; printf HTML "<head>\n<body>\n";
open OUTPUT, ">output1.txt"; open OUTPUT, ">output1.csv";
open EUREGON, ">output_euregon.txt"; print "-- print vm information to console and in file output1.csv\n";
print "-- print vm information to console and in file output1.txt\n"; $hstr = sprintf "VMID|NAME|OS|DISKSIZE(S)|DISKUSAGE(S)|SOCKETS|CORES|MEMORY(MB)|BOOTDISK(GB)|DESCRIPTION|TAGS|STATUS|HOST|PID|CDROM\n";
$str = sprintf "VMID|NAME|OS|DISKSIZE(S)|DISKUSAGE(S)|SOCKETS|CORES|MEMORY(MB)|BOOTDISK(GB)|DESCRIPTION|TAGS|STATUS|HOST|PID|CDROM\n"; printf $hstr;
printf $str; printf OUTPUT $hstr;
printf OUTPUT $str;
printf EUREGON $str;
$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"; $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; printf HTML $str;
foreach $vm (sort keys %vms) { foreach $vm (sort keys %vms) {
$str = sprintf ("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n", $str = sprintf ("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
$vm, $vm,
$vms{$vm}{'name'}, $vms{$vm}{'name'},
$vms{$vm}{'os'}, $vms{$vm}{'os'},
$vms{$vm}{'disksizes'}, $vms{$vm}{'disksizes'},
$vms{$vm}{'diskusages'}, $vms{$vm}{'diskusages'},
$vms{$vm}{'sockets'}, $vms{$vm}{'sockets'},
$vms{$vm}{'cores'}, $vms{$vm}{'cores'},
$vms{$vm}{'memory'}, $vms{$vm}{'memory'},
$vms{$vm}{'bootdisk'}, $vms{$vm}{'bootdisk'},
$vms{$vm}{'description'}, $vms{$vm}{'description'},
$vms{$vm}{'tags'}, $vms{$vm}{'tags'},
$vms{$vm}{'status'}, $vms{$vm}{'status'},
$vms{$vm}{'host'}, $vms{$vm}{'host'},
$vms{$vm}{'pid'}, $vms{$vm}{'pid'},
$vms{$vm}{'cdrom'} $vms{$vm}{'cdrom'}
); );
printf $str; printf $str;
# if tag = euregon : extra datei # if tag = euregon : extra datei
printf EUREGON $str if ($vms{$vm}{'tags'} =~ /euregon/i); #printf EUREGON $str if ($vms{$vm}{'tags'} =~ /euregon/i);
# if disksize < 1072623616 : ignorieren # ausgabe
# ausgabe
printf OUTPUT $str; printf OUTPUT $str;
$vms{$vm}{'disksizes'} =~ s/,/<br>/g; $alltags = $vms{$vm}{'tags'};
$vms{$vm}{'diskusages'} =~ s/,/<br>/g; $alltags =~ s/;/<br>/g;
$vms{$vm}{'tags'} =~ 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", $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, $vm,
$vms{$vm}{'name'}, $vms{$vm}{'name'},
$vms{$vm}{'os'}, $vms{$vm}{'os'},
$vms{$vm}{'disksizes'}, $allsizes,
$vms{$vm}{'diskusages'}, $allusages,
$vms{$vm}{'sockets'}, $vms{$vm}{'diskusages'},
$vms{$vm}{'cores'}, $vms{$vm}{'sockets'},
$vms{$vm}{'memory'}, $vms{$vm}{'cores'},
$vms{$vm}{'bootdisk'}, $vms{$vm}{'memory'},
$vms{$vm}{'description'}, $vms{$vm}{'bootdisk'},
$vms{$vm}{'tags'}, $vms{$vm}{'description'},
$vms{$vm}{'status'}, $alltags,
$vms{$vm}{'host'}, $vms{$vm}{'status'},
$vms{$vm}{'pid'}, $vms{$vm}{'host'},
$vms{$vm}{'cdrom'} $vms{$vm}{'pid'},
); $vms{$vm}{'cdrom'}
);
printf HTML $str; printf HTML $str;
} }
close OUTPUT; close OUTPUT;
close EUREGON;
printf HTML "\n</table>\n</body></html>"; printf HTML "\n</table>\n</body></html>";
close HTML; close HTML;
# schreibe einzelne tagfiles
print "-- send output1.txt as attachement via email\n"; 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 # mail
open MAIL, ">mail1.tmp"; open MAIL, ">mail1.tmp";
@@ -150,15 +183,5 @@ printf MAIL "FROM: CONET Services Monitoring Reporter <help\@conet.de\n";
printf MAIL "SUBJECT: Proxmox VE Report Cluster 1\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 "X-CONET-SRC: conetadm\@conlxobs1:/scripts/conetadm/pve-reporting/get_vminfo_clu1.pl\n";
printf MAIL "\n\n"; printf MAIL "\n\n";
`echo "" | mutt -H mail1.tmp -a output1.txt -- $ARGV[0]`; `echo "" | mutt -H mail1.tmp -a output1.csv -- $ARGV[0]`;
unlink "mail1.tmp";
# euregon
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 Euregon\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 output_euregon.txt -- $ARGV[0]`;
unlink "mail1.tmp"; unlink "mail1.tmp";

View File

@@ -2,8 +2,8 @@
#use Data::Dumper; #use Data::Dumper;
if ($ARGV[0] eq "") { if ($ARGV[0] eq "") {
printf "no mail address given to send report to. exit\n"; printf "no mail address given to send report to. exit\n";
exit 1; exit 1;
} }
@servers = qw/pveadmin4.conadm.de/; @servers = qw/pveadmin4.conadm.de/;
@@ -14,37 +14,37 @@ for $server (@servers) {
@serverinfo = `ssh -q -l root $server qm list | sed "s/\$/$server/" | grep -v VMID 2> /dev/null`; @serverinfo = `ssh -q -l root $server qm list | sed "s/\$/$server/" | grep -v VMID 2> /dev/null`;
foreach (@serverinfo) { foreach (@serverinfo) {
($vmid, ($vmid,
$vms{$1}{'name'}, $vms{$1}{'name'},
$vms{$1}{'status'}, $vms{$1}{'status'},
$vms{$1}{'memory'}, $vms{$1}{'memory'},
$vms{$1}{'bootdisk'}, $vms{$1}{'bootdisk'},
$vms{$1}{'pid'}, $vms{$1}{'pid'},
$vms{$1}{'host'} $vms{$1}{'host'}
) = $_ =~ / *([0-9]{3,4}) *([^ ]*) *([a-z]*) *([0-9]*) *([0-9.]*) *([0-9]*) *($server)/gm; ) = $_ =~ / *([0-9]{3,4}) *([^ ]*) *([a-z]*) *([0-9]*) *([0-9.]*) *([0-9]*) *($server)/gm;
} }
$vmlist=""; $vmlist="";
foreach $vmid (keys %vms) { foreach $vmid (keys %vms) {
$vmlist = $vmlist . "$vmid " if ($vms{$vmid}{'host'} eq $server); $vmlist = $vmlist . "$vmid " if ($vms{$vmid}{'host'} eq $server);
} }
chomp $vmlist; chomp $vmlist;
print "---- get more details from vms $vmlist\n"; 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`; @more = `ssh -q -l root $server bash /opt/pve-reporting/get_vmid_info.sh $vmlist 2> /dev/null`;
foreach (@more) { foreach (@more) {
chomp; chomp;
( $vmid, ( $vmid,
$vms{$1}{'os'}, $vms{$1}{'os'},
$vms{$1}{'disksizes'}, $vms{$1}{'disksizes'},
$vms{$1}{'diskusages'}, $vms{$1}{'diskusages'},
$vms{$1}{'sockets'}, $vms{$1}{'sockets'},
$vms{$1}{'cores'}, $vms{$1}{'cores'},
$vms{$1}{'description'}, $vms{$1}{'description'},
$vms{$1}{'tags'}, $vms{$1}{'tags'},
$vms{$1}{'cdrom'} $vms{$1}{'cdrom'}
) = $_ =~ /([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*)$/gm; ) = $_ =~ /([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*)$/gm;
print "----- ID $vmid\n"; print "----- ID $vmid\n";
} }
print "\n"; print "\n";
} }
open HTML, ">output2.html"; open HTML, ">output2.html";
@@ -75,8 +75,8 @@ printf HTML '<meta name=viewport content=width=device-width,initial-scale=1/>
'; ';
printf HTML "<head>\n<body>\n"; printf HTML "<head>\n<body>\n";
open OUTPUT, ">output2.txt"; open OUTPUT, ">output2.csv";
print "-- print vm information to console and in file output2.txt\n"; print "-- print vm information to console and in file output2.csv\n";
$str = sprintf "VMID|NAME|OS|DISKSIZE(S)|DISKUSAGE(S)|SOCKETS|CORES|MEMORY(MB)|BOOTDISK(GB)|DESCRIPTION|TAGS|STATUS|HOST|PID|CDROM\n"; $str = sprintf "VMID|NAME|OS|DISKSIZE(S)|DISKUSAGE(S)|SOCKETS|CORES|MEMORY(MB)|BOOTDISK(GB)|DESCRIPTION|TAGS|STATUS|HOST|PID|CDROM\n";
printf $str; printf $str;
printf OUTPUT $str; printf OUTPUT $str;
@@ -85,45 +85,45 @@ $str = sprintf "<table border='1' id='example' class='display compact' width='10
printf HTML $str; printf HTML $str;
foreach $vm (sort keys %vms) { foreach $vm (sort keys %vms) {
$str = sprintf ("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n", $str = sprintf ("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n",
$vm, $vm,
$vms{$vm}{'name'}, $vms{$vm}{'name'},
$vms{$vm}{'os'}, $vms{$vm}{'os'},
$vms{$vm}{'disksizes'}, $vms{$vm}{'disksizes'},
$vms{$vm}{'diskusages'}, $vms{$vm}{'diskusages'},
$vms{$vm}{'sockets'}, $vms{$vm}{'sockets'},
$vms{$vm}{'cores'}, $vms{$vm}{'cores'},
$vms{$vm}{'memory'}, $vms{$vm}{'memory'},
$vms{$vm}{'bootdisk'}, $vms{$vm}{'bootdisk'},
$vms{$vm}{'description'}, $vms{$vm}{'description'},
$vms{$vm}{'tags'}, $vms{$vm}{'tags'},
$vms{$vm}{'status'}, $vms{$vm}{'status'},
$vms{$vm}{'host'}, $vms{$vm}{'host'},
$vms{$vm}{'pid'}, $vms{$vm}{'pid'},
$vms{$vm}{'cdrom'} $vms{$vm}{'cdrom'}
); );
printf $str; printf $str;
printf OUTPUT $str; printf OUTPUT $str;
$vms{$vm}{'disksizes'} =~ s/,/<br>/g; $vms{$vm}{'disksizes'} =~ s/,/<br>/g;
$vms{$vm}{'diskusages'} =~ s/,/<br>/g; $vms{$vm}{'diskusages'} =~ s/,/<br>/g;
$vms{$vm}{'tags'} =~ s/;/<br>/g; $vms{$vm}{'tags'} =~ 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", $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, $vm,
$vms{$vm}{'name'}, $vms{$vm}{'name'},
$vms{$vm}{'os'}, $vms{$vm}{'os'},
$vms{$vm}{'disksizes'}, $vms{$vm}{'disksizes'},
$vms{$vm}{'diskusages'}, $vms{$vm}{'diskusages'},
$vms{$vm}{'sockets'}, $vms{$vm}{'sockets'},
$vms{$vm}{'cores'}, $vms{$vm}{'cores'},
$vms{$vm}{'memory'}, $vms{$vm}{'memory'},
$vms{$vm}{'bootdisk'}, $vms{$vm}{'bootdisk'},
$vms{$vm}{'description'}, $vms{$vm}{'description'},
$vms{$vm}{'tags'}, $vms{$vm}{'tags'},
$vms{$vm}{'status'}, $vms{$vm}{'status'},
$vms{$vm}{'host'}, $vms{$vm}{'host'},
$vms{$vm}{'pid'}, $vms{$vm}{'pid'},
$vms{$vm}{'cdrom'} $vms{$vm}{'cdrom'}
); );
printf HTML $str; printf HTML $str;
} }
close OUTPUT; close OUTPUT;
@@ -131,7 +131,7 @@ printf HTML "\n</table>\n</body></html>";
close HTML; close HTML;
print "-- send output2.txt as attachement via email\n"; print "-- send output2.csv as attachement via email\n";
open MAIL, ">mail2.tmp"; open MAIL, ">mail2.tmp";
printf MAIL "TO: $ARGV[0]\n"; printf MAIL "TO: $ARGV[0]\n";
@@ -139,5 +139,6 @@ printf MAIL "FROM: CONET Services Monitoring Reporter <help\@conet.de\n";
printf MAIL "SUBJECT: Proxmox VE Report Cluster Admin\n"; printf MAIL "SUBJECT: Proxmox VE Report Cluster Admin\n";
printf MAIL "X-CONET-SRC: conetadm\@conlxobs1:/scripts/conetadm/pve-reporting/get_vminfo_clu2.pl\n"; printf MAIL "X-CONET-SRC: conetadm\@conlxobs1:/scripts/conetadm/pve-reporting/get_vminfo_clu2.pl\n";
printf MAIL "\n\n"; printf MAIL "\n\n";
`echo "" | mutt -H mail2.tmp -a output2.txt -- $ARGV[0]`; `echo "" | mutt -H mail2.tmp -a output2.csv -- $ARGV[0]`;
unlink "mail2.tmp"; unlink "mail2.tmp";