Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts	(working copy)
@@ -224,7 +224,7 @@
             component: AvxDevices,
           },
           {
-            path: 'devices/details/:deviceName/:deviceId',
+            path: 'devices/details/:deviceId/:deviceIp/:deviceName',
             component: AvxDeviceDetails,
           },
           {
@@ -232,7 +232,7 @@
             component: AvxInstancesOverview
           },
           {
-            path: 'devices/instances/details/:deviceName/:deviceId/:instanceName',
+            path: 'instances/details/:deviceId/:deviceName/:instanceName/:status',
             component: AvxVaInstanceDetails,
           },
         ]
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/avx-device-detail-overview.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/avx-device-detail-overview.html	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/avx-device-detail-overview.html	(working copy)
@@ -1,3 +1,13 @@
+<div class="button-container">
+  <button mat-raised-button (click)="showWebInterface()">
+    <fa-icon [icon]="['fas', 'tv']"></fa-icon>
+    Show Web Interface
+  </button>&nbsp;&nbsp;
+  <button mat-raised-button (click)="showWebConsole()">
+    <fa-icon [icon]="['fas', 'terminal']"></fa-icon>
+    Show Web Console
+  </button>
+</div>
 <mat-grid-list cols="3" rowHeight="100px">
   <mat-grid-tile colspan="1" rowspan="3">
     <mat-card class="dashboard-card" appearance="outlined">
@@ -48,7 +58,9 @@
       <mat-card-content class="card-content-wrapper">
         <div class="card-header-row-1">
           <mat-card-title class="card-title-1">
-            <span class="card-title-text">CPU Threads ({{chartMeta?.cpu}})</span>
+            <span class="card-title-text">CPU Threads ({{ chartMeta?.cpu }})</span>
+            <fa-icon [icon]="['fas', 'expand']" class="fa-1x a-link" matTooltip="Expand"
+                     (click)="enlargeSystemLoad('cpu')"></fa-icon>
           </mat-card-title>
         </div>
         <div class="chart-flex-container">
@@ -62,7 +74,9 @@
       <mat-card-content class="card-content-wrapper">
         <div class="card-header-row-1">
           <mat-card-title class="card-title-1">
-            <span class="card-title-text">Memory ({{chartMeta?.memory}})</span>
+            <span class="card-title-text">Memory ({{ chartMeta?.memory }})</span>
+            <fa-icon [icon]="['fas', 'expand']" class="fa-1x a-link" matTooltip="Expand"
+                     (click)="enlargeSystemLoad('memory')"></fa-icon>
           </mat-card-title>
         </div>
         <div class="chart-flex-container">
@@ -76,7 +90,9 @@
       <mat-card-content class="card-content-wrapper">
         <div class="card-header-row-1">
           <mat-card-title class="card-title-1">
-            <span class="card-title-text">Traffic Interface VF ({{chartMeta?.port}})</span>
+            <span class="card-title-text">Traffic Interface VF ({{ chartMeta?.port }})</span>
+            <fa-icon [icon]="['fas', 'expand']" class="fa-1x a-link" matTooltip="Expand"
+                     (click)="enlargeSystemLoad('ports')"></fa-icon>
           </mat-card-title>
         </div>
         <div class="chart-flex-container">
@@ -90,7 +106,9 @@
       <mat-card-content class="card-content-wrapper">
         <div class="card-header-row-1">
           <mat-card-title class="card-title-1">
-            <span class="card-title-text">SSL Card VF ({{chartMeta?.ssl}})</span>
+            <span class="card-title-text">SSL Card VF ({{ chartMeta?.ssl }})</span>
+            <fa-icon [icon]="['fas', 'expand']" class="fa-1x a-link" matTooltip="Expand"
+                     (click)="enlargeSystemLoad('ssl')"></fa-icon>
           </mat-card-title>
         </div>
         <div class="chart-flex-container">
@@ -104,7 +122,9 @@
       <mat-card-content class="card-content-wrapper">
         <div class="card-header-row-1">
           <mat-card-title class="card-title-1">
-            <span class="card-title-text">Disk Usage({{chartMeta?.disk}})</span>
+            <span class="card-title-text">Disk Usage ({{ chartMeta?.disk }})</span>
+            <fa-icon [icon]="['fas', 'expand']" class="fa-1x a-link" matTooltip="Expand"
+                     (click)="enlargeSystemLoad('disk')"></fa-icon>
           </mat-card-title>
         </div>
         <div class="chart-flex-container">
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/avx-device-detail-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/avx-device-detail-overview.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/avx-device-detail-overview.ts	(working copy)
@@ -1,12 +1,14 @@
-import {Component, OnInit} from '@angular/core';
+import {Component, inject, OnInit} from '@angular/core';
 import {AvxService} from '../../../services/avx-service';
 import {NotificationService} from '../../../services/notification';
-import {ActivatedRoute} from '@angular/router';
+import {ActivatedRoute, Router} from '@angular/router';
 import {take} from 'rxjs/operators';
 import {SharedModule} from '../../../shared/shared-module';
 import {MatTableDataSource} from '@angular/material/table';
 import {UtilsService} from '../../../services/utils-service';
 import {EChartsOption} from 'echarts';
+import {ChartOptions} from '../../../services/chart-options';
+import {MAT_DIALOG_DATA, MatDialog, MatDialogConfig, MatDialogRef} from '@angular/material/dialog';
 
 @Component({
   selector: 'app-avx-device-detail-overview',
@@ -20,6 +22,7 @@
   dataSource = new MatTableDataSource([]);
   deviceName: any = '';
   deviceId: any = '';
+  deviceIp: any = '';
   chartOption1: EChartsOption = {};
   chartOption2: EChartsOption = {};
   chartOption3: EChartsOption = {};
@@ -33,12 +36,15 @@
     private _avx: AvxService,
     private _notification: NotificationService,
     private _route: ActivatedRoute,
-    private _utils: UtilsService
+    private _utils: UtilsService,
+    private _chartOptions: ChartOptions,
+    private _router: Router,
   ) {
   }
 
   ngOnInit() {
     this.deviceName = this._route.snapshot.paramMap.get('deviceName');
+    this.deviceIp = this._route.snapshot.paramMap.get('deviceIp');
     this.deviceId = this._route.snapshot.paramMap.get('deviceId');
     setTimeout(() => {
       this.getAVXDeviceSystemInfoOverview();
@@ -87,1338 +93,233 @@
   }
 
   chartMeta: any = {};
+  deviceMeta: any = {};
 
   updateChartOption(_data: any) {
 
     _data?.cpu_thread.push(["Reserved", _data?.cpu_left_dedicated])
-    this.chartOption4 = {
-      tooltip: {
-        trigger: 'item'
-      },
-      series: [
-        {
-          type: 'pie',
-          radius: ['40%', '70%'],
-          avoidLabelOverlap: false,
-          label: {
-            show: false,
-            position: 'center'
-          },
-          labelLine: {
-            show: false
-          },
+    this.deviceMeta.cpu = this.convertApiResponseToChartData(_data?.cpu_thread).map((item: any) => {
+      if (item.name === 'Reserved') {
+        return {
+          ...item,
           itemStyle: {
-            borderColor: '#fff',
-            borderWidth: 2
-          },
-          data: this.convertApiResponseToChartData(_data?.cpu_thread).map((item: any) => {
-            if (item.name === 'Reserved') {
-              return {
-                ...item,
-                itemStyle: {
-                  color: 'orange'
-                }
-              };
-            } else if (item.name === 'Available') {
-              return {
-                ...item,
-                itemStyle: {
-                  color: 'green'
-                }
-              };
-            } else {
-              return {
-                ...item,
-                itemStyle: {
-                  color: '#5470c6'
-                }
-              };
-            }
-          })
-        }
-      ]
-    };
+            color: 'orange'
+          }
+        };
+      } else if (item.name === 'Available') {
+        return {
+          ...item,
+          itemStyle: {
+            color: 'green'
+          }
+        };
+      } else {
+        return {
+          ...item,
+          itemStyle: {
+            color: '#5470c6'
+          }
+        };
+      }
+    })
     this.chartMeta.cpu = `${_data.cpu_used} / ${_data?.cpu_all}`;
+    this.chartOption4 = this._chartOptions.customDoughnutChartOptions('CPU', this.deviceMeta.cpu);
 
     _data?.memory.push(["Reserved", _data?.memory_reserved])
     _data?.memory.push(["Available", _data?.memory_left])
-    this.chartOption5 = {
-      tooltip: {
-        trigger: 'item'
-      },
-      series: [
-        {
-          type: 'pie',
-          radius: ['40%', '70%'],
-          avoidLabelOverlap: false,
-          label: {
-            show: false,
-            position: 'center'
-          },
-          labelLine: {
-            show: false
-          },
+
+    this.deviceMeta.memory = this.convertApiResponseToChartData(_data?.memory).map((item: any) => {
+      if (item.name === 'Reserved') {
+        return {
+          ...item,
           itemStyle: {
-            borderColor: '#fff',
-            borderWidth: 2
-          },
-          data: this.convertApiResponseToChartData(_data?.memory).map((item: any) => {
-            if (item.name === 'Reserved') {
-              return {
-                ...item,
-                itemStyle: {
-                  color: 'orange'
-                }
-              };
-            } else if (item.name === 'Available') {
-              return {
-                ...item,
-                itemStyle: {
-                  color: 'green'
-                }
-              };
-            } else {
-              return {
-                ...item,
-                itemStyle: {
-                  color: '#5470c6'
-                }
-              };
-            }
-          })
-        }
-      ]
-    };
+            color: 'orange'
+          }
+        };
+      } else if (item.name === 'Available') {
+        return {
+          ...item,
+          itemStyle: {
+            color: 'green'
+          }
+        };
+      } else {
+        return {
+          ...item,
+          itemStyle: {
+            color: '#5470c6'
+          }
+        };
+      }
+    })
     this.chartMeta.memory = `${_data.memory_used + _data?.memory_reserved} / ${_data?.memory_all}`;
+    this.chartOption5 = this._chartOptions.customDoughnutChartOptions('Memory', this.deviceMeta.memory);
 
     _data?.port_vf.push(["Available", _data?.port_vf_left])
-    this.chartOption6 = {
-      tooltip: {
-        trigger: 'item'
-      },
-      series: [
-        {
-          type: 'pie',
-          radius: ['40%', '70%'],
-          avoidLabelOverlap: false,
-          label: {
-            show: false,
-            position: 'center'
-          },
-          labelLine: {
-            show: false
-          },
+
+    this.deviceMeta.ports = this.convertApiResponseToChartData(_data?.port_vf).map((item: any) => {
+      if (item.name === 'Reserved') {
+        return {
+          ...item,
           itemStyle: {
-            borderColor: '#fff',
-            borderWidth: 2
-          },
-          data: this.convertApiResponseToChartData(_data?.port_vf).map((item: any) => {
-            if (item.name === 'Reserved') {
-              return {
-                ...item,
-                itemStyle: {
-                  color: 'orange'
-                }
-              };
-            } else if (item.name === 'Available') {
-              return {
-                ...item,
-                itemStyle: {
-                  color: 'green'
-                }
-              };
-            } else {
-              return {
-                ...item,
-                itemStyle: {
-                  color: '#5470c6'
-                }
-              };
-            }
-          })
-        }
-      ]
-    };
+            color: 'orange'
+          }
+        };
+      } else if (item.name === 'Available') {
+        return {
+          ...item,
+          itemStyle: {
+            color: 'green'
+          }
+        };
+      } else {
+        return {
+          ...item,
+          itemStyle: {
+            color: '#5470c6'
+          }
+        };
+      }
+    })
     this.chartMeta.port = `${_data.port_vf_used} / ${_data?.port_vf_all}`;
+    this.chartOption6 = this._chartOptions.customDoughnutChartOptions('Ports', this.deviceMeta.ports);
 
     _data?.ssl_vf.push(["Available", _data?.ssl_vf_left])
-    this.chartOption7 = {
-      tooltip: {
-        trigger: 'item',
-        formatter: (params: any) => {
-          const name = params.name;
-          const value = params.value;
-          const details = _data?.ssl_vf_used_detail[name];
-          if (details) {
-            return `${name} - S: ${details.shared}, D: ${details.dedicated}`;
+
+    this.deviceMeta.ssl = this.convertApiResponseToChartData(_data?.ssl_vf).map((item: any) => {
+      if (item.name === 'Reserved') {
+        return {
+          ...item,
+          itemStyle: {
+            color: 'orange'
           }
-          return `${name}: ${value}`;
-        }
-      },
-      series: [
-        {
-          type: 'pie',
-          radius: ['40%', '70%'],
-          avoidLabelOverlap: false,
-          label: {
-            show: false,
-            position: 'center'
-          },
-          labelLine: {
-            show: false
-          },
+        };
+      } else if (item.name === 'Available') {
+        return {
+          ...item,
           itemStyle: {
-            borderColor: '#fff',
-            borderWidth: 2
-          },
-          data: this.convertApiResponseToChartData(_data?.ssl_vf).map((item: any) => {
-            if (item.name === 'Reserved') {
-              return {
-                ...item,
-                itemStyle: {
-                  color: 'orange'
-                }
-              };
-            } else if (item.name === 'Available') {
-              return {
-                ...item,
-                itemStyle: {
-                  color: 'green'
-                }
-              };
-            } else {
-              return {
-                ...item,
-                itemStyle: {
-                  color: '#5470c6'
-                }
-              };
-            }
-          })
-        }
-      ]
-    };
+            color: 'green'
+          }
+        };
+      } else {
+        return {
+          ...item,
+          itemStyle: {
+            color: '#5470c6'
+          }
+        };
+      }
+    })
     this.chartMeta.ssl = `${_data.ssl_vf_used} / ${_data?.ssl_vf_all}`;
+    this.chartOption7 = this._chartOptions.customDoughnutChartOptions('SSL', this.deviceMeta.ssl);
 
-    this.chartOption8 = {
-      tooltip: {
-        trigger: 'item',
-        formatter: '{b} : {c} GB',
-        textStyle: {
-          fontSize: 12
-        }
-      },
-      series: [
-        {
-          name: 'Disk Usage',
-          type: 'pie',
-          radius: ['40%', '70%'],
-          avoidLabelOverlap: false,
-          label: {
-            show: false,
-            position: 'center'
-          },
-          labelLine: {
-            show: false
-          },
-          data: [
-            {name: 'Available', value: _data?.disk_left},
-            {name: 'Used', value: _data?.disk_used},
-          ]
-        }
-      ]
-    };
+    this.deviceMeta.disk = [
+      {name: 'Available', value: _data?.disk_left},
+      {name: 'Used', value: _data?.disk_used},
+    ]
     this.chartMeta.disk = `${_data.disk_used} / ${_data?.disk_total}`;
+    this.chartOption8 = this._chartOptions.customDoughnutChartOptions('Disk Usage', this.deviceMeta.disk);
   }
 
   updateStatisticsCharts(_data: any) {
-
     _data.throughput = {
-      sent: [
-        [
-          "2025-09-01T06:13:20Z",
-          22764.8
-        ],
-        [
-          "2025-09-01T06:13:30Z",
-          91184
-        ],
-        [
-          "2025-09-01T06:13:40Z",
-          30636
-        ],
-        [
-          "2025-09-01T06:13:50Z",
-          77057.6
-        ],
-        [
-          "2025-09-01T06:14:00Z",
-          53998.4
-        ],
-        [
-          "2025-09-01T06:14:10Z",
-          26018.4
-        ],
-        [
-          "2025-09-01T06:14:20Z",
-          39848
-        ],
-        [
-          "2025-09-01T06:14:30Z",
-          85203.2
-        ],
-        [
-          "2025-09-01T06:14:40Z",
-          30274.4
-        ],
-        [
-          "2025-09-01T06:14:50Z",
-          75187.2
-        ],
-        [
-          "2025-09-01T06:15:00Z",
-          53441.6
-        ],
-        [
-          "2025-09-01T06:15:10Z",
-          28653.6
-        ],
-        [
-          "2025-09-01T06:15:20Z",
-          43352
-        ],
-        [
-          "2025-09-01T06:15:30Z",
-          86523.2
-        ],
-        [
-          "2025-09-01T06:15:40Z",
-          29900
-        ],
-        [
-          "2025-09-01T06:15:50Z",
-          74057.6
-        ],
-        [
-          "2025-09-01T06:16:00Z",
-          57915.2
-        ],
-        [
-          "2025-09-01T06:16:10Z",
-          31132
-        ],
-        [
-          "2025-09-01T06:16:20Z",
-          40164.8
-        ],
-        [
-          "2025-09-01T06:16:30Z",
-          87473.6
-        ],
-        [
-          "2025-09-01T06:16:40Z",
-          29352.8
-        ],
-        [
-          "2025-09-01T06:16:50Z",
-          107523.2
-        ],
-        [
-          "2025-09-01T06:17:00Z",
-          80985.6
-        ],
-        [
-          "2025-09-01T06:17:10Z",
-          26631.2
-        ],
-        [
-          "2025-09-01T06:17:20Z",
-          46208
-        ],
-        [
-          "2025-09-01T06:17:30Z",
-          84646.4
-        ],
-        [
-          "2025-09-01T06:17:40Z",
-          28506.4
-        ],
-        [
-          "2025-09-01T06:17:50Z",
-          73884.8
-        ],
-        [
-          "2025-09-01T06:18:00Z",
-          50097.6
-        ],
-        [
-          "2025-09-01T06:18:10Z",
-          27802.4
-        ],
-        [
-          "2025-09-01T06:18:20Z",
-          48852.8
-        ],
-        [
-          "2025-09-01T06:18:30Z",
-          82992
-        ],
-        [
-          "2025-09-01T06:18:40Z",
-          31167.2
-        ],
-        [
-          "2025-09-01T06:18:50Z",
-          81974.4
-        ],
-        [
-          "2025-09-01T06:19:00Z",
-          50172.8
-        ],
-        [
-          "2025-09-01T06:19:10Z",
-          27991.2
-        ],
-        [
-          "2025-09-01T06:19:20Z",
-          44648
-        ],
-        [
-          "2025-09-01T06:19:30Z",
-          81387.2
-        ],
-        [
-          "2025-09-01T06:19:40Z",
-          27821.6
-        ],
-        [
-          "2025-09-01T06:19:50Z",
-          78454.4
-        ],
-        [
-          "2025-09-01T06:20:00Z",
-          52660.8
-        ],
-        [
-          "2025-09-01T06:20:10Z",
-          24552.8
-        ],
-        [
-          "2025-09-01T06:20:20Z",
-          49472
-        ],
-        [
-          "2025-09-01T06:20:30Z",
-          82755.2
-        ],
-        [
-          "2025-09-01T06:20:40Z",
-          30317.6
-        ],
-        [
-          "2025-09-01T06:20:50Z",
-          75843.2
-        ],
-        [
-          "2025-09-01T06:21:00Z",
-          51331.2
-        ],
-        [
-          "2025-09-01T06:21:10Z",
-          29304.8
-        ],
-        [
-          "2025-09-01T06:21:20Z",
-          45600
-        ],
-        [
-          "2025-09-01T06:21:30Z",
-          79865.6
-        ],
-        [
-          "2025-09-01T06:21:40Z",
-          30898.4
-        ],
-        [
-          "2025-09-01T06:21:50Z",
-          83446.4
-        ],
-        [
-          "2025-09-01T06:22:00Z",
-          93699.2
-        ],
-        [
-          "2025-09-01T06:22:10Z",
-          84384.8
-        ],
-        [
-          "2025-09-01T06:22:20Z",
-          78492.8
-        ],
-        [
-          "2025-09-01T06:22:30Z",
-          119888
-        ],
-        [
-          "2025-09-01T06:22:40Z",
-          79095.2
-        ],
-        [
-          "2025-09-01T06:22:50Z",
-          115284.8
-        ],
-        [
-          "2025-09-01T06:23:00Z",
-          72753.6
-        ]
-      ],
-      received: [
-        [
-          "2025-09-01T06:13:20Z",
-          6688
-        ],
-        [
-          "2025-09-01T06:13:30Z",
-          31003.2
-        ],
-        [
-          "2025-09-01T06:13:40Z",
-          9921.6
-        ],
-        [
-          "2025-09-01T06:13:50Z",
-          26492
-        ],
-        [
-          "2025-09-01T06:14:00Z",
-          20560
-        ],
-        [
-          "2025-09-01T06:14:10Z",
-          9872
-        ],
-        [
-          "2025-09-01T06:14:20Z",
-          14263.2
-        ],
-        [
-          "2025-09-01T06:14:30Z",
-          28508.8
-        ],
-        [
-          "2025-09-01T06:14:40Z",
-          10624
-        ],
-        [
-          "2025-09-01T06:14:50Z",
-          24696.8
-        ],
-        [
-          "2025-09-01T06:15:00Z",
-          19360
-        ],
-        [
-          "2025-09-01T06:15:10Z",
-          13137.6
-        ],
-        [
-          "2025-09-01T06:15:20Z",
-          13656.8
-        ],
-        [
-          "2025-09-01T06:15:30Z",
-          30264
-        ],
-        [
-          "2025-09-01T06:15:40Z",
-          10220.8
-        ],
-        [
-          "2025-09-01T06:15:50Z",
-          23640.8
-        ],
-        [
-          "2025-09-01T06:16:00Z",
-          22033.6
-        ],
-        [
-          "2025-09-01T06:16:10Z",
-          12547.2
-        ],
-        [
-          "2025-09-01T06:16:20Z",
-          13597.6
-        ],
-        [
-          "2025-09-01T06:16:30Z",
-          31094.4
-        ],
-        [
-          "2025-09-01T06:16:40Z",
-          8448
-        ],
-        [
-          "2025-09-01T06:16:50Z",
-          36344.8
-        ],
-        [
-          "2025-09-01T06:17:00Z",
-          31547.2
-        ],
-        [
-          "2025-09-01T06:17:10Z",
-          7668.8
-        ],
-        [
-          "2025-09-01T06:17:20Z",
-          16740
-        ],
-        [
-          "2025-09-01T06:17:30Z",
-          28779.2
-        ],
-        [
-          "2025-09-01T06:17:40Z",
-          9577.6
-        ],
-        [
-          "2025-09-01T06:17:50Z",
-          25488.8
-        ],
-        [
-          "2025-09-01T06:18:00Z",
-          17904
-        ],
-        [
-          "2025-09-01T06:18:10Z",
-          11766.4
-        ],
-        [
-          "2025-09-01T06:18:20Z",
-          17048.8
-        ],
-        [
-          "2025-09-01T06:18:30Z",
-          27993.6
-        ],
-        [
-          "2025-09-01T06:18:40Z",
-          11011.2
-        ],
-        [
-          "2025-09-01T06:18:50Z",
-          26893.6
-        ],
-        [
-          "2025-09-01T06:19:00Z",
-          18214.4
-        ],
-        [
-          "2025-09-01T06:19:10Z",
-          12939.2
-        ],
-        [
-          "2025-09-01T06:19:20Z",
-          14156
-        ],
-        [
-          "2025-09-01T06:19:30Z",
-          28691.2
-        ],
-        [
-          "2025-09-01T06:19:40Z",
-          9516.8
-        ],
-        [
-          "2025-09-01T06:19:50Z",
-          25095.2
-        ],
-        [
-          "2025-09-01T06:20:00Z",
-          23022.4
-        ],
-        [
-          "2025-09-01T06:20:10Z",
-          7769.6
-        ],
-        [
-          "2025-09-01T06:20:20Z",
-          16442.4
-        ],
-        [
-          "2025-09-01T06:20:30Z",
-          29521.6
-        ],
-        [
-          "2025-09-01T06:20:40Z",
-          8787.2
-        ],
-        [
-          "2025-09-01T06:20:50Z",
-          26077.6
-        ],
-        [
-          "2025-09-01T06:21:00Z",
-          21510.4
-        ],
-        [
-          "2025-09-01T06:21:10Z",
-          8960
-        ],
-        [
-          "2025-09-01T06:21:20Z",
-          16639.2
-        ],
-        [
-          "2025-09-01T06:21:30Z",
-          27297.6
-        ],
-        [
-          "2025-09-01T06:21:40Z",
-          10097.6
-        ],
-        [
-          "2025-09-01T06:21:50Z",
-          28476
-        ],
-        [
-          "2025-09-01T06:22:00Z",
-          31428.8
-        ],
-        [
-          "2025-09-01T06:22:10Z",
-          30582.4
-        ],
-        [
-          "2025-09-01T06:22:20Z",
-          26656.8
-        ],
-        [
-          "2025-09-01T06:22:30Z",
-          39756.8
-        ],
-        [
-          "2025-09-01T06:22:40Z",
-          26561.6
-        ],
-        [
-          "2025-09-01T06:22:50Z",
-          37727.2
-        ],
-        [
-          "2025-09-01T06:23:00Z",
-          26284.8
-        ]
-      ]
+      sent: [],
+      received: []
     }
-    _data.cpu = [
-      [
-        "2025-09-01T06:13:16.592148699Z",
-        7.849999999999994
-      ],
-      [
-        "2025-09-01T06:13:21.585804019Z",
-        9.459999999999994
-      ],
-      [
-        "2025-09-01T06:13:26.588592319Z",
-        7.3799999999999955
-      ],
-      [
-        "2025-09-01T06:13:31.591434597Z",
-        6.709999999999994
-      ],
-      [
-        "2025-09-01T06:13:36.586589723Z",
-        10.060000000000002
-      ],
-      [
-        "2025-09-01T06:13:41.588604239Z",
-        6.230000000000004
-      ],
-      [
-        "2025-09-01T06:13:46.592404576Z",
-        7.200000000000003
-      ],
-      [
-        "2025-09-01T06:13:51.588164479Z",
-        9.560000000000002
-      ],
-      [
-        "2025-09-01T06:13:56.590665664Z",
-        6.280000000000001
-      ],
-      [
-        "2025-09-01T06:14:01.583644421Z",
-        7.180000000000007
-      ],
-      [
-        "2025-09-01T06:14:06.590321668Z",
-        9.980000000000004
-      ],
-      [
-        "2025-09-01T06:14:11.592913228Z",
-        7.170000000000002
-      ],
-      [
-        "2025-09-01T06:14:16.586662482Z",
-        6.829999999999998
-      ],
-      [
-        "2025-09-01T06:14:21.591552921Z",
-        9.310000000000002
-      ],
-      [
-        "2025-09-01T06:14:26.584005273Z",
-        7.469999999999999
-      ],
-      [
-        "2025-09-01T06:14:31.586348195Z",
-        8.099999999999994
-      ],
-      [
-        "2025-09-01T06:14:36.591890166Z",
-        10.239999999999995
-      ],
-      [
-        "2025-09-01T06:14:41.585374456Z",
-        7.200000000000003
-      ],
-      [
-        "2025-09-01T06:14:46.589260204Z",
-        7.269999999999996
-      ],
-      [
-        "2025-09-01T06:14:51.594586339Z",
-        9.120000000000005
-      ],
-      [
-        "2025-09-01T06:14:56.586185042Z",
-        5.939999999999998
-      ],
-      [
-        "2025-09-01T06:15:01.588371252Z",
-        6.959999999999994
-      ],
-      [
-        "2025-09-01T06:15:06.584529005Z",
-        10.11
-      ],
-      [
-        "2025-09-01T06:15:11.586659506Z",
-        6.549999999999997
-      ],
-      [
-        "2025-09-01T06:15:16.590466387Z",
-        6.790000000000006
-      ],
-      [
-        "2025-09-01T06:15:21.584573919Z",
-        8.670000000000002
-      ],
-      [
-        "2025-09-01T06:15:26.586727474Z",
-        7.019999999999996
-      ],
-      [
-        "2025-09-01T06:15:31.590906384Z",
-        6.730000000000004
-      ],
-      [
-        "2025-09-01T06:15:36.585975561Z",
-        9.590000000000003
-      ],
-      [
-        "2025-09-01T06:15:41.588899927Z",
-        6.439999999999998
-      ],
-      [
-        "2025-09-01T06:15:46.592468377Z",
-        8.219999999999999
-      ],
-      [
-        "2025-09-01T06:15:51.587153019Z",
-        10.230000000000004
-      ],
-      [
-        "2025-09-01T06:15:56.589238192Z",
-        6.310000000000002
-      ],
-      [
-        "2025-09-01T06:16:01.593977305Z",
-        6.569999999999993
-      ],
-      [
-        "2025-09-01T06:16:06.589078936Z",
-        9.840000000000003
-      ],
-      [
-        "2025-09-01T06:16:11.590916179Z",
-        6.340000000000003
-      ],
-      [
-        "2025-09-01T06:16:16.585881247Z",
-        7.049999999999997
-      ],
-      [
-        "2025-09-01T06:16:21.590592472Z",
-        9.019999999999996
-      ],
-      [
-        "2025-09-01T06:16:26.584254701Z",
-        5.799999999999997
-      ],
-      [
-        "2025-09-01T06:16:31.588858469Z",
-        6.579999999999998
-      ],
-      [
-        "2025-09-01T06:16:36.584903954Z",
-        9.349999999999994
-      ],
-      [
-        "2025-09-01T06:16:41.586857163Z",
-        6.739999999999995
-      ],
-      [
-        "2025-09-01T06:16:46.591272308Z",
-        7.400000000000006
-      ],
-      [
-        "2025-09-01T06:16:51.58647666Z",
-        8.760000000000005
-      ],
-      [
-        "2025-09-01T06:16:56.590560953Z",
-        6.299999999999997
-      ],
-      [
-        "2025-09-01T06:17:01.584683866Z",
-        7.8700000000000045
-      ],
-      [
-        "2025-09-01T06:17:06.589264331Z",
-        10.950000000000003
-      ],
-      [
-        "2025-09-01T06:17:11.592086144Z",
-        6.200000000000003
-      ],
-      [
-        "2025-09-01T06:17:16.584354386Z",
-        6.670000000000002
-      ],
-      [
-        "2025-09-01T06:17:21.588554123Z",
-        8.730000000000004
-      ],
-      [
-        "2025-09-01T06:17:26.591148288Z",
-        5.75
-      ],
-      [
-        "2025-09-01T06:17:31.584136195Z",
-        6.430000000000007
-      ],
-      [
-        "2025-09-01T06:17:36.589100971Z",
-        9.5
-      ],
-      [
-        "2025-09-01T06:17:41.593692328Z",
-        6.230000000000004
-      ],
-      [
-        "2025-09-01T06:17:46.586095013Z",
-        7.019999999999996
-      ],
-      [
-        "2025-09-01T06:17:51.590335823Z",
-        9
-      ],
-      [
-        "2025-09-01T06:17:56.594540097Z",
-        6.739999999999995
-      ],
-      [
-        "2025-09-01T06:18:01.58855587Z",
-        6.590000000000003
-      ],
-      [
-        "2025-09-01T06:18:06.584003729Z",
-        9.780000000000001
-      ],
-      [
-        "2025-09-01T06:18:11.586997029Z",
-        5.930000000000007
-      ],
-      [
-        "2025-09-01T06:18:16.59067188Z",
-        8.650000000000006
-      ],
-      [
-        "2025-09-01T06:18:21.585339422Z",
-        10.730000000000004
-      ],
-      [
-        "2025-09-01T06:18:26.589049402Z",
-        6.849999999999994
-      ],
-      [
-        "2025-09-01T06:18:31.591983397Z",
-        6.420000000000002
-      ],
-      [
-        "2025-09-01T06:18:36.589033381Z",
-        9.379999999999995
-      ],
-      [
-        "2025-09-01T06:18:41.592569495Z",
-        5.920000000000002
-      ],
-      [
-        "2025-09-01T06:18:46.585097209Z",
-        7.040000000000006
-      ],
-      [
-        "2025-09-01T06:18:51.590326058Z",
-        9.040000000000006
-      ],
-      [
-        "2025-09-01T06:18:56.592207602Z",
-        6.299999999999997
-      ],
-      [
-        "2025-09-01T06:19:01.584566575Z",
-        6.560000000000002
-      ],
-      [
-        "2025-09-01T06:19:06.589809729Z",
-        9.959999999999994
-      ],
-      [
-        "2025-09-01T06:19:11.592770275Z",
-        7.400000000000006
-      ],
-      [
-        "2025-09-01T06:19:16.585981991Z",
-        6.769999999999996
-      ],
-      [
-        "2025-09-01T06:19:21.590752396Z",
-        9.530000000000001
-      ],
-      [
-        "2025-09-01T06:19:26.593223886Z",
-        6
-      ],
-      [
-        "2025-09-01T06:19:31.585968321Z",
-        8.370000000000005
-      ],
-      [
-        "2025-09-01T06:19:36.592431695Z",
-        10.909999999999997
-      ],
-      [
-        "2025-09-01T06:19:41.585500115Z",
-        6.150000000000006
-      ],
-      [
-        "2025-09-01T06:19:46.588459615Z",
-        6.640000000000001
-      ],
-      [
-        "2025-09-01T06:19:51.593573573Z",
-        9.129999999999995
-      ],
-      [
-        "2025-09-01T06:19:56.585916302Z",
-        6.549999999999997
-      ],
-      [
-        "2025-09-01T06:20:01.588468835Z",
-        7.280000000000001
-      ],
-      [
-        "2025-09-01T06:20:06.584967154Z",
-        9.819999999999993
-      ],
-      [
-        "2025-09-01T06:20:11.588088209Z",
-        6.329999999999998
-      ],
-      [
-        "2025-09-01T06:20:16.593030985Z",
-        6.969999999999999
-      ],
-      [
-        "2025-09-01T06:20:21.588333389Z",
-        9.599999999999994
-      ],
-      [
-        "2025-09-01T06:20:26.590695924Z",
-        6.170000000000002
-      ],
-      [
-        "2025-09-01T06:20:31.584413326Z",
-        6.409999999999997
-      ],
-      [
-        "2025-09-01T06:20:36.589163893Z",
-        9.430000000000007
-      ],
-      [
-        "2025-09-01T06:20:41.592667697Z",
-        6.590000000000003
-      ],
-      [
-        "2025-09-01T06:20:46.586573325Z",
-        8.540000000000006
-      ],
-      [
-        "2025-09-01T06:20:51.593027734Z",
-        10.5
-      ],
-      [
-        "2025-09-01T06:20:56.584648984Z",
-        6.219999999999999
-      ],
-      [
-        "2025-09-01T06:21:01.588278068Z",
-        6.8700000000000045
-      ],
-      [
-        "2025-09-01T06:21:06.592307073Z",
-        9.670000000000002
-      ],
-      [
-        "2025-09-01T06:21:11.585052667Z",
-        6.790000000000006
-      ],
-      [
-        "2025-09-01T06:21:16.589069792Z",
-        7.140000000000001
-      ],
-      [
-        "2025-09-01T06:21:21.592870389Z",
-        9.599999999999994
-      ],
-      [
-        "2025-09-01T06:21:26.584360229Z",
-        6.640000000000001
-      ],
-      [
-        "2025-09-01T06:21:31.587982183Z",
-        6.6299999999999955
-      ],
-      [
-        "2025-09-01T06:21:36.592933811Z",
-        10.420000000000002
-      ],
-      [
-        "2025-09-01T06:21:41.585139572Z",
-        6.760000000000005
-      ],
-      [
-        "2025-09-01T06:21:46.589782215Z",
-        7.3799999999999955
-      ],
-      [
-        "2025-09-01T06:21:51.583664873Z",
-        9.75
-      ],
-      [
-        "2025-09-01T06:21:56.586524372Z",
-        6.560000000000002
-      ],
-      [
-        "2025-09-01T06:22:01.589669636Z",
-        9.489999999999995
-      ],
-      [
-        "2025-09-01T06:22:06.585495473Z",
-        11.180000000000007
-      ],
-      [
-        "2025-09-01T06:22:11.589164774Z",
-        7.109999999999999
-      ],
-      [
-        "2025-09-01T06:22:16.591691475Z",
-        7.489999999999995
-      ],
-      [
-        "2025-09-01T06:22:21.58543411Z",
-        9.439999999999998
-      ],
-      [
-        "2025-09-01T06:22:26.588519894Z",
-        6.540000000000006
-      ],
-      [
-        "2025-09-01T06:22:31.59165337Z",
-        7.019999999999996
-      ],
-      [
-        "2025-09-01T06:22:36.585850994Z",
-        9.709999999999994
-      ],
-      [
-        "2025-09-01T06:22:41.589216573Z",
-        6.8799999999999955
-      ],
-      [
-        "2025-09-01T06:22:46.592113922Z",
-        7.609999999999999
-      ],
-      [
-        "2025-09-01T06:22:51.586518959Z",
-        10.11
-      ],
-      [
-        "2025-09-01T06:22:56.589741153Z",
-        6.599999999999994
-      ],
-      [
-        "2025-09-01T06:23:01.584548661Z",
-        9.930000000000007
-      ]
-    ];
-    _data.memory = [["2025-09-01T06:13:16.592260588Z", 70.14117002374628], ["2025-09-01T06:13:21.585926871Z", 70.13421637719414], ["2025-09-01T06:13:26.588698751Z", 70.13383753177565], ["2025-09-01T06:13:31.591537989Z", 70.13893361369524], ["2025-09-01T06:13:36.586724859Z", 70.132004408783], ["2025-09-01T06:13:41.588708867Z", 70.13364199865644], ["2025-09-01T06:13:46.592522086Z", 70.13744267366121], ["2025-09-01T06:13:51.588255454Z", 70.1338008693158], ["2025-09-01T06:13:56.590777328Z", 70.13325704282799], ["2025-09-01T06:14:01.583771527Z", 70.1447568344019], ["2025-09-01T06:14:06.59042958Z", 70.13213883780247], ["2025-09-01T06:14:11.593017008Z", 70.13244435830124], ["2025-09-01T06:14:16.586775697Z", 70.13785818153954], ["2025-09-01T06:14:21.591667785Z", 70.13378864849585], ["2025-09-01T06:14:26.584104046Z", 70.13271321634016], ["2025-09-01T06:14:31.586446167Z", 70.13948355059303], ["2025-09-01T06:14:36.592021702Z", 70.13113673056648], ["2025-09-01T06:14:41.585484213Z", 70.13339758225742], ["2025-09-01T06:14:46.589388717Z", 70.13784596071959], ["2025-09-01T06:14:51.594692242Z", 70.13288430781948], ["2025-09-01T06:14:56.5862942Z", 70.13149724475504], ["2025-09-01T06:15:01.588472744Z", 70.13633668945565], ["2025-09-01T06:15:06.584628942Z", 70.13384975259561], ["2025-09-01T06:15:11.58682366Z", 70.13575009009799], ["2025-09-01T06:15:16.590575154Z", 70.1348763014715], ["2025-09-01T06:15:21.584686753Z", 70.13368477152628], ["2025-09-01T06:15:26.586831273Z", 70.13232215010173], ["2025-09-01T06:15:31.591011705Z", 70.14007626036066], ["2025-09-01T06:15:36.58608956Z", 70.13511460746055], ["2025-09-01T06:15:41.588998234Z", 70.13502295131092], ["2025-09-01T06:15:46.592559186Z", 70.13562788189849], ["2025-09-01T06:15:51.587264363Z", 70.13238936461146], ["2025-09-01T06:15:56.589339233Z", 70.13262767060051], ["2025-09-01T06:16:01.594081723Z", 70.13836534556751], ["2025-09-01T06:16:06.58919583Z", 70.13039126054947], ["2025-09-01T06:16:11.591044558Z", 70.13192497345332], ["2025-09-01T06:16:16.585988474Z", 70.13466243712236], ["2025-09-01T06:16:21.590723008Z", 70.13236492297156], ["2025-09-01T06:16:26.584375318Z", 70.13068456022829], ["2025-09-01T06:16:31.588984337Z", 70.13793761686922], ["2025-09-01T06:16:36.58502312Z", 70.12965801135242], ["2025-09-01T06:16:41.586998811Z", 70.13136892614556], ["2025-09-01T06:16:46.591374391Z", 70.13648944970502], ["2025-09-01T06:16:51.586590188Z", 70.1301101816906], ["2025-09-01T06:16:56.590665075Z", 70.13077010596795], ["2025-09-01T06:17:01.584794612Z", 70.13869530770619], ["2025-09-01T06:17:06.589371201Z", 70.13274987880001], ["2025-09-01T06:17:11.592215164Z", 70.13128949081587], ["2025-09-01T06:17:16.584460056Z", 70.1362205916661], ["2025-09-01T06:17:21.588685686Z", 70.13284764535963], ["2025-09-01T06:17:26.591250963Z", 70.13248102076109], ["2025-09-01T06:17:31.58427035Z", 70.13854865786678], ["2025-09-01T06:17:36.589225288Z", 70.13691106799335], ["2025-09-01T06:17:41.593797443Z", 70.13116728261636], ["2025-09-01T06:17:46.586194625Z", 70.13768709006023], ["2025-09-01T06:17:51.590439979Z", 70.1333548093876], ["2025-09-01T06:17:56.594673312Z", 70.13171721951416], ["2025-09-01T06:18:01.588661948Z", 70.14120057579615], ["2025-09-01T06:18:06.58411037Z", 70.13416138350436], ["2025-09-01T06:18:11.587119244Z", 70.13388030464549], ["2025-09-01T06:18:16.590782293Z", 70.13890306164537], ["2025-09-01T06:18:21.585446534Z", 70.13501073049096], ["2025-09-01T06:18:26.589180107Z", 70.1357745317379], ["2025-09-01T06:18:31.592092116Z", 70.13809037711862], ["2025-09-01T06:18:36.589147797Z", 70.13108784728668], ["2025-09-01T06:18:41.592704314Z", 70.13248102076109], ["2025-09-01T06:18:46.585207504Z", 70.13488241188148], ["2025-09-01T06:18:51.590430315Z", 70.13340980307737], ["2025-09-01T06:18:56.592327191Z", 70.1334525759472], ["2025-09-01T06:19:01.584694975Z", 70.1412616798959], ["2025-09-01T06:19:06.589948681Z", 70.13449745605301], ["2025-09-01T06:19:11.592934332Z", 70.13296374314916], ["2025-09-01T06:19:16.586090094Z", 70.14154275875478], ["2025-09-01T06:19:21.590857961Z", 70.13416138350436], ["2025-09-01T06:19:26.593331073Z", 70.1334036926674], ["2025-09-01T06:19:31.586083334Z", 70.13913525722442], ["2025-09-01T06:19:36.592542087Z", 70.13705771783275], ["2025-09-01T06:19:41.585613885Z", 70.13276821002995], ["2025-09-01T06:19:46.588568998Z", 70.1370454970128], ["2025-09-01T06:19:51.593691669Z", 70.1343263645737], ["2025-09-01T06:19:56.586031833Z", 70.13529791975981], ["2025-09-01T06:20:01.588572724Z", 70.14211713729249], ["2025-09-01T06:20:06.585075479Z", 70.13334258856764], ["2025-09-01T06:20:11.588107574Z", 70.13261544978056], ["2025-09-01T06:20:16.593160488Z", 70.1372226989021], ["2025-09-01T06:20:21.588354889Z", 70.13259711855063], ["2025-09-01T06:20:26.590824087Z", 70.13502295131092], ["2025-09-01T06:20:31.584522876Z", 70.14283205525962], ["2025-09-01T06:20:36.589296898Z", 70.13480908696177], ["2025-09-01T06:20:41.592788834Z", 70.13478464532187], ["2025-09-01T06:20:46.586693592Z", 70.13872585975606], ["2025-09-01T06:20:51.593136846Z", 70.13392307751532], ["2025-09-01T06:20:56.584779718Z", 70.13434469580363], ["2025-09-01T06:21:01.588410698Z", 70.14300314673892], ["2025-09-01T06:21:06.592419466Z", 70.1348763014715], ["2025-09-01T06:21:11.585170492Z", 70.13414916268441], ["2025-09-01T06:21:16.589195824Z", 70.14066897012829], ["2025-09-01T06:21:21.592989107Z", 70.13248713117108], ["2025-09-01T06:21:26.584469706Z", 70.13386808382553], ["2025-09-01T06:21:31.588087395Z", 70.13837756638746], ["2025-09-01T06:21:36.593044502Z", 70.13366032988637], ["2025-09-01T06:21:41.585244124Z", 70.13529180934984], ["2025-09-01T06:21:46.589888196Z", 70.13871363893612], ["2025-09-01T06:21:51.583784509Z", 70.13197385673313], ["2025-09-01T06:21:56.586660784Z", 70.13313483462848], ["2025-09-01T06:22:01.589771206Z", 70.14270373665012], ["2025-09-01T06:22:06.58559842Z", 70.13419804596421], ["2025-09-01T06:22:11.589247604Z", 70.13550567369897], ["2025-09-01T06:22:16.591797549Z", 70.14108447800662], ["2025-09-01T06:22:21.585551585Z", 70.13570731722817], ["2025-09-01T06:22:26.588665672Z", 70.13683163266367], ["2025-09-01T06:22:31.591772094Z", 70.13972185658209], ["2025-09-01T06:22:36.585968421Z", 70.13563399230846], ["2025-09-01T06:22:41.589328654Z", 70.13586618788753], ["2025-09-01T06:22:46.592231576Z", 70.14180550638372], ["2025-09-01T06:22:51.586641896Z", 70.13337925102749], ["2025-09-01T06:22:56.589846282Z", 70.13572564845809], ["2025-09-01T06:23:01.584662533Z", 70.14054676192877]]
+    _data.cpu = [];
+    _data.memory = []
+
+    this.chartOption1 = this._chartOptions.historicalThroughputChartOptions(_data.throughput.received, _data.throughput.sent)
+    this.chartOption2 = this._chartOptions.plotSingleLineChartOptions({label: 'CPU'}, _data?.cpu)
+    this.chartOption3 = this._chartOptions.plotSingleLineChartOptions({label: 'Memory'}, _data?.memory)
+  }
+
+  dialog = inject(MatDialog);
+  dialogConfig = new MatDialogConfig();
+
+  enlargeSystemLoad(type: string = 'cpu') {
+    if (type === 'cpu') {
+      this.dialogConfig.data = {
+        title: `CPU Threads (${this.chartMeta?.cpu})`,
+        chartData: this.deviceMeta.cpu,
+        chartLabel: 'CPU Threads',
+      };
+    } else if (type === 'memory') {
+      this.dialogConfig.data = {
+        title: `Memory (${this.chartMeta?.memory})`,
+        chartData: this.deviceMeta.memory,
+        chartLabel: 'Memory',
+      };
+    } else if (type === 'ports') {
+      this.dialogConfig.data = {
+        title: `Traffic Interface VF (${this.chartMeta?.port})`,
+        chartData: this.deviceMeta.ports,
+        chartLabel: 'Traffic Interface VF',
+      };
+    } else if (type === 'ssl') {
+      this.dialogConfig.data = {
+        title: `SSL Card VF (${this.chartMeta?.ssl})`,
+        chartData: this.deviceMeta.ssl,
+        chartLabel: 'SSL Card VF',
+      };
+    } else if (type === 'disk') {
+      this.dialogConfig.data = {
+        title: `Disk Usage (${this.chartMeta?.disk})`,
+        chartData: this.deviceMeta.disk,
+        chartLabel: 'Disk Usage',
+      };
+    }
+    this.dialogConfig.width = '60%';
+    const dialogRef = this.dialog.open(EnlargeAVXDevicesDialog, this.dialogConfig);
+    dialogRef.afterClosed().subscribe((isAdded: boolean) => {
+    })
+  }
+
+  showWebInterface() {
+    if (!this.deviceIp) {
+      console.warn(`Cannot open WebUI for ${this.deviceName}. Missing IP (${this.deviceIp}).`);
+      return;
+    }
+    const url = `https://${this.deviceIp}:8888`;
+    try {
+      window.open(url, '_blank', 'noopener,noreferrer');
+    } catch (error) {
+      this._notification.showError('Failed to open WebUI');
+      console.error('Failed to open new window.', error);
+    }
+  }
 
-    this.chartOption1 = {
-      tooltip: {
-        trigger: 'axis',
-        formatter: function (params: any) {
-          if (Array.isArray(params) && params.length > 0) {
-            const date = new Date(params[0].value[0]);
-            const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
+  showWebConsole() {
+    const url = this._router.serializeUrl(
+      this._router.createUrlTree(['/inventory/web-console'], {
+        queryParams: {device_id: this.deviceId, device_name: this.deviceName}
+      })
+    );
+    window.open(url, '_blank');
+  }
+}
 
-            let tooltipContent = `${formattedDate}<br/>`;
-            params.forEach(param => {
-              if (param.value && Array.isArray(param.value) && param.value.length === 2) {
-                const valueInKbps = (param.value[1] / 1000).toFixed(1);
-                const dot = `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${param.color};"></span>`;
-                tooltipContent += `${dot} ${param.seriesName} ${valueInKbps}Kbps<br/>`;
-              }
-            });
-            return tooltipContent;
-          }
-          return '';
-        }
-      },
-      legend: {
-        data: ['Sent', 'Received']
-      },
-      xAxis: {
-        type: 'time',
-        axisLabel: {
-          formatter: '{HH}:{mm}:{ss}'
-        }
-      },
-      yAxis: {
-        type: 'value',
-        name: 'Value (bps)'
-      },
-      series: [
-        {
-          name: 'Sent',
-          data: _data?.throughput?.sent,
-          type: 'line'
-        },
-        {
-          name: 'Received',
-          data: _data?.throughput?.received,
-          type: 'line',
-        }
-      ],
-    }
+@Component({
+  selector: 'enlarge-avx-devices',
+  templateUrl: './enlarge-avx-devices.html',
+  imports: [SharedModule]
+})
+export class EnlargeAVXDevicesDialog implements OnInit {
 
-    this.chartOption2 = {
-      tooltip: {
-        trigger: 'axis',
-        formatter: function (params: any) {
-          if (Array.isArray(params) && params.length > 0) {
-            const date = new Date(params[0].value[0]);
-            const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
+  readonly data = inject(MAT_DIALOG_DATA);
+  readonly dialogRef = inject(MatDialogRef<EnlargeAVXDevicesDialog>);
+  chartOption1: EChartsOption = {};
 
-            let tooltipContent = `${formattedDate}<br/>`;
-            params.forEach(param => {
-              if (param.value && Array.isArray(param.value) && param.value.length === 2) {
-                const value = (param.value[1]).toFixed(1);
-                const dot = `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${param.color};"></span>`;
-                tooltipContent += `${dot} ${param.seriesName} ${value}%<br/>`;
-              }
-            });
-            return tooltipContent;
-          }
-          return '';
-        }
-      },
-      legend: {
-        data: ['CPU']
-      },
-      xAxis: {
-        type: 'time',
-        axisLabel: {
-          formatter: '{HH}:{mm}:{ss}'
-        }
-      },
-      yAxis: {
-        type: 'value',
-        name: 'Value (%)'
-      },
-      series: [
-        {
-          name: 'CPU',
-          data: _data?.cpu,
-          type: 'line'
-        }
-      ],
-    }
+  constructor(
+    private _chartOptions: ChartOptions,
+  ) {
+  }
 
-    this.chartOption3 = {
-      tooltip: {
-        trigger: 'axis',
-        formatter: function (params: any) {
-          if (Array.isArray(params) && params.length > 0) {
-            const date = new Date(params[0].value[0]);
-            const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
+  ngOnInit() {
+    this.chartOption1 = this._chartOptions.pieChartOptions(this.data.chartLabel, this.data.chartData);
+  }
 
-            let tooltipContent = `${formattedDate}<br/>`;
-            params.forEach(param => {
-              if (param.value && Array.isArray(param.value) && param.value.length === 2) {
-                const value = (param.value[1]).toFixed(1);
-                const dot = `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${param.color};"></span>`;
-                tooltipContent += `${dot} ${param.seriesName} ${value}%<br/>`;
-              }
-            });
-            return tooltipContent;
-          }
-          return '';
-        }
-      },
-      legend: {
-        data: ['Memory']
-      },
-      xAxis: {
-        type: 'time',
-        axisLabel: {
-          formatter: '{HH}:{mm}:{ss}'
-        }
-      },
-      yAxis: {
-        type: 'value',
-        name: 'Value (%)'
-      },
-      series: [
-        {
-          name: 'Memory',
-          data: _data?.memory,
-          type: 'line'
-        }
-      ],
-    }
+  onCancel() {
+    this.dialogRef.close();
   }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/enlarge-avx-devices.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/enlarge-avx-devices.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-detail-overview/enlarge-avx-devices.html	(working copy)
@@ -0,0 +1,12 @@
+<h2 mat-dialog-title>{{data?.title}}</h2>
+<mat-dialog-content>
+  <div echarts [options]="chartOption1" class="chart-container"></div>
+</mat-dialog-content>
+<mat-dialog-actions>
+  <button
+    mat-button
+    color="basic"
+    (click)="onCancel()">
+    Close
+  </button>
+</mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-details/avx-device-details.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-details/avx-device-details.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-device-details/avx-device-details.ts	(working copy)
@@ -19,6 +19,7 @@
 export class AvxDeviceDetails implements OnInit {
 
   deviceName: any = '';
+  deviceIp: any = '';
   deviceId: any = '';
 
   tabDefinitions: TabDefinition[] = [
@@ -36,7 +37,9 @@
 
   ngOnInit() {
     this.deviceName = this._route.snapshot.paramMap.get('deviceName');
+    this.deviceIp = this._route.snapshot.paramMap.get('deviceIp');
     this.deviceId = this._route.snapshot.paramMap.get('deviceId');
+    console.log(this.deviceIp, this.deviceId, this.deviceName)
   }
 
   navigateToAVXDevices() {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-devices/avx-devices.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-devices/avx-devices.html	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-devices/avx-devices.html	(working copy)
@@ -77,8 +77,11 @@
               <div class="row-action a-link">
                 <fa-icon [icon]="['fas', 'id-badge']" size="lg" matTooltip="Show License"
                          (click)="showLicense(element)"></fa-icon>
-                <fa-icon [icon]="['fas', 'tv']" size="lg" matTooltip="Show Web Interface"
-                         (click)="showWebInterface(element)"></fa-icon>
+                <a target="_blank"
+                   rel="noopener noreferrer"
+                   [href]="element?.ip ? 'https://' + element.ip + ':' + 8888 : '#'">
+                  <fa-icon [icon]="['fas', 'tv']" size="lg" matTooltip="WebUI"></fa-icon>
+                </a>
                 <fa-icon [icon]="['fas', 'terminal']" size="lg" matTooltip="Show Web Console"
                          (click)="showWebConsole(element)"></fa-icon>
                 <fa-icon [icon]="['far', 'trash-can']" size="lg" class="delete-icon" matTooltip="Remove AVX Device"
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-devices/avx-devices.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-devices/avx-devices.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-devices/avx-devices.ts	(working copy)
@@ -60,7 +60,7 @@
   }
 
   goToDetails(_device: any) {
-    this._router.navigate(['/avx/devices/details', _device?.name, _device?.id], {
+    this._router.navigate(['/avx/devices/details', _device?.id, _device?.ip, _device?.name], {
       state: {}
     });
   }
@@ -88,11 +88,13 @@
     })
   }
 
-  showWebInterface(_device: any) {
-
-  }
-
-  showWebConsole(_device: any) {
+  showWebConsole(device: any) {
+    const url = this._router.serializeUrl(
+      this._router.createUrlTree(['/inventory/web-console'], {
+        queryParams: {device_id: device?.id, device_name: device?.name}
+      })
+    );
+    window.open(url, '_blank');
   }
 
   getMiniBarOptions(value: number) {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-backup/avx-va-backup.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-backup/avx-va-backup.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-backup/avx-va-backup.ts	(working copy)
@@ -200,7 +200,13 @@
   }
 
   ngOnInit() {
-    console.log(this.data)
+    if (this.data.deviceName) {
+      this.avxInstances = this.data.avxInstances;
+      this.configForm.patchValue({
+        avxId: this.data.deviceId,
+        va_name: this.data.instanceName,
+      })
+    }
   }
 
   avxInstances: any = [];
@@ -416,7 +422,7 @@
       backup_name: [{value: this.data.backup?.backup_name, disabled: true}, [Validators.required]],
       domain: [0, [Validators.required]],
     })
-    setTimeout(()=>{
+    setTimeout(() => {
       this.getAVXDeviceSystemInfo();
     })
   }
@@ -446,13 +452,15 @@
       this.configForm.markAllAsTouched();
       return;
     }
+    let backup_name = this.data?.backup?.backup_name;
+    let pk_list_item = {
+      "backup_name": backup_name,
+    };
     let payload: any = {
       "action": "Restore",
       "options": {
         "__pk_list": [
-          {
-            "backup_name": this.configForm?.value?.backup_name,
-          }
+          JSON.stringify(pk_list_item),
         ],
         "domain": this.configForm?.value?.domain,
       }
@@ -468,8 +476,31 @@
         next: (result: any) => {
           if (result && result.length > 1) {
             if (result[0]) {
-              this._notification.showSuccess(`AVX VA instance backup has been restored successfully!`);
-              this.dialogRef.close(true);
+              const versionRegex = /v(\d+)$/;
+              const match = backup_name.match(versionRegex);
+              let newName: string = 'newInstance';
+              if (match) {
+                const currentVersion = parseInt(match[1], 10);
+                const newVersion = currentVersion + 1;
+                newName = backup_name.replace(versionRegex, `v${newVersion}`);
+              } else {
+                newName = `${backup_name}v1`;
+              }
+              let payload = {
+                pipeId: result[1]?.pipeid,
+                newName: newName
+              }
+              this._avx.createInstanceFromBackup(this.data?.backup?.avx_id, payload)
+                .pipe(take(1))
+                .subscribe({
+                  next: (result: any) => {
+                    this._notification.showSuccess(`AVX VA instance restore initiated.`);
+                    this.dialogRef.close(true);
+                  },
+                  error: () => {
+                    this._notification.showError('Failed to restore the instance backup.');
+                  }
+                })
             } else {
               this._notification.showError(`Failed to restore the instance backup: ${result[1]}`);
             }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-details/avx-va-instance-details.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-details/avx-va-instance-details.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-details/avx-va-instance-details.ts	(working copy)
@@ -1,11 +1,10 @@
 import {Component, OnInit} from '@angular/core';
 import {ActivatedRoute, Router} from '@angular/router';
 import {SharedModule} from '../../../shared/shared-module';
-import {MatTabChangeEvent} from '@angular/material/tabs';
 import {AvxVaInstanceOverview} from '../avx-va-instance-overview/avx-va-instance-overview';
-import {AvxVaInstanceConfiguration} from '../avx-va-instance-configuration/avx-va-instance-configuration';
-import {AvxVaInstanceLogs} from '../avx-va-instance-logs/avx-va-instance-logs';
 import {TabContainer, TabDefinition} from '../../tab-container/tab-container';
+import {AvxDeviceDetailConfiguration} from '../avx-device-detail-configuration/avx-device-detail-configuration';
+import {AvxDeviceDetailLogs} from '../avx-device-detail-logs/avx-device-detail-logs';
 
 @Component({
   selector: 'app-avx-va-instance-details',
@@ -18,11 +17,10 @@
   deviceName: any = '';
   instanceName: any = '';
   deviceId: any = '';
+  instanceStatus: any = false;
 
   tabDefinitions: TabDefinition[] = [
     {label: 'Overview', component: AvxVaInstanceOverview, paramName: 'overview'},
-    {label: 'Configuration', component: AvxVaInstanceOverview, paramName: 'configuration'},
-    {label: 'Logs', component: AvxVaInstanceOverview, paramName: 'logs'},
   ];
 
   constructor(
@@ -35,6 +33,13 @@
     this.deviceName = this._route.snapshot.paramMap.get('deviceName');
     this.deviceId = this._route.snapshot.paramMap.get('deviceId');
     this.instanceName = this._route.snapshot.paramMap.get('instanceName');
+    this.instanceStatus = this._route.snapshot.paramMap.get('status') === 'true';
+    if (this.instanceStatus) {
+      this.tabDefinitions.push(
+        {label: 'Configuration', component: AvxDeviceDetailConfiguration, paramName: 'configuration'},
+        {label: 'Logs', component: AvxDeviceDetailLogs, paramName: 'logs'},
+      )
+    }
   }
 
   navigateToAVXInstances() {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-overview/avx-va-instance-overview.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-overview/avx-va-instance-overview.html	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-overview/avx-va-instance-overview.html	(working copy)
@@ -2,7 +2,8 @@
   <br><p class="blue-icon center"><b>Note:</b> To view graph data, please enable the SNMP service first.</p>
 }
 @if (loader1 && !isInstanceActive) {
-  <br><p class="blue-icon center"><b>Note:</b> Note: Lookslike the VA instance ({{instanceName}}) is not running. Please start it first.</p>
+  <br><p class="blue-icon center"><b>Note:</b> Note: Lookslike the VA instance ({{ instanceName }}) is not running.
+    Please start it first.</p>
 }
 <mat-grid-list cols="3" rowHeight="100px">
   <mat-grid-tile colspan="2" rowspan="3">
@@ -39,15 +40,23 @@
         <div class="card-header-row">
           <mat-card-title class="card-title">
             <span class="card-title-text">Management IP</span>
+            <div class="row-action a-link">
+              <fa-icon [icon]="['fas', 'circle-info']"
+                       matTooltip="It is recommended to enable DHCP for both AVX and the VA instance. In this case, AVX dynamically assigns an IP address to the management port of the VA instance and therefore is aware of the management IP of the VA instance. AVX then can provide advanced management functions for the VA instance based on the management IP."
+                       class="fa-1x blue-icon"></fa-icon>
+            </div>
           </mat-card-title>
         </div>
-        <div class="chart-flex-container-1">
-          <span class="card-note">
-            <b>Note:</b> It is recommended to enable DHCP for both AVX and the VA instance. In this case, AVX dynamically
-            assigns an IP address to the management port of the VA instance and therefore is aware of the management IP
-            of the VA instance. AVX then can provide advanced management functions for the VA instance based on the
-            management IP.
-          </span>
+        <div class="chart-flex-container-2">
+          <table mat-table [dataSource]="managementIpDS" class="small-table">
+            <ng-container matColumnDef="key">
+              <td mat-cell *matCellDef="let element"> {{ element.key }}</td>
+            </ng-container>
+            <ng-container matColumnDef="value">
+              <td mat-cell *matCellDef="let element"> {{ element.value }}</td>
+            </ng-container>
+            <tr mat-row *matRowDef="let row; columns: platformDataColumns;"></tr>
+          </table>
         </div>
       </mat-card-content>
     </mat-card>
@@ -143,7 +152,7 @@
                 <ng-container matColumnDef="resource">
                   <th mat-header-cell *matHeaderCellDef>Resource</th>
                   <td mat-cell *matCellDef="let element">
-                    @if(element.resource !== 'mgmt') {
+                    @if (element.resource !== 'mgmt') {
                       {{ element?.resource }}
                     } @else {
                       <a class="details-page-link" (click)="updateManagementVLAN(element)">{{ element?.resource }}</a>
@@ -161,7 +170,7 @@
                 <ng-container matColumnDef="vlanTag">
                   <th mat-header-cell *matHeaderCellDef>VLAN Tag</th>
                   <td mat-cell *matCellDef="let element">
-                    @if(element.resource !== 'mgmt') {
+                    @if (element.resource !== 'mgmt') {
                       {{ element?.vlan_tag }}
                     }
                   </td>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-overview/avx-va-instance-overview.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-overview/avx-va-instance-overview.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instance-overview/avx-va-instance-overview.ts	(working copy)
@@ -1,7 +1,4 @@
 import {Component, OnInit, ViewChild} from '@angular/core';
-import {MatGridList, MatGridTile} from "@angular/material/grid-list";
-import {MatCard, MatCardContent, MatCardTitle} from '@angular/material/card';
-import {NgxEchartsDirective} from 'ngx-echarts';
 import {SharedModule} from '../../../shared/shared-module';
 import {ActivatedRoute, Router} from '@angular/router';
 import {AvxService} from '../../../services/avx-service';
@@ -12,6 +9,7 @@
 import {GlobalSerialPipe} from '../../../pipes/global-serial-pipe';
 import {EChartsOption} from 'echarts';
 import {UtilsService} from '../../../services/utils-service';
+import {ChartOptions} from '../../../services/chart-options';
 
 @Component({
   selector: 'app-avx-va-instance-overview',
@@ -27,13 +25,14 @@
   deviceName: any = '';
   instanceName: any = '';
   deviceId: any = '';
+  instanceStatus: any = false;
 
   constructor(
     private _route: ActivatedRoute,
-    private _router: Router,
     private _avx: AvxService,
     private _notification: NotificationService,
     private _utils: UtilsService,
+    private _chartOptions: ChartOptions
   ) {
   }
 
@@ -41,10 +40,13 @@
     this.deviceName = this._route.snapshot.paramMap.get('deviceName');
     this.deviceId = this._route.snapshot.paramMap.get('deviceId');
     this.instanceName = this._route.snapshot.paramMap.get('instanceName');
+    this.instanceStatus = this._route.snapshot.paramMap.get('status') === 'true';
     setTimeout(() => {
       this.getAVXVAInstancePortMapping();
       this.getAVXVAInstancePlatformResource();
-      this.getDeviceStatistics();
+      if (this.instanceStatus) {
+        this.getDeviceStatistics();
+      }
     })
   }
 
@@ -59,7 +61,6 @@
       next: (result: any) => {
         if (result && result.length > 0) {
           this.vaPortMapping = result;
-          // console.log(this.vaPortMapping);
           this.portDataSource.data = this.vaPortMapping;
         }
       },
@@ -75,11 +76,16 @@
   platformResources: any = {}
   platformDataColumns: Array<string> = ['key', 'value'];
   platformDataSource = new MatTableDataSource([]);
+  managementIp: any = {};
+  managementIpDS = new MatTableDataSource([]);
 
   getAVXVAInstancePlatformResource() {
     this._avx.getAVXVAInstancePlatformResource(this.deviceId, this.instanceName).pipe(take(1)).subscribe({
       next: (result: any) => {
-        console.log(result);
+        this.managementIp = result?.ip;
+        this.managementIp = {
+          'IP Address': result?.ip
+        }
         this.platformResources = {
           'CPU Threads': result?.cpu_thread,
           'RAM': result?.memory + ' GB',
@@ -91,6 +97,7 @@
         }
         this.isInstanceActive = result?.status;
         this.platformDataSource = this._utils.processConfigData(this.platformResources);
+        this.managementIpDS = this._utils.processConfigData(this.managementIp);
         this.getAVXVAInstanceBasicConfig(result?.product_name);
         this.loader1 = true;
       },
@@ -113,7 +120,6 @@
       next: (result: any) => {
         if (result && result.length > 1) {
           if (result[1]?.show_version) {
-            console.log(result[1]?.show_version);
             let show_version = result[1]?.show_version;
             let selectedValues: any = {
               'Model': show_version?.model,
@@ -167,1137 +173,15 @@
 
   updateStatisticsCharts(_data: any) {
 
-    _data.throughput = {
-      sent: [
-        [
-          "2025-09-01T06:13:20Z",
-          22764.8
-        ],
-        [
-          "2025-09-01T06:13:30Z",
-          91184
-        ],
-        [
-          "2025-09-01T06:13:40Z",
-          30636
-        ],
-        [
-          "2025-09-01T06:13:50Z",
-          77057.6
-        ],
-        [
-          "2025-09-01T06:14:00Z",
-          53998.4
-        ],
-        [
-          "2025-09-01T06:14:10Z",
-          26018.4
-        ],
-        [
-          "2025-09-01T06:14:20Z",
-          39848
-        ],
-        [
-          "2025-09-01T06:14:30Z",
-          85203.2
-        ],
-        [
-          "2025-09-01T06:14:40Z",
-          30274.4
-        ],
-        [
-          "2025-09-01T06:14:50Z",
-          75187.2
-        ],
-        [
-          "2025-09-01T06:15:00Z",
-          53441.6
-        ],
-        [
-          "2025-09-01T06:15:10Z",
-          28653.6
-        ],
-        [
-          "2025-09-01T06:15:20Z",
-          43352
-        ],
-        [
-          "2025-09-01T06:15:30Z",
-          86523.2
-        ],
-        [
-          "2025-09-01T06:15:40Z",
-          29900
-        ],
-        [
-          "2025-09-01T06:15:50Z",
-          74057.6
-        ],
-        [
-          "2025-09-01T06:16:00Z",
-          57915.2
-        ],
-        [
-          "2025-09-01T06:16:10Z",
-          31132
-        ],
-        [
-          "2025-09-01T06:16:20Z",
-          40164.8
-        ],
-        [
-          "2025-09-01T06:16:30Z",
-          87473.6
-        ],
-        [
-          "2025-09-01T06:16:40Z",
-          29352.8
-        ],
-        [
-          "2025-09-01T06:16:50Z",
-          107523.2
-        ],
-        [
-          "2025-09-01T06:17:00Z",
-          80985.6
-        ],
-        [
-          "2025-09-01T06:17:10Z",
-          26631.2
-        ],
-        [
-          "2025-09-01T06:17:20Z",
-          46208
-        ],
-        [
-          "2025-09-01T06:17:30Z",
-          84646.4
-        ],
-        [
-          "2025-09-01T06:17:40Z",
-          28506.4
-        ],
-        [
-          "2025-09-01T06:17:50Z",
-          73884.8
-        ],
-        [
-          "2025-09-01T06:18:00Z",
-          50097.6
-        ],
-        [
-          "2025-09-01T06:18:10Z",
-          27802.4
-        ],
-        [
-          "2025-09-01T06:18:20Z",
-          48852.8
-        ],
-        [
-          "2025-09-01T06:18:30Z",
-          82992
-        ],
-        [
-          "2025-09-01T06:18:40Z",
-          31167.2
-        ],
-        [
-          "2025-09-01T06:18:50Z",
-          81974.4
-        ],
-        [
-          "2025-09-01T06:19:00Z",
-          50172.8
-        ],
-        [
-          "2025-09-01T06:19:10Z",
-          27991.2
-        ],
-        [
-          "2025-09-01T06:19:20Z",
-          44648
-        ],
-        [
-          "2025-09-01T06:19:30Z",
-          81387.2
-        ],
-        [
-          "2025-09-01T06:19:40Z",
-          27821.6
-        ],
-        [
-          "2025-09-01T06:19:50Z",
-          78454.4
-        ],
-        [
-          "2025-09-01T06:20:00Z",
-          52660.8
-        ],
-        [
-          "2025-09-01T06:20:10Z",
-          24552.8
-        ],
-        [
-          "2025-09-01T06:20:20Z",
-          49472
-        ],
-        [
-          "2025-09-01T06:20:30Z",
-          82755.2
-        ],
-        [
-          "2025-09-01T06:20:40Z",
-          30317.6
-        ],
-        [
-          "2025-09-01T06:20:50Z",
-          75843.2
-        ],
-        [
-          "2025-09-01T06:21:00Z",
-          51331.2
-        ],
-        [
-          "2025-09-01T06:21:10Z",
-          29304.8
-        ],
-        [
-          "2025-09-01T06:21:20Z",
-          45600
-        ],
-        [
-          "2025-09-01T06:21:30Z",
-          79865.6
-        ],
-        [
-          "2025-09-01T06:21:40Z",
-          30898.4
-        ],
-        [
-          "2025-09-01T06:21:50Z",
-          83446.4
-        ],
-        [
-          "2025-09-01T06:22:00Z",
-          93699.2
-        ],
-        [
-          "2025-09-01T06:22:10Z",
-          84384.8
-        ],
-        [
-          "2025-09-01T06:22:20Z",
-          78492.8
-        ],
-        [
-          "2025-09-01T06:22:30Z",
-          119888
-        ],
-        [
-          "2025-09-01T06:22:40Z",
-          79095.2
-        ],
-        [
-          "2025-09-01T06:22:50Z",
-          115284.8
-        ],
-        [
-          "2025-09-01T06:23:00Z",
-          72753.6
-        ]
-      ],
-      received: [
-        [
-          "2025-09-01T06:13:20Z",
-          6688
-        ],
-        [
-          "2025-09-01T06:13:30Z",
-          31003.2
-        ],
-        [
-          "2025-09-01T06:13:40Z",
-          9921.6
-        ],
-        [
-          "2025-09-01T06:13:50Z",
-          26492
-        ],
-        [
-          "2025-09-01T06:14:00Z",
-          20560
-        ],
-        [
-          "2025-09-01T06:14:10Z",
-          9872
-        ],
-        [
-          "2025-09-01T06:14:20Z",
-          14263.2
-        ],
-        [
-          "2025-09-01T06:14:30Z",
-          28508.8
-        ],
-        [
-          "2025-09-01T06:14:40Z",
-          10624
-        ],
-        [
-          "2025-09-01T06:14:50Z",
-          24696.8
-        ],
-        [
-          "2025-09-01T06:15:00Z",
-          19360
-        ],
-        [
-          "2025-09-01T06:15:10Z",
-          13137.6
-        ],
-        [
-          "2025-09-01T06:15:20Z",
-          13656.8
-        ],
-        [
-          "2025-09-01T06:15:30Z",
-          30264
-        ],
-        [
-          "2025-09-01T06:15:40Z",
-          10220.8
-        ],
-        [
-          "2025-09-01T06:15:50Z",
-          23640.8
-        ],
-        [
-          "2025-09-01T06:16:00Z",
-          22033.6
-        ],
-        [
-          "2025-09-01T06:16:10Z",
-          12547.2
-        ],
-        [
-          "2025-09-01T06:16:20Z",
-          13597.6
-        ],
-        [
-          "2025-09-01T06:16:30Z",
-          31094.4
-        ],
-        [
-          "2025-09-01T06:16:40Z",
-          8448
-        ],
-        [
-          "2025-09-01T06:16:50Z",
-          36344.8
-        ],
-        [
-          "2025-09-01T06:17:00Z",
-          31547.2
-        ],
-        [
-          "2025-09-01T06:17:10Z",
-          7668.8
-        ],
-        [
-          "2025-09-01T06:17:20Z",
-          16740
-        ],
-        [
-          "2025-09-01T06:17:30Z",
-          28779.2
-        ],
-        [
-          "2025-09-01T06:17:40Z",
-          9577.6
-        ],
-        [
-          "2025-09-01T06:17:50Z",
-          25488.8
-        ],
-        [
-          "2025-09-01T06:18:00Z",
-          17904
-        ],
-        [
-          "2025-09-01T06:18:10Z",
-          11766.4
-        ],
-        [
-          "2025-09-01T06:18:20Z",
-          17048.8
-        ],
-        [
-          "2025-09-01T06:18:30Z",
-          27993.6
-        ],
-        [
-          "2025-09-01T06:18:40Z",
-          11011.2
-        ],
-        [
-          "2025-09-01T06:18:50Z",
-          26893.6
-        ],
-        [
-          "2025-09-01T06:19:00Z",
-          18214.4
-        ],
-        [
-          "2025-09-01T06:19:10Z",
-          12939.2
-        ],
-        [
-          "2025-09-01T06:19:20Z",
-          14156
-        ],
-        [
-          "2025-09-01T06:19:30Z",
-          28691.2
-        ],
-        [
-          "2025-09-01T06:19:40Z",
-          9516.8
-        ],
-        [
-          "2025-09-01T06:19:50Z",
-          25095.2
-        ],
-        [
-          "2025-09-01T06:20:00Z",
-          23022.4
-        ],
-        [
-          "2025-09-01T06:20:10Z",
-          7769.6
-        ],
-        [
-          "2025-09-01T06:20:20Z",
-          16442.4
-        ],
-        [
-          "2025-09-01T06:20:30Z",
-          29521.6
-        ],
-        [
-          "2025-09-01T06:20:40Z",
-          8787.2
-        ],
-        [
-          "2025-09-01T06:20:50Z",
-          26077.6
-        ],
-        [
-          "2025-09-01T06:21:00Z",
-          21510.4
-        ],
-        [
-          "2025-09-01T06:21:10Z",
-          8960
-        ],
-        [
-          "2025-09-01T06:21:20Z",
-          16639.2
-        ],
-        [
-          "2025-09-01T06:21:30Z",
-          27297.6
-        ],
-        [
-          "2025-09-01T06:21:40Z",
-          10097.6
-        ],
-        [
-          "2025-09-01T06:21:50Z",
-          28476
-        ],
-        [
-          "2025-09-01T06:22:00Z",
-          31428.8
-        ],
-        [
-          "2025-09-01T06:22:10Z",
-          30582.4
-        ],
-        [
-          "2025-09-01T06:22:20Z",
-          26656.8
-        ],
-        [
-          "2025-09-01T06:22:30Z",
-          39756.8
-        ],
-        [
-          "2025-09-01T06:22:40Z",
-          26561.6
-        ],
-        [
-          "2025-09-01T06:22:50Z",
-          37727.2
-        ],
-        [
-          "2025-09-01T06:23:00Z",
-          26284.8
-        ]
-      ]
-    }
-    _data.cpu = [
-      [
-        "2025-09-01T06:13:16.592148699Z",
-        7.849999999999994
-      ],
-      [
-        "2025-09-01T06:13:21.585804019Z",
-        9.459999999999994
-      ],
-      [
-        "2025-09-01T06:13:26.588592319Z",
-        7.3799999999999955
-      ],
-      [
-        "2025-09-01T06:13:31.591434597Z",
-        6.709999999999994
-      ],
-      [
-        "2025-09-01T06:13:36.586589723Z",
-        10.060000000000002
-      ],
-      [
-        "2025-09-01T06:13:41.588604239Z",
-        6.230000000000004
-      ],
-      [
-        "2025-09-01T06:13:46.592404576Z",
-        7.200000000000003
-      ],
-      [
-        "2025-09-01T06:13:51.588164479Z",
-        9.560000000000002
-      ],
-      [
-        "2025-09-01T06:13:56.590665664Z",
-        6.280000000000001
-      ],
-      [
-        "2025-09-01T06:14:01.583644421Z",
-        7.180000000000007
-      ],
-      [
-        "2025-09-01T06:14:06.590321668Z",
-        9.980000000000004
-      ],
-      [
-        "2025-09-01T06:14:11.592913228Z",
-        7.170000000000002
-      ],
-      [
-        "2025-09-01T06:14:16.586662482Z",
-        6.829999999999998
-      ],
-      [
-        "2025-09-01T06:14:21.591552921Z",
-        9.310000000000002
-      ],
-      [
-        "2025-09-01T06:14:26.584005273Z",
-        7.469999999999999
-      ],
-      [
-        "2025-09-01T06:14:31.586348195Z",
-        8.099999999999994
-      ],
-      [
-        "2025-09-01T06:14:36.591890166Z",
-        10.239999999999995
-      ],
-      [
-        "2025-09-01T06:14:41.585374456Z",
-        7.200000000000003
-      ],
-      [
-        "2025-09-01T06:14:46.589260204Z",
-        7.269999999999996
-      ],
-      [
-        "2025-09-01T06:14:51.594586339Z",
-        9.120000000000005
-      ],
-      [
-        "2025-09-01T06:14:56.586185042Z",
-        5.939999999999998
-      ],
-      [
-        "2025-09-01T06:15:01.588371252Z",
-        6.959999999999994
-      ],
-      [
-        "2025-09-01T06:15:06.584529005Z",
-        10.11
-      ],
-      [
-        "2025-09-01T06:15:11.586659506Z",
-        6.549999999999997
-      ],
-      [
-        "2025-09-01T06:15:16.590466387Z",
-        6.790000000000006
-      ],
-      [
-        "2025-09-01T06:15:21.584573919Z",
-        8.670000000000002
-      ],
-      [
-        "2025-09-01T06:15:26.586727474Z",
-        7.019999999999996
-      ],
-      [
-        "2025-09-01T06:15:31.590906384Z",
-        6.730000000000004
-      ],
-      [
-        "2025-09-01T06:15:36.585975561Z",
-        9.590000000000003
-      ],
-      [
-        "2025-09-01T06:15:41.588899927Z",
-        6.439999999999998
-      ],
-      [
-        "2025-09-01T06:15:46.592468377Z",
-        8.219999999999999
-      ],
-      [
-        "2025-09-01T06:15:51.587153019Z",
-        10.230000000000004
-      ],
-      [
-        "2025-09-01T06:15:56.589238192Z",
-        6.310000000000002
-      ],
-      [
-        "2025-09-01T06:16:01.593977305Z",
-        6.569999999999993
-      ],
-      [
-        "2025-09-01T06:16:06.589078936Z",
-        9.840000000000003
-      ],
-      [
-        "2025-09-01T06:16:11.590916179Z",
-        6.340000000000003
-      ],
-      [
-        "2025-09-01T06:16:16.585881247Z",
-        7.049999999999997
-      ],
-      [
-        "2025-09-01T06:16:21.590592472Z",
-        9.019999999999996
-      ],
-      [
-        "2025-09-01T06:16:26.584254701Z",
-        5.799999999999997
-      ],
-      [
-        "2025-09-01T06:16:31.588858469Z",
-        6.579999999999998
-      ],
-      [
-        "2025-09-01T06:16:36.584903954Z",
-        9.349999999999994
-      ],
-      [
-        "2025-09-01T06:16:41.586857163Z",
-        6.739999999999995
-      ],
-      [
-        "2025-09-01T06:16:46.591272308Z",
-        7.400000000000006
-      ],
-      [
-        "2025-09-01T06:16:51.58647666Z",
-        8.760000000000005
-      ],
-      [
-        "2025-09-01T06:16:56.590560953Z",
-        6.299999999999997
-      ],
-      [
-        "2025-09-01T06:17:01.584683866Z",
-        7.8700000000000045
-      ],
-      [
-        "2025-09-01T06:17:06.589264331Z",
-        10.950000000000003
-      ],
-      [
-        "2025-09-01T06:17:11.592086144Z",
-        6.200000000000003
-      ],
-      [
-        "2025-09-01T06:17:16.584354386Z",
-        6.670000000000002
-      ],
-      [
-        "2025-09-01T06:17:21.588554123Z",
-        8.730000000000004
-      ],
-      [
-        "2025-09-01T06:17:26.591148288Z",
-        5.75
-      ],
-      [
-        "2025-09-01T06:17:31.584136195Z",
-        6.430000000000007
-      ],
-      [
-        "2025-09-01T06:17:36.589100971Z",
-        9.5
-      ],
-      [
-        "2025-09-01T06:17:41.593692328Z",
-        6.230000000000004
-      ],
-      [
-        "2025-09-01T06:17:46.586095013Z",
-        7.019999999999996
-      ],
-      [
-        "2025-09-01T06:17:51.590335823Z",
-        9
-      ],
-      [
-        "2025-09-01T06:17:56.594540097Z",
-        6.739999999999995
-      ],
-      [
-        "2025-09-01T06:18:01.58855587Z",
-        6.590000000000003
-      ],
-      [
-        "2025-09-01T06:18:06.584003729Z",
-        9.780000000000001
-      ],
-      [
-        "2025-09-01T06:18:11.586997029Z",
-        5.930000000000007
-      ],
-      [
-        "2025-09-01T06:18:16.59067188Z",
-        8.650000000000006
-      ],
-      [
-        "2025-09-01T06:18:21.585339422Z",
-        10.730000000000004
-      ],
-      [
-        "2025-09-01T06:18:26.589049402Z",
-        6.849999999999994
-      ],
-      [
-        "2025-09-01T06:18:31.591983397Z",
-        6.420000000000002
-      ],
-      [
-        "2025-09-01T06:18:36.589033381Z",
-        9.379999999999995
-      ],
-      [
-        "2025-09-01T06:18:41.592569495Z",
-        5.920000000000002
-      ],
-      [
-        "2025-09-01T06:18:46.585097209Z",
-        7.040000000000006
-      ],
-      [
-        "2025-09-01T06:18:51.590326058Z",
-        9.040000000000006
-      ],
-      [
-        "2025-09-01T06:18:56.592207602Z",
-        6.299999999999997
-      ],
-      [
-        "2025-09-01T06:19:01.584566575Z",
-        6.560000000000002
-      ],
-      [
-        "2025-09-01T06:19:06.589809729Z",
-        9.959999999999994
-      ],
-      [
-        "2025-09-01T06:19:11.592770275Z",
-        7.400000000000006
-      ],
-      [
-        "2025-09-01T06:19:16.585981991Z",
-        6.769999999999996
-      ],
-      [
-        "2025-09-01T06:19:21.590752396Z",
-        9.530000000000001
-      ],
-      [
-        "2025-09-01T06:19:26.593223886Z",
-        6
-      ],
-      [
-        "2025-09-01T06:19:31.585968321Z",
-        8.370000000000005
-      ],
-      [
-        "2025-09-01T06:19:36.592431695Z",
-        10.909999999999997
-      ],
-      [
-        "2025-09-01T06:19:41.585500115Z",
-        6.150000000000006
-      ],
-      [
-        "2025-09-01T06:19:46.588459615Z",
-        6.640000000000001
-      ],
-      [
-        "2025-09-01T06:19:51.593573573Z",
-        9.129999999999995
-      ],
-      [
-        "2025-09-01T06:19:56.585916302Z",
-        6.549999999999997
-      ],
-      [
-        "2025-09-01T06:20:01.588468835Z",
-        7.280000000000001
-      ],
-      [
-        "2025-09-01T06:20:06.584967154Z",
-        9.819999999999993
-      ],
-      [
-        "2025-09-01T06:20:11.588088209Z",
-        6.329999999999998
-      ],
-      [
-        "2025-09-01T06:20:16.593030985Z",
-        6.969999999999999
-      ],
-      [
-        "2025-09-01T06:20:21.588333389Z",
-        9.599999999999994
-      ],
-      [
-        "2025-09-01T06:20:26.590695924Z",
-        6.170000000000002
-      ],
-      [
-        "2025-09-01T06:20:31.584413326Z",
-        6.409999999999997
-      ],
-      [
-        "2025-09-01T06:20:36.589163893Z",
-        9.430000000000007
-      ],
-      [
-        "2025-09-01T06:20:41.592667697Z",
-        6.590000000000003
-      ],
-      [
-        "2025-09-01T06:20:46.586573325Z",
-        8.540000000000006
-      ],
-      [
-        "2025-09-01T06:20:51.593027734Z",
-        10.5
-      ],
-      [
-        "2025-09-01T06:20:56.584648984Z",
-        6.219999999999999
-      ],
-      [
-        "2025-09-01T06:21:01.588278068Z",
-        6.8700000000000045
-      ],
-      [
-        "2025-09-01T06:21:06.592307073Z",
-        9.670000000000002
-      ],
-      [
-        "2025-09-01T06:21:11.585052667Z",
-        6.790000000000006
-      ],
-      [
-        "2025-09-01T06:21:16.589069792Z",
-        7.140000000000001
-      ],
-      [
-        "2025-09-01T06:21:21.592870389Z",
-        9.599999999999994
-      ],
-      [
-        "2025-09-01T06:21:26.584360229Z",
-        6.640000000000001
-      ],
-      [
-        "2025-09-01T06:21:31.587982183Z",
-        6.6299999999999955
-      ],
-      [
-        "2025-09-01T06:21:36.592933811Z",
-        10.420000000000002
-      ],
-      [
-        "2025-09-01T06:21:41.585139572Z",
-        6.760000000000005
-      ],
-      [
-        "2025-09-01T06:21:46.589782215Z",
-        7.3799999999999955
-      ],
-      [
-        "2025-09-01T06:21:51.583664873Z",
-        9.75
-      ],
-      [
-        "2025-09-01T06:21:56.586524372Z",
-        6.560000000000002
-      ],
-      [
-        "2025-09-01T06:22:01.589669636Z",
-        9.489999999999995
-      ],
-      [
-        "2025-09-01T06:22:06.585495473Z",
-        11.180000000000007
-      ],
-      [
-        "2025-09-01T06:22:11.589164774Z",
-        7.109999999999999
-      ],
-      [
-        "2025-09-01T06:22:16.591691475Z",
-        7.489999999999995
-      ],
-      [
-        "2025-09-01T06:22:21.58543411Z",
-        9.439999999999998
-      ],
-      [
-        "2025-09-01T06:22:26.588519894Z",
-        6.540000000000006
-      ],
-      [
-        "2025-09-01T06:22:31.59165337Z",
-        7.019999999999996
-      ],
-      [
-        "2025-09-01T06:22:36.585850994Z",
-        9.709999999999994
-      ],
-      [
-        "2025-09-01T06:22:41.589216573Z",
-        6.8799999999999955
-      ],
-      [
-        "2025-09-01T06:22:46.592113922Z",
-        7.609999999999999
-      ],
-      [
-        "2025-09-01T06:22:51.586518959Z",
-        10.11
-      ],
-      [
-        "2025-09-01T06:22:56.589741153Z",
-        6.599999999999994
-      ],
-      [
-        "2025-09-01T06:23:01.584548661Z",
-        9.930000000000007
-      ]
-    ];
-    _data.memory = [["2025-09-01T06:13:16.592260588Z", 70.14117002374628], ["2025-09-01T06:13:21.585926871Z", 70.13421637719414], ["2025-09-01T06:13:26.588698751Z", 70.13383753177565], ["2025-09-01T06:13:31.591537989Z", 70.13893361369524], ["2025-09-01T06:13:36.586724859Z", 70.132004408783], ["2025-09-01T06:13:41.588708867Z", 70.13364199865644], ["2025-09-01T06:13:46.592522086Z", 70.13744267366121], ["2025-09-01T06:13:51.588255454Z", 70.1338008693158], ["2025-09-01T06:13:56.590777328Z", 70.13325704282799], ["2025-09-01T06:14:01.583771527Z", 70.1447568344019], ["2025-09-01T06:14:06.59042958Z", 70.13213883780247], ["2025-09-01T06:14:11.593017008Z", 70.13244435830124], ["2025-09-01T06:14:16.586775697Z", 70.13785818153954], ["2025-09-01T06:14:21.591667785Z", 70.13378864849585], ["2025-09-01T06:14:26.584104046Z", 70.13271321634016], ["2025-09-01T06:14:31.586446167Z", 70.13948355059303], ["2025-09-01T06:14:36.592021702Z", 70.13113673056648], ["2025-09-01T06:14:41.585484213Z", 70.13339758225742], ["2025-09-01T06:14:46.589388717Z", 70.13784596071959], ["2025-09-01T06:14:51.594692242Z", 70.13288430781948], ["2025-09-01T06:14:56.5862942Z", 70.13149724475504], ["2025-09-01T06:15:01.588472744Z", 70.13633668945565], ["2025-09-01T06:15:06.584628942Z", 70.13384975259561], ["2025-09-01T06:15:11.58682366Z", 70.13575009009799], ["2025-09-01T06:15:16.590575154Z", 70.1348763014715], ["2025-09-01T06:15:21.584686753Z", 70.13368477152628], ["2025-09-01T06:15:26.586831273Z", 70.13232215010173], ["2025-09-01T06:15:31.591011705Z", 70.14007626036066], ["2025-09-01T06:15:36.58608956Z", 70.13511460746055], ["2025-09-01T06:15:41.588998234Z", 70.13502295131092], ["2025-09-01T06:15:46.592559186Z", 70.13562788189849], ["2025-09-01T06:15:51.587264363Z", 70.13238936461146], ["2025-09-01T06:15:56.589339233Z", 70.13262767060051], ["2025-09-01T06:16:01.594081723Z", 70.13836534556751], ["2025-09-01T06:16:06.58919583Z", 70.13039126054947], ["2025-09-01T06:16:11.591044558Z", 70.13192497345332], ["2025-09-01T06:16:16.585988474Z", 70.13466243712236], ["2025-09-01T06:16:21.590723008Z", 70.13236492297156], ["2025-09-01T06:16:26.584375318Z", 70.13068456022829], ["2025-09-01T06:16:31.588984337Z", 70.13793761686922], ["2025-09-01T06:16:36.58502312Z", 70.12965801135242], ["2025-09-01T06:16:41.586998811Z", 70.13136892614556], ["2025-09-01T06:16:46.591374391Z", 70.13648944970502], ["2025-09-01T06:16:51.586590188Z", 70.1301101816906], ["2025-09-01T06:16:56.590665075Z", 70.13077010596795], ["2025-09-01T06:17:01.584794612Z", 70.13869530770619], ["2025-09-01T06:17:06.589371201Z", 70.13274987880001], ["2025-09-01T06:17:11.592215164Z", 70.13128949081587], ["2025-09-01T06:17:16.584460056Z", 70.1362205916661], ["2025-09-01T06:17:21.588685686Z", 70.13284764535963], ["2025-09-01T06:17:26.591250963Z", 70.13248102076109], ["2025-09-01T06:17:31.58427035Z", 70.13854865786678], ["2025-09-01T06:17:36.589225288Z", 70.13691106799335], ["2025-09-01T06:17:41.593797443Z", 70.13116728261636], ["2025-09-01T06:17:46.586194625Z", 70.13768709006023], ["2025-09-01T06:17:51.590439979Z", 70.1333548093876], ["2025-09-01T06:17:56.594673312Z", 70.13171721951416], ["2025-09-01T06:18:01.588661948Z", 70.14120057579615], ["2025-09-01T06:18:06.58411037Z", 70.13416138350436], ["2025-09-01T06:18:11.587119244Z", 70.13388030464549], ["2025-09-01T06:18:16.590782293Z", 70.13890306164537], ["2025-09-01T06:18:21.585446534Z", 70.13501073049096], ["2025-09-01T06:18:26.589180107Z", 70.1357745317379], ["2025-09-01T06:18:31.592092116Z", 70.13809037711862], ["2025-09-01T06:18:36.589147797Z", 70.13108784728668], ["2025-09-01T06:18:41.592704314Z", 70.13248102076109], ["2025-09-01T06:18:46.585207504Z", 70.13488241188148], ["2025-09-01T06:18:51.590430315Z", 70.13340980307737], ["2025-09-01T06:18:56.592327191Z", 70.1334525759472], ["2025-09-01T06:19:01.584694975Z", 70.1412616798959], ["2025-09-01T06:19:06.589948681Z", 70.13449745605301], ["2025-09-01T06:19:11.592934332Z", 70.13296374314916], ["2025-09-01T06:19:16.586090094Z", 70.14154275875478], ["2025-09-01T06:19:21.590857961Z", 70.13416138350436], ["2025-09-01T06:19:26.593331073Z", 70.1334036926674], ["2025-09-01T06:19:31.586083334Z", 70.13913525722442], ["2025-09-01T06:19:36.592542087Z", 70.13705771783275], ["2025-09-01T06:19:41.585613885Z", 70.13276821002995], ["2025-09-01T06:19:46.588568998Z", 70.1370454970128], ["2025-09-01T06:19:51.593691669Z", 70.1343263645737], ["2025-09-01T06:19:56.586031833Z", 70.13529791975981], ["2025-09-01T06:20:01.588572724Z", 70.14211713729249], ["2025-09-01T06:20:06.585075479Z", 70.13334258856764], ["2025-09-01T06:20:11.588107574Z", 70.13261544978056], ["2025-09-01T06:20:16.593160488Z", 70.1372226989021], ["2025-09-01T06:20:21.588354889Z", 70.13259711855063], ["2025-09-01T06:20:26.590824087Z", 70.13502295131092], ["2025-09-01T06:20:31.584522876Z", 70.14283205525962], ["2025-09-01T06:20:36.589296898Z", 70.13480908696177], ["2025-09-01T06:20:41.592788834Z", 70.13478464532187], ["2025-09-01T06:20:46.586693592Z", 70.13872585975606], ["2025-09-01T06:20:51.593136846Z", 70.13392307751532], ["2025-09-01T06:20:56.584779718Z", 70.13434469580363], ["2025-09-01T06:21:01.588410698Z", 70.14300314673892], ["2025-09-01T06:21:06.592419466Z", 70.1348763014715], ["2025-09-01T06:21:11.585170492Z", 70.13414916268441], ["2025-09-01T06:21:16.589195824Z", 70.14066897012829], ["2025-09-01T06:21:21.592989107Z", 70.13248713117108], ["2025-09-01T06:21:26.584469706Z", 70.13386808382553], ["2025-09-01T06:21:31.588087395Z", 70.13837756638746], ["2025-09-01T06:21:36.593044502Z", 70.13366032988637], ["2025-09-01T06:21:41.585244124Z", 70.13529180934984], ["2025-09-01T06:21:46.589888196Z", 70.13871363893612], ["2025-09-01T06:21:51.583784509Z", 70.13197385673313], ["2025-09-01T06:21:56.586660784Z", 70.13313483462848], ["2025-09-01T06:22:01.589771206Z", 70.14270373665012], ["2025-09-01T06:22:06.58559842Z", 70.13419804596421], ["2025-09-01T06:22:11.589247604Z", 70.13550567369897], ["2025-09-01T06:22:16.591797549Z", 70.14108447800662], ["2025-09-01T06:22:21.585551585Z", 70.13570731722817], ["2025-09-01T06:22:26.588665672Z", 70.13683163266367], ["2025-09-01T06:22:31.591772094Z", 70.13972185658209], ["2025-09-01T06:22:36.585968421Z", 70.13563399230846], ["2025-09-01T06:22:41.589328654Z", 70.13586618788753], ["2025-09-01T06:22:46.592231576Z", 70.14180550638372], ["2025-09-01T06:22:51.586641896Z", 70.13337925102749], ["2025-09-01T06:22:56.589846282Z", 70.13572564845809], ["2025-09-01T06:23:01.584662533Z", 70.14054676192877]]
-    _data.disk = [["2025-09-01T06:13:16.592260588Z", 70.14117002374628], ["2025-09-01T06:13:21.585926871Z", 70.13421637719414], ["2025-09-01T06:13:26.588698751Z", 70.13383753177565], ["2025-09-01T06:13:31.591537989Z", 70.13893361369524], ["2025-09-01T06:13:36.586724859Z", 70.132004408783], ["2025-09-01T06:13:41.588708867Z", 70.13364199865644], ["2025-09-01T06:13:46.592522086Z", 70.13744267366121], ["2025-09-01T06:13:51.588255454Z", 70.1338008693158], ["2025-09-01T06:13:56.590777328Z", 70.13325704282799], ["2025-09-01T06:14:01.583771527Z", 70.1447568344019], ["2025-09-01T06:14:06.59042958Z", 70.13213883780247], ["2025-09-01T06:14:11.593017008Z", 70.13244435830124], ["2025-09-01T06:14:16.586775697Z", 70.13785818153954], ["2025-09-01T06:14:21.591667785Z", 70.13378864849585], ["2025-09-01T06:14:26.584104046Z", 70.13271321634016], ["2025-09-01T06:14:31.586446167Z", 70.13948355059303], ["2025-09-01T06:14:36.592021702Z", 70.13113673056648], ["2025-09-01T06:14:41.585484213Z", 70.13339758225742], ["2025-09-01T06:14:46.589388717Z", 70.13784596071959], ["2025-09-01T06:14:51.594692242Z", 70.13288430781948], ["2025-09-01T06:14:56.5862942Z", 70.13149724475504], ["2025-09-01T06:15:01.588472744Z", 70.13633668945565], ["2025-09-01T06:15:06.584628942Z", 70.13384975259561], ["2025-09-01T06:15:11.58682366Z", 70.13575009009799], ["2025-09-01T06:15:16.590575154Z", 70.1348763014715], ["2025-09-01T06:15:21.584686753Z", 70.13368477152628], ["2025-09-01T06:15:26.586831273Z", 70.13232215010173], ["2025-09-01T06:15:31.591011705Z", 70.14007626036066], ["2025-09-01T06:15:36.58608956Z", 70.13511460746055], ["2025-09-01T06:15:41.588998234Z", 70.13502295131092], ["2025-09-01T06:15:46.592559186Z", 70.13562788189849], ["2025-09-01T06:15:51.587264363Z", 70.13238936461146], ["2025-09-01T06:15:56.589339233Z", 70.13262767060051], ["2025-09-01T06:16:01.594081723Z", 70.13836534556751], ["2025-09-01T06:16:06.58919583Z", 70.13039126054947], ["2025-09-01T06:16:11.591044558Z", 70.13192497345332], ["2025-09-01T06:16:16.585988474Z", 70.13466243712236], ["2025-09-01T06:16:21.590723008Z", 70.13236492297156], ["2025-09-01T06:16:26.584375318Z", 70.13068456022829], ["2025-09-01T06:16:31.588984337Z", 70.13793761686922], ["2025-09-01T06:16:36.58502312Z", 70.12965801135242], ["2025-09-01T06:16:41.586998811Z", 70.13136892614556], ["2025-09-01T06:16:46.591374391Z", 70.13648944970502], ["2025-09-01T06:16:51.586590188Z", 70.1301101816906], ["2025-09-01T06:16:56.590665075Z", 70.13077010596795], ["2025-09-01T06:17:01.584794612Z", 70.13869530770619], ["2025-09-01T06:17:06.589371201Z", 70.13274987880001], ["2025-09-01T06:17:11.592215164Z", 70.13128949081587], ["2025-09-01T06:17:16.584460056Z", 70.1362205916661], ["2025-09-01T06:17:21.588685686Z", 70.13284764535963], ["2025-09-01T06:17:26.591250963Z", 70.13248102076109], ["2025-09-01T06:17:31.58427035Z", 70.13854865786678], ["2025-09-01T06:17:36.589225288Z", 70.13691106799335], ["2025-09-01T06:17:41.593797443Z", 70.13116728261636], ["2025-09-01T06:17:46.586194625Z", 70.13768709006023], ["2025-09-01T06:17:51.590439979Z", 70.1333548093876], ["2025-09-01T06:17:56.594673312Z", 70.13171721951416], ["2025-09-01T06:18:01.588661948Z", 70.14120057579615], ["2025-09-01T06:18:06.58411037Z", 70.13416138350436], ["2025-09-01T06:18:11.587119244Z", 70.13388030464549], ["2025-09-01T06:18:16.590782293Z", 70.13890306164537], ["2025-09-01T06:18:21.585446534Z", 70.13501073049096], ["2025-09-01T06:18:26.589180107Z", 70.1357745317379], ["2025-09-01T06:18:31.592092116Z", 70.13809037711862], ["2025-09-01T06:18:36.589147797Z", 70.13108784728668], ["2025-09-01T06:18:41.592704314Z", 70.13248102076109], ["2025-09-01T06:18:46.585207504Z", 70.13488241188148], ["2025-09-01T06:18:51.590430315Z", 70.13340980307737], ["2025-09-01T06:18:56.592327191Z", 70.1334525759472], ["2025-09-01T06:19:01.584694975Z", 70.1412616798959], ["2025-09-01T06:19:06.589948681Z", 70.13449745605301], ["2025-09-01T06:19:11.592934332Z", 70.13296374314916], ["2025-09-01T06:19:16.586090094Z", 70.14154275875478], ["2025-09-01T06:19:21.590857961Z", 70.13416138350436], ["2025-09-01T06:19:26.593331073Z", 70.1334036926674], ["2025-09-01T06:19:31.586083334Z", 70.13913525722442], ["2025-09-01T06:19:36.592542087Z", 70.13705771783275], ["2025-09-01T06:19:41.585613885Z", 70.13276821002995], ["2025-09-01T06:19:46.588568998Z", 70.1370454970128], ["2025-09-01T06:19:51.593691669Z", 70.1343263645737], ["2025-09-01T06:19:56.586031833Z", 70.13529791975981], ["2025-09-01T06:20:01.588572724Z", 70.14211713729249], ["2025-09-01T06:20:06.585075479Z", 70.13334258856764], ["2025-09-01T06:20:11.588107574Z", 70.13261544978056], ["2025-09-01T06:20:16.593160488Z", 70.1372226989021], ["2025-09-01T06:20:21.588354889Z", 70.13259711855063], ["2025-09-01T06:20:26.590824087Z", 70.13502295131092], ["2025-09-01T06:20:31.584522876Z", 70.14283205525962], ["2025-09-01T06:20:36.589296898Z", 70.13480908696177], ["2025-09-01T06:20:41.592788834Z", 70.13478464532187], ["2025-09-01T06:20:46.586693592Z", 70.13872585975606], ["2025-09-01T06:20:51.593136846Z", 70.13392307751532], ["2025-09-01T06:20:56.584779718Z", 70.13434469580363], ["2025-09-01T06:21:01.588410698Z", 70.14300314673892], ["2025-09-01T06:21:06.592419466Z", 70.1348763014715], ["2025-09-01T06:21:11.585170492Z", 70.13414916268441], ["2025-09-01T06:21:16.589195824Z", 70.14066897012829], ["2025-09-01T06:21:21.592989107Z", 70.13248713117108], ["2025-09-01T06:21:26.584469706Z", 70.13386808382553], ["2025-09-01T06:21:31.588087395Z", 70.13837756638746], ["2025-09-01T06:21:36.593044502Z", 70.13366032988637], ["2025-09-01T06:21:41.585244124Z", 70.13529180934984], ["2025-09-01T06:21:46.589888196Z", 70.13871363893612], ["2025-09-01T06:21:51.583784509Z", 70.13197385673313], ["2025-09-01T06:21:56.586660784Z", 70.13313483462848], ["2025-09-01T06:22:01.589771206Z", 70.14270373665012], ["2025-09-01T06:22:06.58559842Z", 70.13419804596421], ["2025-09-01T06:22:11.589247604Z", 70.13550567369897], ["2025-09-01T06:22:16.591797549Z", 70.14108447800662], ["2025-09-01T06:22:21.585551585Z", 70.13570731722817], ["2025-09-01T06:22:26.588665672Z", 70.13683163266367], ["2025-09-01T06:22:31.591772094Z", 70.13972185658209], ["2025-09-01T06:22:36.585968421Z", 70.13563399230846], ["2025-09-01T06:22:41.589328654Z", 70.13586618788753], ["2025-09-01T06:22:46.592231576Z", 70.14180550638372], ["2025-09-01T06:22:51.586641896Z", 70.13337925102749], ["2025-09-01T06:22:56.589846282Z", 70.13572564845809], ["2025-09-01T06:23:01.584662533Z", 70.14054676192877]]
-
-    this.chartOption1 = {
-      tooltip: {
-        trigger: 'axis',
-        formatter: function (params: any) {
-          if (Array.isArray(params) && params.length > 0) {
-            const date = new Date(params[0].value[0]);
-            const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
-
-            let tooltipContent = `${formattedDate}<br/>`;
-            params.forEach(param => {
-              if (param.value && Array.isArray(param.value) && param.value.length === 2) {
-                const valueInKbps = (param.value[1] / 1000).toFixed(1);
-                const dot = `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${param.color};"></span>`;
-                tooltipContent += `${dot} ${param.seriesName} ${valueInKbps}Kbps<br/>`;
-              }
-            });
-            return tooltipContent;
-          }
-          return '';
-        }
-      },
-      legend: {
-        data: ['Sent', 'Received']
-      },
-      xAxis: {
-        type: 'time',
-        axisLabel: {
-          formatter: '{HH}:{mm}:{ss}'
-        }
-      },
-      yAxis: {
-        type: 'value',
-        name: 'Value (bps)'
-      },
-      series: [
-        {
-          name: 'Sent',
-          data: _data?.throughput?.sent,
-          type: 'line'
-        },
-        {
-          name: 'Received',
-          data: _data?.throughput?.received,
-          type: 'line',
-        }
-      ],
-    }
-
-    this.chartOption2 = {
-      tooltip: {
-        trigger: 'axis',
-        formatter: function (params: any) {
-          if (Array.isArray(params) && params.length > 0) {
-            const date = new Date(params[0].value[0]);
-            const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
-
-            let tooltipContent = `${formattedDate}<br/>`;
-            params.forEach(param => {
-              if (param.value && Array.isArray(param.value) && param.value.length === 2) {
-                const value = (param.value[1]).toFixed(1);
-                const dot = `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${param.color};"></span>`;
-                tooltipContent += `${dot} ${param.seriesName} ${value}%<br/>`;
-              }
-            });
-            return tooltipContent;
-          }
-          return '';
-        }
-      },
-      legend: {
-        data: ['CPU']
-      },
-      xAxis: {
-        type: 'time',
-        axisLabel: {
-          formatter: '{HH}:{mm}:{ss}'
-        }
-      },
-      yAxis: {
-        type: 'value',
-        name: 'Value (%)'
-      },
-      series: [
-        {
-          name: 'CPU',
-          data: _data?.cpu,
-          type: 'line'
-        }
-      ],
-    }
-
-    this.chartOption3 = {
-      tooltip: {
-        trigger: 'axis',
-        formatter: function (params: any) {
-          if (Array.isArray(params) && params.length > 0) {
-            const date = new Date(params[0].value[0]);
-            const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
-
-            let tooltipContent = `${formattedDate}<br/>`;
-            params.forEach(param => {
-              if (param.value && Array.isArray(param.value) && param.value.length === 2) {
-                const value = (param.value[1]).toFixed(1);
-                const dot = `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${param.color};"></span>`;
-                tooltipContent += `${dot} ${param.seriesName} ${value}%<br/>`;
-              }
-            });
-            return tooltipContent;
-          }
-          return '';
-        }
-      },
-      legend: {
-        data: ['Memory']
-      },
-      xAxis: {
-        type: 'time',
-        axisLabel: {
-          formatter: '{HH}:{mm}:{ss}'
-        }
-      },
-      yAxis: {
-        type: 'value',
-        name: 'Value (%)'
-      },
-      series: [
-        {
-          name: 'Memory',
-          data: _data?.memory,
-          type: 'line'
-        }
-      ],
-    }
-
-    this.chartOption4 = {
-      tooltip: {
-        trigger: 'axis',
-        formatter: function (params: any) {
-          if (Array.isArray(params) && params.length > 0) {
-            const date = new Date(params[0].value[0]);
-            const formattedDate = `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`;
-
-            let tooltipContent = `${formattedDate}<br/>`;
-            params.forEach(param => {
-              if (param.value && Array.isArray(param.value) && param.value.length === 2) {
-                const value = (param.value[1]).toFixed(1);
-                const dot = `<span style="display:inline-block;margin-right:4px;border-radius:10px;width:10px;height:10px;background-color:${param.color};"></span>`;
-                tooltipContent += `${dot} ${param.seriesName} ${value}%<br/>`;
-              }
-            });
-            return tooltipContent;
-          }
-          return '';
-        }
-      },
-      legend: {
-        data: ['Disk']
-      },
-      xAxis: {
-        type: 'time',
-        axisLabel: {
-          formatter: '{HH}:{mm}:{ss}'
-        }
-      },
-      yAxis: {
-        type: 'value',
-        name: 'Value (%)'
-      },
-      series: [
-        {
-          name: 'Disk',
-          data: _data?.disk,
-          type: 'line'
-        }
-      ],
-    }
+    let inbound_traffic: any = [];
+    let outbound_traffic: any = [];
+    let cpu: any = [];
+    let memory: any = [];
+    let disk: any = [];
+    this.chartOption1 = this._chartOptions.historicalThroughputChartOptions(inbound_traffic, outbound_traffic);
+    this.chartOption2 = this._chartOptions.plotSingleLineChartOptions({label: 'CPU', unit: 'Percentage'}, cpu)
+    this.chartOption3 = this._chartOptions.plotSingleLineChartOptions({label: 'Memory', unit: 'Percentage'}, memory)
+    this.chartOption4 = this._chartOptions.plotSingleLineChartOptions({label: 'Disk', unit: 'Percentage'}, disk)
   }
 
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/avx-va-instances.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/avx-va-instances.html	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/avx-va-instances.html	(working copy)
@@ -1,8 +1,9 @@
 <mat-card class="page-card-1" appearance="filled">
   <mat-card-content>
-    <div class="button-container">
-      <button mat-raised-button (click)="createVAInstance()" matTooltip="Create VA Instance">Create</button>
-    </div>
+    <!--  ToDo: implement later with ease of use.  -->
+    <!--    <div class="button-container">-->
+    <!--      <button mat-raised-button (click)="createVAInstance()" matTooltip="Create VA Instance">Create</button>-->
+    <!--    </div>-->
     <div class="table-container">
       <div class="mat-elevation-z0">
         <table mat-table [dataSource]="dataSource">
@@ -61,14 +62,24 @@
                   <fa-icon [icon]="['far', 'play-circle']" size="lg" matTooltip="Start" class="success-icon"
                            (click)="startShutdownVAInstance(element)"></fa-icon>
                 }
-                <fa-icon [icon]="['fas', 'id-badge']" size="lg" matTooltip="Show Instance License"
-                         (click)="showVAInstanceLicense(element)"></fa-icon>
+                @if (element?.product_name.toLowerCase() === 'vapv') {
+                  <fa-icon [icon]="['fas', 'id-badge']" size="lg" matTooltip="Show Instance License"
+                           (click)="showVAInstanceLicense(element)"></fa-icon>
+                } @else {
+                  <fa-icon [icon]="['fas', 'id-badge']" size="lg" class="disabled-icon"
+                           matTooltip="The license status on the VA instance is unknown. Contact the vendor for details."></fa-icon>
+                }
                 <fa-icon [icon]="['fas', 'repeat']" size="lg" matTooltip="Create Backup"
                          (click)="backupVAInstance(element)"></fa-icon>
                 <fa-icon [icon]="['fas', 'terminal']" size="lg" matTooltip="Show VNC Console"
                          (click)="showVNCConsole(element)"></fa-icon>
-                <fa-icon [icon]="['far', 'trash-can']" size="lg" class="delete-icon" matTooltip="Delete Instance"
-                         (click)="deleteVAInstance(element)"></fa-icon>
+                @if (element.status) {
+                  <fa-icon [icon]="['far', 'trash-can']" size="lg" class="delete-icon disabled-icon"
+                           matTooltip="Instance is Running"></fa-icon>
+                } @else {
+                  <fa-icon [icon]="['far', 'trash-can']" size="lg" class="delete-icon" matTooltip="Delete Instance"
+                           (click)="deleteVAInstance(element)"></fa-icon>
+                }
               </div>
             </td>
           </ng-container>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/avx-va-instances.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/avx-va-instances.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/avx-va-instances.ts	(working copy)
@@ -87,20 +87,20 @@
     });
   }
 
-  createVAInstance() {
-    this.dialogConfig.data = {
-      devices: this.avxDevices
-    }
-    const dialogRef = this.dialog.open(CreateAVXVAInstanceDialog, this.dialogConfig);
-    dialogRef.afterClosed().subscribe(isAdded => {
-      if (isAdded) {
-        this.getAVXDevices();
-      }
-    })
-  }
+  // createVAInstance() {
+  //   this.dialogConfig.data = {
+  //     devices: this.avxDevices
+  //   }
+  //   const dialogRef = this.dialog.open(CreateAVXVAInstanceDialog, this.dialogConfig);
+  //   dialogRef.afterClosed().subscribe(isAdded => {
+  //     if (isAdded) {
+  //       this.getAVXDevices();
+  //     }
+  //   })
+  // }
 
   goToDetails(_instance: any) {
-    this._router.navigate(['/avx/devices/instances/details', _instance?.avx_name, _instance?.avx_id, _instance?.va_name], {
+    this._router.navigate(['/avx/instances/details', _instance?.avx_id, _instance?.avx_name, _instance?.va_name, _instance?.status], {
       state: {}
     });
   }
@@ -124,6 +124,36 @@
   }
 
   startShutdownVAInstance(_instance: any) {
+    let deviceName = _instance?.va_name;
+    let operation = _instance.status ? 'Shutdown' : 'Power on';
+    let confirmMsg = `Are you sure you want to ${operation} "${deviceName}"?`
+    this._confirmation.openConfirmDialog({
+      title: `${operation} ${deviceName}?`,
+      message: confirmMsg,
+      confirmButtonText: `Yes, ${operation}`,
+      cancelButtonText: 'Cancel',
+      confirmButtonColor: 'warn',
+      cancelButtonColor: 'primary'
+    }).subscribe(result => {
+      if (result) {
+        this._avx.updateAVXInstancePowerStatus(_instance.avx_id, _instance?.va_name, !_instance.status)
+          .pipe(take(1)).subscribe({
+          next: (result: any) => {
+            if (result && result.length > 0) {
+              if (result[0]) {
+                this._notification.showSuccess(`Successfully initiated ${operation}, Please wait for a few seconds.`);
+              } else {
+                this._notification.showError(`Failed to initiate ${operation}.`);
+              }
+            }
+          },
+          error: error => {
+            this._notification.showError(`Error: ${error?.message}`);
+            console.log(error);
+          }
+        });
+      }
+    });
   }
 
   showVAInstanceLicense(_instance: any) {
@@ -138,12 +168,56 @@
     })
   }
 
-  backupVAInstance(_instance: any) {}
-
-  showVNCConsole(_instance: any) {}
-
-  deleteVAInstance(_instance: any) {}
+  backupVAInstance(_instance: any) {
+    this.dialogConfig.data = {
+      deviceName: _instance?.avx_name,
+      deviceId: _instance?.avx_id,
+      instanceName: _instance?.va_name,
+      avxInstances: [_instance],
+      devices: [{id: _instance?.avx_id, name: _instance?.avx_name}],
+    }
+    const dialogRef = this.dialog.open(CreateAVXVABackupDialog, this.dialogConfig);
+    dialogRef.afterClosed().subscribe(isAdded => {
+      if (isAdded) {
+        this.getAVXDevices();
+      }
+    })
+  }
 
+  showVNCConsole(_instance: any) {
+  }
+
+  deleteVAInstance(_instance: any) {
+    let instanceName = _instance?.va_name;
+    let confirmMsg = `Are you sure you want to delete the instance "${instanceName}"?`
+    this._confirmation.openConfirmDialog({
+      title: `Delete ${instanceName}?`,
+      message: confirmMsg,
+      confirmButtonText: `Delete`,
+      cancelButtonText: 'Cancel',
+      confirmButtonColor: 'warn',
+      cancelButtonColor: 'primary'
+    }).subscribe(result => {
+      if (result) {
+        this._avx.deleteVAInstance(_instance.avx_id, _instance?.va_name)
+          .pipe(take(1)).subscribe({
+          next: (result: any) => {
+            if (result && result.length > 0) {
+              if (result[0]) {
+                this._notification.showSuccess(`The instance has been deleted successfully.`);
+              } else {
+                this._notification.showError(`Failed to delete instance ${instanceName}.`);
+              }
+            }
+          },
+          error: error => {
+            this._notification.showError(`Error: ${error?.message}`);
+            console.log(error);
+          }
+        });
+      }
+    });
+  }
 }
 
 @Component({
@@ -220,6 +294,7 @@
 
   dataColumns: Array<string> = ['key', 'value'];
   dataSource = new MatTableDataSource([]);
+  vaSerialNumber: any = '';
 
   getAVXVAInstanceShowVersion() {
     this._avx.getAVXVAInstanceShowVersion(this.data?.instance?.avx_id, this.data?.instance?.va_name).pipe(take(1)).subscribe({
@@ -234,6 +309,7 @@
             'Expiry Date': result[0].expired_date,
             'Licensed Features': result[0].licensed_features,
           }
+          this.vaSerialNumber = result[0].serial;
           this.dataSource = this._utils.processConfigData(licenseFields);
         }
       },
@@ -244,8 +320,18 @@
     });
   }
 
-  updateVALicense() {
+  dialog = inject(MatDialog);
+  dialogConfig = new MatDialogConfig();
 
+  updateVALicense() {
+    this.dialogRef.close(false);
+    this.dialogConfig.data = {
+      serialNumber: this.vaSerialNumber,
+      instance: this.data?.instance,
+    }
+    const dialogRef = this.dialog.open(UpdateVALicenseDialog, this.dialogConfig);
+    dialogRef.afterClosed().subscribe(() => {
+    })
   }
 
   onCancel(): void {
@@ -253,6 +339,7 @@
   }
 }
 
+// ToDo: Simplify the VA instance creation and implement it later.
 @Component({
   selector: 'create-avx-va-instance',
   templateUrl: './create-avx-va-instance.html',
@@ -262,6 +349,8 @@
   readonly dialogRef = inject(MatDialogRef<CreateAVXVAInstanceDialog>);
   readonly data = inject(MAT_DIALOG_DATA);
   configForm: FormGroup;
+  allocationForm: FormGroup;
+  isLinear: boolean = false;
 
   constructor(
     private _fb: FormBuilder,
@@ -276,6 +365,11 @@
       va_size: ['', [Validators.required]],
       domain: ['', [Validators.required]],
     })
+    this.allocationForm = this._fb.group({
+      mode: ['auto', [Validators.required]],
+      cpu: [1, [Validators.required]],
+      memory: [1, [Validators.required]],
+    })
   }
 
   ngOnInit() {
@@ -321,11 +415,59 @@
     });
   }
 
+  resourceMeta: any = {};
+
+  getAutoAssignResources() {
+    this.allocateVAResources();
+    this.resourceMeta = {};
+    let payload: string = `domain=${this.configForm?.value?.domain}&va_size=${this.configForm?.value?.va_size}`;
+    this._avx.getAutoAssignResources(this.configForm?.value?.avxId, payload).pipe(take(1)).subscribe({
+      next: (result: any) => {
+        this.resourceMeta = result;
+      },
+      error: error => {
+        this._notification.showError(`Error: ${error?.message}`);
+        console.log(error);
+      }
+    });
+  }
+
+  allocateVAResources() {
+    let va_size = this.configForm?.value?.va_size;
+    let cpu = 1;
+    let memory = 1;
+    console.log(this.configForm?.value);
+    if (va_size === 'shared-entry') {
+      cpu = 1;
+      memory = 2;
+    } else if (va_size === 'entry') {
+      cpu = 1;
+      memory = 2;
+    } else if (va_size === 'small') {
+      cpu = 2;
+      memory = 4;
+    } else if (va_size === 'medium') {
+      cpu = 4;
+      memory = 8;
+    } else if (va_size === 'large') {
+      cpu = 8;
+      memory = 16;
+    }
+    this.allocationForm.patchValue({
+      cpu: cpu,
+      memory: memory,
+    })
+  }
+
   vaSizes: any = [];
 
   getVASizes() {
-    this.vaSizes = this.configForm.value?.image_name?.size.split(',');
-    console.log(this.vaSizes);
+    const sizeString = this.configForm.value?.image_name?.size;
+    if (sizeString) {
+      this.vaSizes = sizeString.split(',').map((_size: string) => _size.trim());
+    } else {
+      this.vaSizes = [];
+    }
   }
 
   onCancel(): void {
@@ -336,3 +478,74 @@
 
   }
 }
+
+@Component({
+  selector: 'update-va-license',
+  templateUrl: './update-va-license.html',
+  imports: [SharedModule],
+})
+export class UpdateVALicenseDialog {
+  readonly dialogRef = inject(MatDialogRef<UpdateVALicenseDialog>);
+  readonly data = inject(MAT_DIALOG_DATA);
+
+  licenseForm: FormGroup;
+  errorMsg = '';
+
+  constructor(
+    private _fB: FormBuilder,
+    private _avx: AvxService,
+    private _notification: NotificationService,
+    private _utils: UtilsService,
+  ) {
+    this.licenseForm = this._fB.group({
+      licenseKey: ['', Validators.required],
+    })
+  }
+
+  generateLicenseRequestFile() {
+    this._avx.createVAPVLicenseRequestFile(this.data?.instance?.avx_id, this.data?.instance?.va_name, this.data?.instance?.va_size)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          this._utils.downloadTextFile(result, `${this.data?.instance?.va_name}_license_request.txt`);
+          this.dialogRef.close(true);
+        },
+        error: (err: any) => {
+          console.log(err);
+          this._notification.showError('Failed to update the VA license.');
+        }
+      })
+  }
+
+  onSubmit() {
+    if (this.licenseForm.invalid) {
+      console.log(this.licenseForm.value);
+      this.licenseForm.markAllAsTouched();
+      return;
+    }
+
+    this.errorMsg = '';
+    this._avx.updateVAPVLicenseKey(this.data?.instance?.avx_id, this.data?.instance?.va_name, this.licenseForm?.value?.licenseKey)
+      .pipe(take(1))
+      .subscribe({
+        next: (result: any) => {
+          if (result && result.length > 1) {
+            if (result[0]) {
+              this._notification.showSuccess(`The VA license has been updated successfully!`);
+              this.dialogRef.close(true);
+            } else {
+              this.errorMsg = result[1];
+              this._notification.showError(`Failure - ${result[1]}`);
+            }
+          }
+        },
+        error: (err: any) => {
+          this._notification.showError('Failed to update the VA license.');
+        }
+      })
+  }
+
+  onCancel(): void {
+    this.dialogRef.close(false);
+  }
+}
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/create-avx-va-instance.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/create-avx-va-instance.html	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/create-avx-va-instance.html	(working copy)
@@ -1,99 +1,159 @@
 <h2 mat-dialog-title> Create AVX Instance</h2>
 <mat-dialog-content>
-  <form
-    (ngSubmit)="onSubmit()"
-    [formGroup]="configForm"
-  >
-    <div class="form-field-wrapper">
-      <label for="avxId" class="form-label">AVX *</label>
-      <mat-form-field appearance="outline" subscriptSizing="dynamic">
-        <mat-select formControlName="avxId" (selectionChange)="getAVXDeviceImages()">
-          @for (_device of data?.devices; track _device) {
-            <mat-option [value]="_device?.id">{{ _device?.name }}</mat-option>
-          }
-        </mat-select>
-        @if (configForm.get('avxId')?.invalid && configForm.get('avxId')?.touched) {
-          <mat-error>
-            @if (configForm.get('avxId')?.errors?.['required']) {
-              Device is required.
-            } @else {
-              Invalid device format.
+  <mat-stepper [linear]="isLinear" #stepper>
+    <mat-step [stepControl]="configForm" label="AVX">
+      <form
+        (ngSubmit)="onSubmit()"
+        [formGroup]="configForm"
+      >
+        <div class="form-field-wrapper">
+          <label for="avxId" class="form-label">AVX *</label>
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <mat-select formControlName="avxId" (selectionChange)="getAVXDeviceImages()">
+              @for (_device of data?.devices; track _device) {
+                <mat-option [value]="_device?.id">{{ _device?.name }}</mat-option>
+              }
+            </mat-select>
+            @if (configForm.get('avxId')?.invalid && configForm.get('avxId')?.touched) {
+              <mat-error>
+                @if (configForm.get('avxId')?.errors?.['required']) {
+                  Device is required.
+                } @else {
+                  Invalid device format.
+                }
+              </mat-error>
             }
-          </mat-error>
-        }
-      </mat-form-field>
-    </div>
-    <div class="form-field-wrapper">
-      <label for="va_name" class="form-label">VA Name *</label>
-      <mat-form-field appearance="outline" subscriptSizing="dynamic">
-        <input
-          id="va_name"
-          formControlName="va_name"
-          matInput
-          placeholder="VA Name"
-          type="text"
-        />
-        @if (configForm.get('va_name')?.invalid && configForm.get('va_name')?.touched) {
-          <mat-error>
-            @if (configForm.get('va_name')?.errors?.['required']) {
-              VA Name is required.
+          </mat-form-field>
+        </div>
+        <div class="form-field-wrapper">
+          <label for="va_name" class="form-label">VA Name *</label>
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <input
+              id="va_name"
+              formControlName="va_name"
+              matInput
+              placeholder="VA Name"
+              type="text"
+            />
+            <mat-hint>Maximum memory - 16G</mat-hint>
+            @if (configForm.get('va_name')?.invalid && configForm.get('va_name')?.touched) {
+              <mat-error>
+                @if (configForm.get('va_name')?.errors?.['required']) {
+                  VA Name is required.
+                }
+              </mat-error>
             }
-          </mat-error>
-        }
-      </mat-form-field>
-    </div>
-    <div class="form-field-wrapper">
-      <label for="image_name" class="form-label">Image *</label>
-      <mat-form-field appearance="outline" subscriptSizing="dynamic">
-        <mat-select formControlName="image_name" (selectionChange)="getVASizes()">
-          @for (_image of deviceImages; track _image) {
-            <mat-option [value]="_image">{{ _image?.image_name }}</mat-option>
-          }
-        </mat-select>
-        @if (configForm.get('image_name')?.invalid && configForm.get('image_name')?.touched) {
-          <mat-error>
-            @if (configForm.get('image_name')?.errors?.['required']) {
-              Image is required.
+          </mat-form-field>
+        </div>
+        <div class="form-field-wrapper">
+          <label for="image_name" class="form-label">Image *</label>
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <mat-select formControlName="image_name" (selectionChange)="getVASizes()">
+              @for (_image of deviceImages; track _image) {
+                <mat-option [value]="_image">{{ _image?.image_name }}</mat-option>
+              }
+            </mat-select>
+            @if (configForm.get('image_name')?.invalid && configForm.get('image_name')?.touched) {
+              <mat-error>
+                @if (configForm.get('image_name')?.errors?.['required']) {
+                  Image is required.
+                }
+              </mat-error>
             }
-          </mat-error>
-        }
-      </mat-form-field>
-    </div>
-    <div class="form-field-wrapper">
-      <label for="va_size" class="form-label">VA Size *</label>
-      <mat-form-field appearance="outline" subscriptSizing="dynamic">
-        <mat-select formControlName="va_size">
-          @for (_size of vaSizes; track _size) {
-            <mat-option [value]="_size">{{ _size }}</mat-option>
-          }
-        </mat-select>
-        @if (configForm.get('va_size')?.invalid && configForm.get('va_size')?.touched) {
-          <mat-error>
-            @if (configForm.get('va_size')?.errors?.['required']) {
-              VA size is required.
+          </mat-form-field>
+        </div>
+        <div class="form-field-wrapper">
+          <label for="va_size" class="form-label">VA Size *</label>
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <mat-select formControlName="va_size">
+              @for (_size of vaSizes; track _size) {
+                <mat-option [value]="_size">{{ _size }}</mat-option>
+              }
+            </mat-select>
+            @if (configForm.get('va_size')?.invalid && configForm.get('va_size')?.touched) {
+              <mat-error>
+                @if (configForm.get('va_size')?.errors?.['required']) {
+                  VA size is required.
+                }
+              </mat-error>
             }
-          </mat-error>
-        }
-      </mat-form-field>
-    </div>
-    <div class="form-field-wrapper">
-      <label for="domain" class="form-label">AVX Domain *</label>
-      <mat-form-field appearance="outline" subscriptSizing="dynamic">
-        <mat-select formControlName="domain">
-          @for (_domain of avxDomains; track _domain) {
-            <mat-option [value]="_domain">{{ _domain }}</mat-option>
-          }
-        </mat-select>
-        @if (configForm.get('domain')?.invalid && configForm.get('domain')?.touched) {
-          <mat-error>
-            @if (configForm.get('domain')?.errors?.['required']) {
-              Domain is required.
+          </mat-form-field>
+        </div>
+        <div class="form-field-wrapper">
+          <label for="domain" class="form-label">AVX Domain *</label>
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <mat-select formControlName="domain" (selectionChange)="getAutoAssignResources()">
+              @for (_domain of avxDomains; track _domain) {
+                <mat-option [value]="_domain">{{ _domain }}</mat-option>
+              }
+            </mat-select>
+            @if (configForm.get('domain')?.invalid && configForm.get('domain')?.touched) {
+              <mat-error>
+                @if (configForm.get('domain')?.errors?.['required']) {
+                  Domain is required.
+                }
+              </mat-error>
             }
-          </mat-error>
-        }
-      </mat-form-field>
-    </div>
-  </form>
+          </mat-form-field>
+        </div>
+        <div>
+          <button matButton matStepperNext>Next</button>
+        </div>
+      </form>
+    </mat-step>
+    <mat-step [stepControl]="allocationForm" label="Resource Allocation">
+      <form [formGroup]="allocationForm">
+        <div class="form-field-wrapper">
+        <mat-radio-group aria-label="Allocation Mode" formControlName="mode">
+          <mat-radio-button value="auto">Auto</mat-radio-button>
+          <mat-radio-button value="manual">Manual</mat-radio-button>
+        </mat-radio-group>
+        </div>
+        <div class="form-field-wrapper">
+          <label for="cpu" class="form-label">CPU Threads *</label>
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <input
+              id="cpu"
+              formControlName="cpu"
+              matInput
+              placeholder="Number of CPU Threads"
+              type="number"
+            />
+            @if (configForm.get('cpu')?.invalid && configForm.get('cpu')?.touched) {
+              <mat-error>
+                @if (configForm.get('cpu')?.errors?.['required']) {
+                  CPU threads is required.
+                }
+              </mat-error>
+            }
+          </mat-form-field>
+        </div>
+        <div class="form-field-wrapper">
+          <label for="memory" class="form-label">Memory (GB) *</label>
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+            <input
+              id="memory"
+              formControlName="memory"
+              matInput
+              placeholder="Memory"
+              type="number"
+            />
+            @if (configForm.get('memory')?.invalid && configForm.get('memory')?.touched) {
+              <mat-error>
+                @if (configForm.get('memory')?.errors?.['required']) {
+                  Memory is required.
+                }
+              </mat-error>
+            }
+          </mat-form-field>
+        </div>
+        <div>
+          <button matButton matStepperPrevious>Back</button>
+          <button matButton matStepperNext>Next</button>
+        </div>
+      </form>
+    </mat-step>
+  </mat-stepper>
 </mat-dialog-content>
 <mat-dialog-actions>
   <button
@@ -102,10 +162,4 @@
     (click)="onCancel()">
     Close
   </button>
-  <button
-    mat-button
-    color="basic"
-    (click)="onSubmit()">
-    Submit
-  </button>
 </mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/update-va-license.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/update-va-license.html	(nonexistent)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/avx-va-instances/update-va-license.html	(working copy)
@@ -0,0 +1,66 @@
+<h2 mat-dialog-title class="dialog-title">Update License</h2>
+
+<mat-dialog-content>
+  <mat-card>
+    <mat-card-header>
+      <mat-card-title>Import License Key</mat-card-title>
+    </mat-card-header>
+    <mat-card-content>
+      <span>If you already have a license key, please paste it into the text box below and click Import.</span>
+      <form
+        [formGroup]="licenseForm"
+      >
+        <div class="form-field-wrapper">
+          @if (data.serialNumber) {
+            <p>Serial number: {{ data.serialNumber }}</p>
+          }
+        </div>
+        <div class="form-field-wrapper">
+          <mat-form-field appearance="outline" subscriptSizing="dynamic">
+        <textarea matInput rows="3" formControlName="licenseKey" id="licenseKey"
+                  placeholder="License Key"></textarea>
+          </mat-form-field>
+        </div>
+        <div class="button-container">
+          <button
+            mat-raised-button
+            color="basic"
+            (click)="onSubmit()">
+            Submit
+          </button>
+        </div>
+      </form>
+      <span class="delete-icon"> {{errorMsg}}</span>
+    </mat-card-content>
+  </mat-card>
+  <mat-card>
+    <mat-card-header>
+      <mat-card-title>Generate License Request File</mat-card-title>
+    </mat-card-header>
+    <mat-card-content>
+      <span>If you do not have a license, please contact Array Networks Customer Support (via phone or email) to purchase a valid license by sending the license request file.</span>
+      <form
+        [formGroup]="licenseForm"
+      >
+        <div class="button-container">
+          <button
+            type="button"
+            mat-raised-button
+            color="basic"
+            (click)="generateLicenseRequestFile()">
+            Generate
+          </button>
+        </div>
+      </form>
+    </mat-card-content>
+  </mat-card>
+</mat-dialog-content>
+<mat-dialog-actions align="center">
+  <button
+    type="submit"
+    mat-button
+    color="basic"
+    (click)="onCancel()">
+    Cancel
+  </button>
+</mat-dialog-actions>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-details/device-details.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-details/device-details.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/device-details/device-details.ts	(working copy)
@@ -7,7 +7,7 @@
 import {take} from 'rxjs/operators';
 import {NotificationService} from '../../../services/notification';
 import {DeviceService} from '../../../services/device-service';
-import {KeyValuePair} from '../../../services/utils-service';
+import {KeyValuePair, UtilsService} from '../../../services/utils-service';
 
 @Component({
   selector: 'app-device-details',
@@ -37,6 +37,7 @@
     private _router: Router,
     private _device: DeviceService,
     private _notification: NotificationService,
+    private _utils: UtilsService,
     private _fB: FormBuilder) {
     this.deviceSettingsForm = this._fB.group({
       portNumber: ['9997', [Validators.required, Validators.min(0), Validators.max(65535)]],
@@ -81,8 +82,8 @@
       }
     });
     this.isMonitorEnabled = this.deviceData?.snmp_general?.snmp_enable;
-    this.licenseDataSource = this.processConfigData(licenseData);
-    this.systemDataSource = this.processConfigData(systemData);
+    this.licenseDataSource = this._utils.processConfigData(licenseData);
+    this.systemDataSource = this._utils.processConfigData(systemData);
 
     this.deviceSettingsForm.patchValue({
       portNumber: this.deviceData['restapi_port'],
@@ -121,51 +122,6 @@
     this._router.navigate(['/inventory/devices']);
   }
 
-  processConfigData(configData: any): any {
-    let dataSource = new MatTableDataSource<KeyValuePair>();
-    if (configData) {
-      const dataArray: KeyValuePair[] = Object.keys(configData).map(key => ({
-        key: this.formatKey(key), // Format the key for display
-        value: configData[key] === "" ? "N/A" : configData[key] // Display "N/A" for empty strings
-      }));
-      dataSource.data = dataArray;
-    } else {
-      dataSource.data = [];
-    }
-    return dataSource;
-  }
-
-  formatKey(key: string): string {
-    const rawReplacements: { [abbreviation: string]: string } = {
-      'bld': 'build',
-      'hw': 'hardware',
-    };
-
-    let processedKey = key;
-    for (const abbr in rawReplacements) {
-      if (Object.prototype.hasOwnProperty.call(rawReplacements, abbr)) {
-        const pattern = new RegExp(`(^|_)${abbr}(_|$)`, 'gi');
-        processedKey = processedKey.replace(pattern, (match, p1, p2) => {
-          return p1 + rawReplacements[abbr] + p2;
-        });
-        const directPattern = new RegExp(`^${abbr}$`, 'gi');
-        processedKey = processedKey.replace(directPattern, rawReplacements[abbr]);
-      }
-    }
-
-    let formattedKey = processedKey
-      .replace(/_/g, ' ')
-      .replace(/([A-Z])/g, ' $1')
-      .replace(/^./, (str) => str.toUpperCase())
-      .replace(/\s+/g, ' ').trim();
-
-    const wordsToForceUppercase = ['cpu', 'ram', 'ssl'];
-    const uppercasePattern = new RegExp(`\\b(${wordsToForceUppercase.join('|')})\\b`, 'gi');
-    formattedKey = formattedKey.replace(uppercasePattern, (match) => match.toUpperCase());
-
-    return formattedKey;
-  }
-
   onMonitorToggleChange(event: any): void {
     let payload = {
       id: this.deviceData?.id,
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/devices/devices.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/devices/devices.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/devices/devices.ts	(working copy)
@@ -11,7 +11,7 @@
 import {CustomValidators} from '../../../utils/custom-validators';
 import {Router} from '@angular/router';
 import {GlobalSerialPipe} from '../../../pipes/global-serial-pipe';
-import {KeyValuePair} from '../../../services/utils-service';
+import {KeyValuePair, UtilsService} from '../../../services/utils-service';
 
 @Component({
   selector: 'app-devices',
@@ -454,56 +454,12 @@
   deviceMeta: any = {}
 
 
-  constructor() {
+  constructor(
+    private _utils: UtilsService
+  ) {
     this.deviceMeta.name = this.data.name;
     delete this.data.name;
-    this.licenseDataSource = this.processConfigData(this.data);
-  }
-
-
-  processConfigData(configData: any): any {
-    let dataSource = new MatTableDataSource<KeyValuePair>();
-    if (configData) {
-      const dataArray: KeyValuePair[] = Object.keys(configData).map(key => ({
-        key: this.formatKey(key), // Format the key for display
-        value: configData[key] === "" ? "N/A" : configData[key] // Display "N/A" for empty strings
-      }));
-      dataSource.data = dataArray;
-    } else {
-      dataSource.data = [];
-    }
-    return dataSource;
-  }
-
-  formatKey(key: string): string {
-    const rawReplacements: { [abbreviation: string]: string } = {
-      'bld': 'build',
-      'hw': 'hardware',
-    };
-
-    let processedKey = key;
-    for (const abbr in rawReplacements) {
-      if (Object.prototype.hasOwnProperty.call(rawReplacements, abbr)) {
-        const pattern = new RegExp(`(^|_)${abbr}(_|$)`, 'gi');
-        processedKey = processedKey.replace(pattern, (match, p1, p2) => {
-          return p1 + rawReplacements[abbr] + p2;
-        });
-        const directPattern = new RegExp(`^${abbr}$`, 'gi');
-        processedKey = processedKey.replace(directPattern, rawReplacements[abbr]);
-      }
-    }
-
-    let formattedKey = processedKey
-      .replace(/_/g, ' ')
-      .replace(/([A-Z])/g, ' $1')
-      .replace(/^./, (str) => str.toUpperCase())
-      .replace(/\s+/g, ' ').trim();
-
-    const wordsToForceUppercase = ['cpu', 'ram', 'ssl'];
-    const uppercasePattern = new RegExp(`\\b(${wordsToForceUppercase.join('|')})\\b`, 'gi');
-    formattedKey = formattedKey.replace(uppercasePattern, (match) => match.toUpperCase());
-
-    return formattedKey;
+    this.licenseDataSource = this._utils.processConfigData(this.data);
   }
 
   updateLicense() {
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(revision 2728)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(working copy)
@@ -195,17 +195,22 @@
   GET_AVX_VA_BACKUP_BY_DEVICE_ID_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VABackup/_get_list_data`,
   GET_AVX_VA_HOST_BY_DEVICE_ID_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VAInstance/_get_list_data?key=[%22tgt_name%22,%22type%22,%22va_name%22,%22ip%22,%22product_category%22,%22va_size%22,%22status%22,%22va_vncport%22,%22product_name%22,%22vendor%22,%22boottime%22,%22type%22]`,
   CREATE_AVX_BACKUP_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VAInstance/_perform`,
-  SHUTDOWN_AVX_VA_INSTANCE_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VAInstance/_update/va_name`,
+  POWER_ON_OFF_AVX_VA_INSTANCE_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VAInstance/_update/va_name`,
   DELETE_AVX_VA_BACKUP_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VABackup/_delete`,
   IMPORT_AVX_VA_BACKUP_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VABackup/_perform`,
   EXPORT_AVX_VA_BACKUP_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VABackup/_perform`,
   RESTORE_AVX_VA_BACKUP_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VABackup/_perform`,
+  RESTORE_CREATE_AVX_VA_BACKUP_URL: `${PREFIX}proxy_req_dev/pipe/post`,
   GET_AVX_IMAGES_URL: `${PREFIX}proxy_req_dev/api/avx/va/image/VAImageManagement/_get_list_data`,
   GET_AVX_INSTANCE_CONFIG_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/ShowVARunningConfig/_get_asso_list_data`,
   GET_AVX_INSTANCE_PORT_MAPPING_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/ShowVAPortMapping/_get_asso_list_data`,
   GET_AVX_INSTANCE_PLATFORM_RESOURCES_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VAInstance/_field_group/va_name/`,
   GET_AVX_VA_INSTANCE_BASIC_CONFIG_URL: `${PREFIX}/proxy_req_dev/va_basic_config_by_va_run`,
   GET_AVX_VA_INSTANCE_SHOW_VERSION_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/ShowVAVersion/_get_asso_list_data`,
+  GET_AUTO_ASSIGN_RESOURCES_URL: `${PREFIX}/proxy_req_dev/avx/va/instance/auto_assign_resources`,
+  UPDATE_VAPV_LICENSE_KEY_URL: `${PREFIX}/proxy_req_dev/api/avx/system/system_mgmt/VaLicenseAssign/_perform?action=Assign`,
+  CREATE_VAPV_LICENSE_REQUEST_FILE_URL: `${PREFIX}/proxy_req_dev/lic_requset_file/generate`,
+  DELETE_AVX_VA_INSTANCE_URL: `${PREFIX}/proxy_req_dev/api/avx/va/instance/VAInstance/_delete`,
   // OpenSearch
   GET_LOGS_FROM_OPENSEARCH_URL: `${PREFIX}/log-analysis/search`,
 } as const; // Makes properties readonly
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/avx-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/avx-service.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/avx-service.ts	(working copy)
@@ -124,7 +124,6 @@
   }
 
   restoreAVXVABackup(deviceId: string | null, rawPayload: any) {
-    console.log(rawPayload, deviceId);
     return this.http.post(URLS.RESTORE_AVX_VA_BACKUP_URL, rawPayload, {
         csrf: true,
         isFormData: false,
@@ -136,9 +135,86 @@
     );
   }
 
-//   shutdown
-// /proxy_req_dev/api/avx/va/instance/VAInstance/_update/va_name/%22vAMP_3_6%22
-//   post_data=%7B%22status%22%3Afalse%7D
+  createInstanceFromBackup(deviceId: string | null, rawPayload: any) {
+    let payload = `interactive_msg=${rawPayload?.newName}`;
+    return this.http.post(`${URLS.RESTORE_CREATE_AVX_VA_BACKUP_URL}/${rawPayload?.pipeId}`, payload, {
+        csrf: true,
+        isFormData: false,
+        csrfInFormData: true
+      }, [
+        {name: 'Cm-Data', value: deviceId},
+        {name: 'Cm-Type', value: 'host'}
+      ]
+    );
+  }
+
+  updateAVXInstancePowerStatus(deviceId: any, instanceName: any, status: any) {
+    let payload: any = `post_data=%7B%22status%22%3A${status}%7D`;
+    return this.http.post(`${URLS.POWER_ON_OFF_AVX_VA_INSTANCE_URL}/%22${instanceName}%22`, payload, {
+        csrf: true,
+        isFormData: false,
+        csrfInFormData: true
+      }, [
+        {name: 'Cm-Data', value: deviceId},
+        {name: 'Cm-Type', value: 'host'}
+      ]
+    );
+  }
+
+  updateVAPVLicenseKey(deviceId: any, instanceName: any, licenseKey: any) {
+    let payload: any = `action=Assign&options=%7B%22va_name%22%3A%22${instanceName}%22%2C%22license_type%22%3A%22Individual%22%2C%22license_key%22%3A%22${licenseKey}%22%2C%22product_type%22%3A%22apv%22%7D`;
+    console.log(payload);
+    return this.http.post(URLS.UPDATE_VAPV_LICENSE_KEY_URL, payload, {
+        csrf: true,
+        isFormData: false,
+        csrfInFormData: true
+      }, [
+        {name: 'Cm-Data', value: deviceId},
+        {name: 'Cm-Type', value: 'host'}
+      ]
+    );
+  }
+
+  createVAPVLicenseRequestFile(deviceId: any, instanceName: any, vaSize: any) {
+    let payload: any = `post_data=%7B%22current_va_name%22%3A%22${instanceName}%22%2C%22licensed_vs%22%3A%22%22%2C%22licensed_user%22%3A%22%22%2C%22licensed_s2s%22%3A%22%22%2C%22licensed_vxag%22%3A%22%22%2C%22va_size%22%3A%22${vaSize}%22%7D`;
+    return this.http.post(URLS.CREATE_VAPV_LICENSE_REQUEST_FILE_URL, payload, {
+        csrf: true,
+        isFormData: false,
+        csrfInFormData: true,
+        responseType: 'text'
+      }, [
+        {name: 'Cm-Data', value: deviceId},
+        {name: 'Cm-Type', value: 'host'}
+      ]
+    );
+  }
+
+  deleteVAInstance(deviceId: any, instanceName: any) {
+    let payload: any = `pk=%7B%22va_name%22%3A%22${instanceName}%22%7D`;
+    return this.http.post(URLS.DELETE_AVX_VA_INSTANCE_URL, payload, {
+        csrf: true,
+        isFormData: false,
+        csrfInFormData: true,
+        responseType: 'text'
+      }, [
+        {name: 'Cm-Data', value: deviceId},
+        {name: 'Cm-Type', value: 'host'}
+      ]
+    );
+  }
+
+  getAutoAssignResources(deviceId: string | null, rawPayload: any) {
+    return this.http.post(URLS.GET_AUTO_ASSIGN_RESOURCES_URL, rawPayload, {
+        csrf: true,
+        isFormData: false,
+        csrfInFormData: true
+      }, [
+        {name: 'Cm-Data', value: deviceId},
+        {name: 'Cm-Type', value: 'host'}
+      ]
+    );
+  }
+
   getAVXDeviceLogSettings(deviceId: any) {
     return this.http.get(URLS.GET_AVX_DEVICE_LOG_SETTINGS_URL, {}, [
       {name: 'Cm-Data', value: deviceId},
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/http.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/http.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/http.ts	(working copy)
@@ -15,6 +15,8 @@
   isFormData?: boolean; // For multipart/form-data (e.g., file uploads)
   headers?: { [key: string]: string };
   params?: { [key: string]: string | number | boolean };
+  responseType?: 'arraybuffer' | 'blob' | 'json' | 'text';
+  observe?: 'body';
 };
 
 @Injectable({ providedIn: 'root' })
@@ -25,6 +27,7 @@
     headers: HttpHeaders;
     context: HttpContext;
     params?: HttpParams;
+    observe?: 'body';
   } {
     let context = new HttpContext()
       .set(ADD_CSRF_TO_PAYLOAD, options?.csrf ?? false)
@@ -34,11 +37,14 @@
     const params = options?.params
       ? new HttpParams({ fromObject: options.params as any })
       : undefined;
+    const { responseType, observe } = options || {};
 
     return {
       headers: new HttpHeaders(headers),
       context,
-      ...(params ? { params } : {})
+      ...(params ? { params } : {}),
+      ...(responseType ? { responseType } : {}),
+      ...(observe ? { observe } : {})
     };
   }
 
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/utils-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/utils-service.ts	(revision 2726)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/utils-service.ts	(working copy)
@@ -1,6 +1,7 @@
 import {Injectable} from '@angular/core';
 import {MatTableDataSource} from '@angular/material/table';
 import {BytesPipe} from '../pipes/bytes-pipe';
+import { saveAs } from 'file-saver';
 
 export interface DeviceTypeStatus {
   connected: number;
@@ -72,9 +73,9 @@
     }
     let formattedKey = processedKey
       .replace(/_/g, ' ')
-      .replace(/([A-Z])/g, ' $1')
-      .replace(/^./, (str) => str.toUpperCase())
-      .replace(/\s+/g, ' ').trim();
+      .replace(/([a-z])([A-Z])/g, '$1 $2')
+      .replace(/\s+/g, ' ').trim()
+      .replace(/^./, (str) => str.toUpperCase());
 
     const wordsToForceUppercase = ['cpu', 'ram', 'ssl', 'adc', 'apv', 'vpn', 'waf', 'asf'];
     const uppercasePattern = new RegExp(`\\b(${wordsToForceUppercase.join('|')})\\b`, 'gi');
@@ -270,4 +271,9 @@
     });
   }
 
+  downloadTextFile(data: any, filename: string): void {
+    const fileContent = (typeof data === 'object') ? JSON.stringify(data, null, 2) : String(data);
+    const blob = new Blob([fileContent], { type: 'text/plain;charset=utf-8' });
+    saveAs(blob, filename);
+  }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/shared/shared-module.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/shared/shared-module.ts	(revision 2728)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/shared/shared-module.ts	(working copy)
@@ -43,6 +43,7 @@
   NgxMatDatepickerInput,
   NgxMatDatetimepicker,
 } from '@ngxmc/datetime-picker';
+import {MatStepperModule} from '@angular/material/stepper';
 
 const allSolidIcons = Object.values(solidIcons).filter((icon: any) => icon.iconName);
 const allRegularIcons = Object.values(regularIcons).filter((icon: any) => icon.iconName);
@@ -105,6 +106,7 @@
   MatTimepickerModule,
   MatPaginatorModule,
   MatProgressBarModule,
+  MatStepperModule,
 ];
 
 const thirdPartyModules = [
