]> git.proxmox.com Git - pmg-api.git/blob - PMG/CLI/pmgreport.pm
pmgreport: new tool to send daily system reports
[pmg-api.git] / PMG / CLI / pmgreport.pm
1 package PMG::CLI::pmgreport;
2
3 use strict;
4 use Data::Dumper;
5 use Template;
6 use POSIX qw(strftime);
7
8 use PVE::INotify;
9 use PVE::CLIHandler;
10
11 use PMG::Utils;
12 use PMG::Config;
13 use PMG::RESTEnvironment;
14 use PMG::API2::Nodes;
15
16 use base qw(PVE::CLIHandler);
17
18 my $nodename = PVE::INotify::nodename();
19
20 sub setup_environment {
21 PMG::RESTEnvironment->setup_default_cli_env();
22 }
23
24 my $get_system_table_data = sub {
25
26 my $ni = PMG::API2::NodeInfo->status({ node => $nodename });
27
28 my $data = [];
29
30 push @$data, { text => 'Hostname', value => $nodename };
31
32 my $uptime = $ni->{uptime} ? PMG::Utils::format_uptime($ni->{uptime}) : '-';
33
34 push @$data, { text => 'Uptime', value => $uptime };
35
36 push @$data, { text => 'Version', value => $ni->{pmgversion} };
37
38 my $loadavg15 = '-';
39 if (my $d = $ni->{loadavg}) {
40 $loadavg15 = $d->[2];
41 }
42 push @$data, { text => 'Load', value => $loadavg15 };
43
44 my $mem = '-';
45 if (my $d = $ni->{memory}) {
46 $mem = sprintf("%.2f%%", $d->{used}*100/$d->{total});
47 }
48 push @$data, { text => 'Memory', value => $mem };
49
50 my $disk = '-';
51 if (my $d = $ni->{rootfs}) {
52 $disk = sprintf("%.2f%%", $d->{used}*100/$d->{total});
53 }
54 push @$data, { text => 'Disk', value => $disk };
55
56 return $data
57 };
58
59
60 __PACKAGE__->register_method ({
61 name => 'pmgreport',
62 path => 'pmgreport',
63 method => 'POST',
64 description => "Generate and send daily system report email.",
65 parameters => {
66 additionalProperties => 0,
67 properties => {},
68 },
69 returns => { type => 'null'},
70 code => sub {
71 my ($param) = @_;
72
73 my $fqdn = PVE::Tools::get_fqdn($nodename);
74
75 my $end = time(); # fixme
76
77 my $vars = {
78 hostname => $nodename,
79 fqdn => $fqdn,
80 date => strftime("%F", localtime($end - 1)),
81 };
82
83 $vars->{system} = $get_system_table_data->();
84
85 my $tt = PMG::Config::get_template_toolkit();
86
87 my $cfg = PMG::Config->new();
88 my $email = $cfg->get ('admin', 'email');
89
90 if (!defined($email)) {
91 die "STOPHERE";
92 }
93
94 my $mailfrom = "Proxmox Mail Gateway <postmaster>";
95 PMG::Utils::finalize_report($tt, 'pmgreport.tt', $vars, $mailfrom, $email, $param->{debug});
96
97 return undef;
98 }});
99
100 our $cmddef = [ __PACKAGE__, 'pmgreport', [], undef ];
101
102 1;