diff --git a/PVE/Status/Graphite.pm b/PVE/Status/Graphite.pm index 06168cea..a0cec1c7 100644 --- a/PVE/Status/Graphite.pm +++ b/PVE/Status/Graphite.pm @@ -80,14 +80,13 @@ sub update_storage_status { write_graphite_hash($plugin_config, $data, $ctime, "storages.$nodename.$storeid"); } -sub write_graphite_hash { - my ($plugin_config, $d, $ctime, $object) = @_; +sub _connect { + my ($class, $cfg) = @_; - my $host = $plugin_config->{server}; - my $port = $plugin_config->{port} || 2003; - my $path = $plugin_config->{path} // 'proxmox'; - my $proto = $plugin_config->{proto} || 'udp'; - my $timeout = $plugin_config->{timeout} // 1; + my $host = $cfg->{server}; + my $port = $cfg->{port} || 2003; + my $proto = $cfg->{proto} || 'udp'; + my $timeout = $cfg->{timeout} // 1; my $carbon_socket = IO::Socket::IP->new( PeerAddr => $host, @@ -96,12 +95,23 @@ sub write_graphite_hash { Timeout => $timeout, ) || die "couldn't create carbon socket [$host]:$port - $@\n"; - if ( $proto eq 'tcp' ) { + if ($proto eq 'tcp') { # seconds and µs my $timeout_struct = pack( 'l!l!', $timeout, 0); setsockopt($carbon_socket, SOL_SOCKET, SO_SNDTIMEO, $timeout_struct); setsockopt($carbon_socket, SOL_SOCKET, SO_RCVTIMEO, $timeout_struct); } + + return $carbon_socket; +} + +sub write_graphite_hash { + my ($plugin_config, $d, $ctime, $object) = @_; + + my $path = $plugin_config->{path} // 'proxmox'; + + my $carbon_socket = __PACKAGE__->_connect($plugin_config); + write_graphite($carbon_socket, $d, $ctime, $path.".$object"); $carbon_socket->close() if $carbon_socket; diff --git a/PVE/Status/InfluxDB.pm b/PVE/Status/InfluxDB.pm index b89cc0fd..f02c8854 100644 --- a/PVE/Status/InfluxDB.pm +++ b/PVE/Status/InfluxDB.pm @@ -82,15 +82,11 @@ sub update_storage_status { write_influxdb_hash($plugin_config, $data, $ctime, $object); } -sub write_influxdb_hash { - my ($plugin_config, $d, $ctime, $tags) = @_; +sub _connect { + my ($class, $cfg) = @_; - my $payload = {}; - - build_influxdb_payload($payload, $d, $ctime, $tags); - - my $host = $plugin_config->{server}; - my $port = $plugin_config->{port}; + my $host = $cfg->{server}; + my $port = $cfg->{port}; my $socket = IO::Socket::IP->new( PeerAddr => $host, @@ -98,9 +94,21 @@ sub write_influxdb_hash { Proto => 'udp', ) || die "couldn't create influxdb socket [$host]:$port - $@\n"; - $socket->send($payload->{string}); - $socket->close() if $socket; + return $socket; +} +sub write_influxdb_hash { + my ($plugin_config, $d, $ctime, $tags) = @_; + + my $payload = {}; + + build_influxdb_payload($payload, $d, $ctime, $tags); + + my $socket = __PACKAGE__->_connect($plugin_config); + + $socket->send($payload->{string}); + + $socket->close() if $socket; } sub build_influxdb_payload { diff --git a/PVE/Status/Plugin.pm b/PVE/Status/Plugin.pm index e60219c5..c61c893f 100644 --- a/PVE/Status/Plugin.pm +++ b/PVE/Status/Plugin.pm @@ -75,6 +75,12 @@ sub update_all($$@) { }); } +sub _connect { + my ($class, $cfg) = @_; + + die "please implement inside plugin"; +} + sub update_node_status { my ($class, $plugin_config, $node, $data, $ctime) = @_;