@@ -3326,20 +3326,133 @@ public function deleteDiskType(string $node, string $type, $name)
3326
3326
* QEMU monitor commands...
3327
3327
* @throws Exception
3328
3328
*/
3329
- public function vmMonitor (string $ node , int $ vmid )
3329
+ public function vmMonitor (string $ node , int $ vmid, $ params )
3330
3330
{
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 );
3333
3333
3334
3334
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 ' ]);
3336
3336
}
3337
3337
3338
3338
$ successResponse = [
3339
3339
'node ' => $ node ,
3340
3340
'data ' => $ response ['data ' ]
3341
3341
];
3342
3342
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
+ }
3344
3457
}
3345
3458
}
0 commit comments