]>
git.proxmox.com Git - pmg-api.git/blob - PMG/CLI/pmgreport.pm
1 package PMG
::CLI
::pmgreport
;
6 use POSIX
qw(strftime);
13 use PMG
::RESTEnvironment
;
16 use PMG
::ClusterConfig
;
18 use PMG
::API2
::Cluster
;
20 use base
qw(PVE::CLIHandler);
22 my $nodename = PVE
::INotify
::nodename
();
24 sub setup_environment
{
25 PMG
::RESTEnvironment-
>setup_default_cli_env();
27 my $rpcenv = PMG
::RESTEnvironment-
>get();
28 # API /config/cluster/nodes need a ticket to connect to other nodes
29 my $ticket = PMG
::Ticket
::assemble_ticket
('root@pam');
30 $rpcenv->set_ticket($ticket);
33 my $get_system_table_data = sub {
35 my $ni = PMG
::API2
::NodeInfo-
>status({ node
=> $nodename });
39 push @$data, { text
=> 'Hostname', value
=> $nodename };
41 my $uptime = $ni->{uptime
} ? PMG
::Utils
::format_uptime
($ni->{uptime
}) : '-';
43 push @$data, { text
=> 'Uptime', value
=> $uptime };
45 push @$data, { text
=> 'Version', value
=> $ni->{pmgversion
} };
48 if (my $d = $ni->{loadavg
}) {
49 $loadavg15 = sprintf("%.2f", $d->[2]);
51 push @$data, { text
=> 'Load', value
=> $loadavg15 };
54 if (my $d = $ni->{memory
}) {
55 $mem = sprintf("%.2f%%", $d->{used
}*100/$d->{total
});
57 push @$data, { text
=> 'Memory', value
=> $mem };
60 if (my $d = $ni->{rootfs
}) {
61 $disk = sprintf("%.2f%%", $d->{used
}*100/$d->{total
});
63 push @$data, { text
=> 'Disk', value
=> $disk };
68 my $get_cluster_table_data = sub {
70 my $res = PMG
::API2
::Cluster-
>status({});
71 return undef if !scalar(@$res);
75 foreach my $ni (@$res) {
77 $state = 'S' if !$ni->{insync
};
80 if (my $d = $ni->{loadavg
}) {
81 $loadavg1 = sprintf("%.2f", $d->[0]);
85 if (my $d = $ni->{memory
}) {
86 $memory = sprintf("%.2f%%", $d->{used
}*100/$d->{total
});
90 if (my $d = $ni->{rootfs
}) {
91 $disk = sprintf("%.2f%%", $d->{used
}*100/$d->{total
});
95 hostname
=> $ni->{name
},
99 loadavg1
=> $loadavg1,
108 __PACKAGE__-
>register_method ({
112 description
=> "Generate and send daily system report email.",
114 additionalProperties
=> 0,
117 description
=> "Debug mode. Print raw email to stdout instead of sending them.",
123 description
=> "Auto mode. Use setting from system configuration (set when invoked fron cron).",
129 description
=> "Send report to this email address. Default is the administratior email address.",
130 type
=> 'string', format
=> 'email',
135 returns
=> { type
=> 'null'},
139 my $fqdn = PVE
::Tools
::get_fqdn
($nodename);
141 my $end = time(); # fixme
144 hostname
=> $nodename,
146 date
=> strftime
("%F", localtime($end - 1)),
149 my $cinfo = PMG
::ClusterConfig-
>new();
150 my $role = $cinfo->{local}->{type
} // '-';
153 $vars->{system} = $get_system_table_data->();
155 $vars->{cluster
} = $get_cluster_table_data->();
156 if ($role eq 'master') {
159 return undef if $param->{auto
}; # silent exit - do not send report
163 my $tt = PMG
::Config
::get_template_toolkit
();
165 my $cfg = PMG
::Config-
>new();
166 my $email = $param->{receiver
} // $cfg->get ('admin', 'email');
168 if (!defined($email)) {
169 return undef if $param->{auto
}; # silent exit - do not send report
170 die "no receiver configured\n";
173 my $mailfrom = "Proxmox Mail Gateway <postmaster>";
174 PMG
::Utils
::finalize_report
($tt, 'pmgreport.tt', $vars, $mailfrom, $email, $param->{debug
});
179 our $cmddef = [ __PACKAGE__
, 'pmgreport', [], undef ];