mirror of
https://github.com/librenms/librenms.git
synced 2024-10-07 16:52:45 +00:00
Proxmox rrd fix
Attempt to fix proxmox rrd naming. Create a separate function to generate it's file names.
This commit is contained in:
@@ -18,7 +18,7 @@
|
||||
|
||||
require 'includes/graphs/common.inc.php';
|
||||
|
||||
$proxmox_rrd = $config['rrd_dir'].'/proxmox/'.$vars['cluster'].'/'.$vars['vmid'].'_netif_'.$vars['port'].'.rrd';
|
||||
$proxmox_rrd = proxmox_rrd_name($vars['cluster'], $vars['vmid'], $vars['port']);
|
||||
|
||||
if (rrdtool_check_rrd_exists($proxmox_rrd)) {
|
||||
$rrd_filename = $proxmox_rrd;
|
||||
|
@@ -1,11 +1,5 @@
|
||||
<?php
|
||||
|
||||
$name = 'proxmox';
|
||||
$app_id = $app['app_id'];
|
||||
if (isset($config['enable_proxmox']) && $config['enable_proxmox'] && !empty($agent_data['app'][$name])) {
|
||||
$proxmox = $agent_data['app'][$name];
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a port on a Proxmox VM exists
|
||||
* @param string $p Port name
|
||||
@@ -41,57 +35,63 @@ function proxmox_vm_exists($i, $c, &$pmxcache) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$pmxlines = explode("\n", $proxmox);
|
||||
$name = 'proxmox';
|
||||
$app_id = $app['app_id'];
|
||||
|
||||
$pmxcluster = array_shift($pmxlines);
|
||||
if (isset($config['enable_proxmox']) && $config['enable_proxmox'] && !empty($agent_data['app'][$name])) {
|
||||
$proxmox = $agent_data['app'][$name];
|
||||
$pmxlines = explode("\n", $proxmox);
|
||||
$pmxcluster = array_shift($pmxlines);
|
||||
dbUpdate(array('device_id' => $device['device_id'], 'app_type' => $name, 'app_instance' => $pmxcluster),
|
||||
'applications', '`device_id` = ? AND `app_type` = ?', array($device['device_id'], $name));
|
||||
|
||||
$pmxcdir = join('/', array($config['rrd_dir'], $name, $pmxcluster));
|
||||
if (!is_dir($pmxcdir)) {
|
||||
mkdir($pmxcdir, 0775, true);
|
||||
}
|
||||
if (count($pmxlines) > 0) {
|
||||
$pmxcache = array();
|
||||
|
||||
dbUpdate(array('device_id' => $device['device_id'], 'app_type' => $name, 'app_instance' => $pmxcluster), 'applications', '`device_id` = ? AND `app_type` = ?', array($device['device_id'], $name));
|
||||
foreach ($pmxlines as $vm) {
|
||||
list($vmid, $vmport, $vmpin, $vmpout, $vmdesc) = explode('/', $vm, 5);
|
||||
print "Proxmox ($pmxcluster): $vmdesc: $vmpin/$vmpout/$vmport\n";
|
||||
|
||||
if (count($pmxlines) > 0) {
|
||||
$pmxcache = array();
|
||||
$rrd_proxmox_name = array(
|
||||
'pmxcluster' => $pmxcluster,
|
||||
'vmid' => $vmid,
|
||||
'vmport' => $vmport
|
||||
);
|
||||
$rrd_def = array(
|
||||
'DS:INOCTETS:DERIVE:600:0:12500000000',
|
||||
'DS:OUTOCTETS:DERIVE:600:0:12500000000'
|
||||
);
|
||||
$fields = array(
|
||||
'INOCTETS' => $vmpin,
|
||||
'OUTOCTETS' => $vmpout
|
||||
);
|
||||
|
||||
foreach ($pmxlines as $vm) {
|
||||
list($vmid, $vmport, $vmpin, $vmpout, $vmdesc) = explode('/', $vm, 5);
|
||||
print "Proxmox ($pmxcluster): $vmdesc: $vmpin/$vmpout/$vmport\n";
|
||||
$tags = compact('name', 'app_id', 'pmxcluster', 'vmid', 'vmport', 'rrd_proxmox_name', 'rrd_def');
|
||||
data_update($device, 'app', $tags, $fields);
|
||||
|
||||
$rrd_name = join('/', array($name, $pmxcluster, $vmid)).'_netif_'.$vmport;
|
||||
$rrd_def = array(
|
||||
'DS:INOCTETS:DERIVE:600:0:12500000000',
|
||||
'DS:OUTOCTETS:DERIVE:600:0:12500000000'
|
||||
);
|
||||
$fields = array(
|
||||
'INOCTETS' => $vmpin,
|
||||
'OUTOCTETS' => $vmpout
|
||||
);
|
||||
if (proxmox_vm_exists($vmid, $pmxcluster, $pmxcache) === true) {
|
||||
dbUpdate(array(
|
||||
'device_id' => $device['device_id'],
|
||||
'last_seen' => array('NOW()'),
|
||||
'description' => $vmdesc
|
||||
), $name, '`vmid` = ? AND `cluster` = ?', array($vmid, $pmxcluster));
|
||||
} else {
|
||||
$pmxcache[$pmxcluster][$vmid] = dbInsert(array(
|
||||
'cluster' => $pmxcluster,
|
||||
'vmid' => $vmid,
|
||||
'description' => $vmdesc,
|
||||
'device_id' => $device['device_id']
|
||||
), $name);
|
||||
}
|
||||
|
||||
$tags = compact('name', 'app_id', 'pmxcluster', 'vmid', 'vmport', 'rrd_name', 'rrd_def');
|
||||
data_update($device, 'app', $tags, $fields);
|
||||
|
||||
if (proxmox_vm_exists($vmid, $pmxcluster, $pmxcache) === true) {
|
||||
dbUpdate(array('device_id' => $device['device_id'], 'last_seen' => array('NOW()'), 'description' => $vmdesc), $name, '`vmid` = ? AND `cluster` = ?', array($vmid, $pmxcluster));
|
||||
if ($portid = proxmox_port_exists($vmid, $pmxcluster, $vmport) !== false) {
|
||||
dbUpdate(array('last_seen' => array('NOW()')), 'proxmox_ports', '`vm_id` = ? AND `port` = ?',
|
||||
array($pmxcache[$pmxcluster][$vmid], $vmport));
|
||||
} else {
|
||||
dbInsert(array('vm_id' => $pmxcache[$pmxcluster][$vmid], 'port' => $vmport), 'proxmox_ports');
|
||||
}
|
||||
}
|
||||
else {
|
||||
$pmxcache[$pmxcluster][$vmid] = dbInsert(array('cluster' => $pmxcluster, 'vmid' => $vmid, 'description' => $vmdesc, 'device_id' => $device['device_id']), $name);
|
||||
}
|
||||
|
||||
if ($portid = proxmox_port_exists($vmid, $pmxcluster, $vmport) !== false) {
|
||||
dbUpdate(array('last_seen' => array('NOW()')), 'proxmox_ports', '`vm_id` = ? AND `port` = ?', array($pmxcache[$pmxcluster][$vmid], $vmport));
|
||||
}
|
||||
else {
|
||||
dbInsert(array('vm_id' => $pmxcache[$pmxcluster][$vmid], 'port' => $vmport), 'proxmox_ports');
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
unset($pmxlines);
|
||||
unset($pmxcluster);
|
||||
unset($pmxcdir);
|
||||
unset($proxmox);
|
||||
unset($pmxcache);
|
||||
unset($pmxlines, $pmxcluster, $pmxcdir, $proxmox, $pmxcache);
|
||||
|
@@ -292,6 +292,26 @@ function rrd_name($host, $extra, $extension = ".rrd")
|
||||
return implode("/", array($config['rrd_dir'], $host, $filename.$extension));
|
||||
} // rrd_name
|
||||
|
||||
/**
|
||||
* Generates a filename for a proxmox cluster rrd
|
||||
*
|
||||
* @param $pmxcluster
|
||||
* @param $vmid
|
||||
* @param $vmport
|
||||
* @return string full path to the rrd.
|
||||
*/
|
||||
function proxmox_rrd_name($pmxcluster, $vmid, $vmport) {
|
||||
global $config;
|
||||
|
||||
$pmxcdir = join('/', array($config['rrd_dir'], 'proxmox', safename($pmxcluster)));
|
||||
// this is not needed for remote rrdcached
|
||||
if (!is_dir($pmxcdir)) {
|
||||
mkdir($pmxcdir, 0775, true);
|
||||
}
|
||||
|
||||
return join('/', array($pmxcdir, safename($vmid.'_netif_'.$vmport.'.rrd')));
|
||||
}
|
||||
|
||||
/**
|
||||
* Modify an rrd file's max value and trim the peaks as defined by rrdtool
|
||||
*
|
||||
@@ -358,7 +378,13 @@ function rrdtool_data_update($device, $measurement, $tags, $fields)
|
||||
rrd_file_rename($device, $oldname, $rrd_name);
|
||||
}
|
||||
|
||||
$rrd = rrd_name($device['hostname'], $rrd_name);
|
||||
if (isset($tags['rrd_proxmox_name'])) {
|
||||
$pmxvars = $tags['rrd_proxmox_name'];
|
||||
$rrd = proxmox_rrd_name($pmxvars['pmxcluster'], $pmxvars['vmid'], $pmxvars['vmport']);
|
||||
} else {
|
||||
$rrd = rrd_name($device['hostname'], $rrd_name);
|
||||
}
|
||||
|
||||
if ($tags['rrd_def']) {
|
||||
$rrd_def = is_array($tags['rrd_def']) ? $tags['rrd_def'] : array($tags['rrd_def']);
|
||||
// add the --step and the rra definitions to the command
|
||||
|
Reference in New Issue
Block a user