0) { return true; } if ($row = dbFetchRow("SELECT id FROM proxmox WHERE vmid = ? AND cluster = ?", array($i, $c))) { $pmxcache[$c][$i] = (integer) $row['id']; return true; } return false; } $pmxlines = explode("\n", $proxmox); $pmxcluster = array_shift($pmxlines); $pmxcdir = join('/', array($config['rrd_dir'], $name, $pmxcluster)); if (!is_dir($pmxcdir)) { mkdir($pmxcdir, 0775, true); } dbUpdate(array('device_id' => $device['device_id'], 'app_type' => $name, 'app_instance' => $pmxcluster), 'applications', '`device_id` = ? AND `app_type` = ?', array($device['device_id'], $name)); if (count($pmxlines) > 0) { $pmxcache = []; foreach ($pmxlines as $vm) { list($vmid, $vmport, $vmpin, $vmpout, $vmdesc) = explode('/', $vm, 5); print "Proxmox ($pmxcluster): $vmdesc: $vmpin/$vmpout/$vmport\n"; $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 ); $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)); } 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);