by providing the id or cfg to have better context in those methods we will need that for influxdb http api Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
83 lines
1.8 KiB
Perl
83 lines
1.8 KiB
Perl
package PVE::ExtMetric;
|
|
|
|
use strict;
|
|
use warnings;
|
|
|
|
use PVE::Status::Plugin;
|
|
use PVE::Status::Graphite;
|
|
use PVE::Status::InfluxDB;
|
|
|
|
PVE::Status::Graphite->register();
|
|
PVE::Status::InfluxDB->register();
|
|
PVE::Status::Plugin->init();
|
|
|
|
sub foreach_plug($&) {
|
|
my ($status_cfg, $code) = @_;
|
|
|
|
for my $id (sort keys %{$status_cfg->{ids}}) {
|
|
my $plugin_config = $status_cfg->{ids}->{$id};
|
|
next if $plugin_config->{disable};
|
|
|
|
my $plugin = PVE::Status::Plugin->lookup($plugin_config->{type});
|
|
$code->($plugin, $id, $plugin_config);
|
|
}
|
|
}
|
|
|
|
sub update_all($$@) {
|
|
my ($transactions, $subsystem, @params) = @_;
|
|
|
|
my $method = "update_${subsystem}_status";
|
|
|
|
for my $txn (@$transactions) {
|
|
my $plugin = PVE::Status::Plugin->lookup($txn->{cfg}->{type});
|
|
|
|
$plugin->$method($txn, @params);
|
|
}
|
|
}
|
|
|
|
# must return a transaction hash with the format:
|
|
# {
|
|
# cfg => $plugin_config,
|
|
# connection => ..., # the connected socket
|
|
# data => '', # payload, will be sent at the trannsaction flush
|
|
# }
|
|
sub transactions_start {
|
|
my ($cfg) = @_;
|
|
|
|
my $transactions = [];
|
|
|
|
foreach_plug($cfg, sub {
|
|
my ($plugin, $id, $plugin_config) = @_;
|
|
|
|
my $connection = $plugin->_connect($plugin_config, $id);
|
|
|
|
push @$transactions, {
|
|
connection => $connection,
|
|
cfg => $plugin_config,
|
|
id => $id,
|
|
data => '',
|
|
};
|
|
});
|
|
|
|
return $transactions;
|
|
}
|
|
|
|
sub transactions_finish {
|
|
my ($transactions) = @_;
|
|
|
|
for my $txn (@$transactions) {
|
|
my $plugin = PVE::Status::Plugin->lookup($txn->{cfg}->{type});
|
|
|
|
eval { $plugin->flush_data($txn) };
|
|
my $flush_err = $@;
|
|
warn "$flush_err" if $flush_err;
|
|
|
|
$plugin->_disconnect($txn->{connection}, $txn->{cfg});
|
|
$txn->{connection} = undef;
|
|
# avoid log spam, already got a send error; disconnect would fail too
|
|
warn "disconnect failed: $@" if $@ && !$flush_err;
|
|
}
|
|
}
|
|
|
|
1;
|