Skip to content

Commit 185d885

Browse files
authored
Merge pull request #15 from irabbi360/dev
vm monitor & rrddata api add
2 parents b111e4d + 49479c6 commit 185d885

File tree

1 file changed

+118
-5
lines changed

1 file changed

+118
-5
lines changed

src/ProxmoxNodeVm.php

Lines changed: 118 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3326,20 +3326,133 @@ public function deleteDiskType(string $node, string $type, $name)
33263326
* QEMU monitor commands...
33273327
* @throws Exception
33283328
*/
3329-
public function vmMonitor(string $node, int $vmid)
3329+
public function vmMonitor(string $node, int $vmid, $params)
33303330
{
3331-
$params = ['command' => 'query-cpus'];
3332-
$response = $this->makeRequest('GET', "nodes/{$node}/qemu/{$vmid}}/status/current");
3331+
$params = ['command' => 'info'];
3332+
$response = $this->makeRequest('POST', "nodes/{$node}/qemu/{$vmid}/monitor", $params);
33333333

33343334
if (!isset($response['data'])){
3335-
return ResponseHelper::generate(false,'Disk delete failed!', $response['data']);
3335+
return ResponseHelper::generate(false,'Failed to fetch monitoring data!', $response['data']);
33363336
}
33373337

33383338
$successResponse = [
33393339
'node' => $node,
33403340
'data' => $response['data']
33413341
];
33423342

3343-
return ResponseHelper::generate(true,'Disk deleted successfully', $successResponse);
3343+
return ResponseHelper::generate(true,'Data retrieved successfully', $successResponse);
3344+
}
3345+
3346+
/**
3347+
* QEMU VM RRDdata (Round Robin Database data)...
3348+
* @throws Exception
3349+
*/
3350+
public function vmRrddata(string $node, int $vmid, $params)
3351+
{
3352+
try {
3353+
// Fixed URL by removing extra curly brace
3354+
$response = $this->makeRequest('GET', "nodes/{$node}/qemu/{$vmid}/rrddata", $params);
3355+
3356+
if (!isset($response['data'])) {
3357+
return ResponseHelper::generate(
3358+
false,
3359+
'No monitoring data available',
3360+
[]
3361+
);
3362+
}
3363+
3364+
$successResponse = [
3365+
'node' => $node,
3366+
'vmid' => $vmid,
3367+
'data' => array_map(function($entry) {
3368+
return [
3369+
'time' => isset($entry['time']) ? date('Y-m-d H:i:s', $entry['time']) : null,
3370+
'cpu' => $entry['cpu'] ?? null,
3371+
'mem' => $entry['mem'] ?? null,
3372+
'netin' => $entry['netin'] ?? null,
3373+
'netout' => $entry['netout'] ?? null,
3374+
'diskread' => $entry['diskread'] ?? null,
3375+
'diskwrite' => $entry['diskwrite'] ?? null
3376+
];
3377+
}, $response['data'])
3378+
];
3379+
3380+
return ResponseHelper::generate(true, 'Data retrieved successfully', $successResponse);
3381+
3382+
} catch (Exception $e) {
3383+
return ResponseHelper::generate(
3384+
false,
3385+
'Failed to fetch monitoring data: ' . $e->getMessage(),
3386+
[]
3387+
);
3388+
}
3389+
}
3390+
3391+
public function getVMMetrics(string $node, int $vmid, $params)
3392+
{
3393+
try {
3394+
$response = $this->makeRequest('GET', "nodes/{$node}/qemu/{$vmid}/rrddata", $params);
3395+
3396+
if (!isset($response['data']) || empty($response['data'])) {
3397+
return ResponseHelper::generate(false, 'No metrics data available', []);
3398+
}
3399+
3400+
// Process and format the metrics
3401+
$formattedMetrics = array_map(function($entry) {
3402+
return [
3403+
'timestamp' => date('Y-m-d H:i:s', $entry['time']),
3404+
3405+
// CPU Metrics
3406+
'cpu' => [
3407+
'usage_percentage' => isset($entry['cpu']) ? round($entry['cpu'] * 100, 2) : null,
3408+
],
3409+
3410+
// Memory Metrics
3411+
'memory' => [
3412+
'used_bytes' => $entry['mem'] ?? null,
3413+
'used_gb' => isset($entry['mem']) ? round($entry['mem'] / (1024 * 1024 * 1024), 2) : null,
3414+
'total_bytes' => $entry['maxmem'] ?? null,
3415+
'total_gb' => isset($entry['maxmem']) ? round($entry['maxmem'] / (1024 * 1024 * 1024), 2) : null,
3416+
],
3417+
3418+
// Network Metrics
3419+
'network' => [
3420+
'in_bytes' => $entry['netin'] ?? null,
3421+
'in_mb' => isset($entry['netin']) ? round($entry['netin'] / (1024 * 1024), 2) : null,
3422+
'out_bytes' => $entry['netout'] ?? null,
3423+
'out_mb' => isset($entry['netout']) ? round($entry['netout'] / (1024 * 1024), 2) : null,
3424+
],
3425+
3426+
// Disk I/O Metrics
3427+
'disk' => [
3428+
'read_bytes' => $entry['diskread'] ?? null,
3429+
'read_mb' => isset($entry['diskread']) ? round($entry['diskread'] / (1024 * 1024), 2) : null,
3430+
'write_bytes' => $entry['diskwrite'] ?? null,
3431+
'write_mb' => isset($entry['diskwrite']) ? round($entry['diskwrite'] / (1024 * 1024), 2) : null,
3432+
]
3433+
];
3434+
}, $response['data']);
3435+
3436+
$successResponse = [
3437+
'node' => $node,
3438+
'vmid' => $vmid,
3439+
'metrics' => $formattedMetrics,
3440+
'summary' => [
3441+
'latest_cpu_usage' => end($formattedMetrics)['cpu']['usage_percentage'] ?? null,
3442+
'latest_memory_used_gb' => end($formattedMetrics)['memory']['used_gb'] ?? null,
3443+
'latest_network_in_mb' => end($formattedMetrics)['network']['in_mb'] ?? null,
3444+
'latest_network_out_mb' => end($formattedMetrics)['network']['out_mb'] ?? null,
3445+
]
3446+
];
3447+
3448+
return ResponseHelper::generate(true, 'Metrics retrieved successfully', $successResponse);
3449+
3450+
} catch (Exception $e) {
3451+
return ResponseHelper::generate(
3452+
false,
3453+
'Failed to fetch metrics: ' . $e->getMessage(),
3454+
[]
3455+
);
3456+
}
33443457
}
33453458
}

0 commit comments

Comments
 (0)