Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/djproject/urls.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/djproject/urls.py	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/djproject/urls.py	(working copy)
@@ -1,7 +1,7 @@
 from django.urls import re_path
 
 from hive.controller.apv_services_metrics import handle_get_top_apv_virtual_services_metrics, handle_get_top_apv_real_services_metrics, handle_get_top_llb_metrics
-from hive.controller.devices_metrics import handle_get_top_devices_metrics
+from hive.controller.devices_metrics import handle_get_top_devices_metrics, handle_get_devices_network_metrics
 from hive.router import *
 from hive.session import login_handler, logout_handler, register_complete, app_login_handler, app_logout_handler
 from hive.theme import switch_theme
@@ -122,6 +122,7 @@
     re_path(r'^top-apv-real-metrics$', handle_get_top_apv_real_services_metrics),
     re_path(r'^top-apv-llb-metrics$', handle_get_top_llb_metrics),
     re_path(r'^top-ssl-vpn-metrics$', handle_get_top_ssl_vpn_metrics),
+    re_path(r'^devices-network-metrics$', handle_get_devices_network_metrics),
 ]
 
 handler404 = 'hive.shared.custom_404_view'
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.config.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.config.ts	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.config.ts	(working copy)
@@ -8,7 +8,6 @@
 import {provideRouter} from '@angular/router';
 import {routes} from './app.routes';
 import {provideHttpClient, withFetch, withInterceptors} from '@angular/common/http';
-import {provideAnimations} from '@angular/platform-browser/animations';
 import {csrfInterceptorFn} from './interceptors/csrf-interceptor';
 import {loadingInterceptorFn} from './interceptors/loading-interceptor-interceptor';
 import {Auth} from './services/auth';
@@ -27,7 +26,6 @@
       withFetch(),
       withInterceptors([csrfInterceptorFn, loadingInterceptorFn, authInterceptorFn])
     ),
-    provideAnimations(),
     provideNativeDateAdapter(),
     provideEchartsCore({echarts}),
   ]
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 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.routes.ts	(working copy)
@@ -60,6 +60,7 @@
 import {AlertThresholds} from './components/sub-components/alert-thresholds/alert-thresholds';
 import {AlertRulesOverview} from './components/sub-components/alert-rules-overview/alert-rules-overview';
 import {EventMonitoringOverview} from './components/sub-components/event-monitoring-overview/event-monitoring-overview';
+import {ControlPanel} from "./components/control-panel/control-panel";
 
 
 export const routes: Routes = [
@@ -292,6 +293,7 @@
         ]
       },
       {path: 'observability', component: Observability, data: {roles: ['super_admin', 'device_admin', 'common_admin']}},
+      {path: 'control-panel', component: ControlPanel, data: {roles: ['super_admin', 'device_admin', 'common_admin']}},
       {path: '', redirectTo: 'dashboard', pathMatch: 'full'},
       // {path: '**', redirectTo: 'dashboard'}
     ]
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.ts	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/app.ts	(working copy)
@@ -40,18 +40,23 @@
 
     this.currentUser$ = this.authService.currentUser;
 
-    this.showNavigation$ = combineLatest([
-      this.currentUser$,
-      this.router.events.pipe(
-        filter(event => event instanceof NavigationEnd),
+    const currentUrl$ = this.router.events.pipe(
+        filter((event): event is NavigationEnd => event instanceof NavigationEnd),
         map((event: NavigationEnd) => event.urlAfterRedirects),
         startWith(this.router.url)
-      )
+    );
+
+    this.showNavigation$ = combineLatest([
+      this.currentUser$,
+      currentUrl$
     ]).pipe(
-      map(([user, url]) => {
-        const webConsoleStandalonePath = '/inventory/web-console';
-        return user !== null && !url.includes(webConsoleStandalonePath);
-      })
+        map(([user, url]) => {
+          const webConsoleStandalonePath = '/inventory/web-console';
+
+          return user !== null &&
+              url !== '/control-panel' &&
+              !url.includes(webConsoleStandalonePath);
+        })
     );
   }
 
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/charts-config.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/charts-config.ts	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/charts-config.ts	(working copy)
@@ -2,7 +2,7 @@
 import {BarChart, LineChart, PictorialBarChart, PieChart} from 'echarts/charts';
 
 import {
-  DataZoomComponent,
+  DataZoomComponent, GraphicComponent,
   GridComponent,
   LegendComponent,
   TitleComponent,
@@ -23,6 +23,7 @@
   LegendComponent,
   DataZoomComponent,
   VisualMapComponent,
+  GraphicComponent,
   CanvasRenderer
 ]);
 
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.html
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.html	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.html	(working copy)
@@ -60,7 +60,7 @@
               <fa-icon [icon]="['far', 'circle-down']"></fa-icon>
               CLI Admin Handbook
             </a>
-            <a href="#" (click)="isUserDropdownOpen = false">
+            <a [routerLink]="['/control-panel']" target="_blank" (click)="closeDropdown()">
               <fa-icon [icon]="['far', 'window-maximize']"></fa-icon>
               Large Screen Display
             </a>
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.ts	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/navigation/navigation.ts	(working copy)
@@ -212,4 +212,9 @@
 
   viewAllNotifications(): void {}
 
+  closeDropdown() {
+    setTimeout(() => {
+      this.isUserDropdownOpen = false;
+    }, 100);
+  }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/dashboard-insights-apv/dashboard-insights-apv.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/dashboard-insights-apv/dashboard-insights-apv.ts	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/components/sub-components/dashboard-insights-apv/dashboard-insights-apv.ts	(working copy)
@@ -56,7 +56,8 @@
   }
 
   ngOnChanges(changes: SimpleChanges): void {
-    if (changes['cpuUsagePercentage']) {}
+    if (changes['cpuUsagePercentage']) {
+    }
   }
 
   getDeviceGroups(): void {
@@ -65,29 +66,20 @@
     this._device.getDeviceGroups()
       .pipe(take(1))
       .subscribe({
-        next: (result: any) => {
-          if (result && result.length > 1) {
-            if (result[1] && 'result' in result[1]) {
-              let groups = result[1].result;
-              groups.forEach((group: any) => {
-                this.groups.push(group?.group_name);
-                group?.device_list.forEach((device: any) => {
-                  this.devices.push(device);
-                })
-              })
-              interval(this._utils.AUTO_REFRESH_INTERVAL)
-                .pipe(
-                  startWith(0),
-                  tap(() => {
-                    this.getTopAPVVirtualServicesMetrics();
-                    this.getTopAPVRealServicesMetrics();
-                    this.getTopAPVLLBMetrics();
-                  }),
-                  takeUntilDestroyed(this.destroyRef)
-                )
-                .subscribe();
-            }
-          }
+        next: (data: any) => {
+          this.groups = data?.deviceGroups;
+          this.devices = data.devices;
+          interval(this._utils.AUTO_REFRESH_INTERVAL)
+            .pipe(
+              startWith(0),
+              tap(() => {
+                this.getTopAPVVirtualServicesMetrics();
+                this.getTopAPVRealServicesMetrics();
+                this.getTopAPVLLBMetrics();
+              }),
+              takeUntilDestroyed(this.destroyRef)
+            )
+            .subscribe();
         }, error: (error: { message: string; }) => {
           console.log(error);
           this._notification.showError(error.message);
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 2749)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/constants/api_urls.ts	(working copy)
@@ -184,6 +184,7 @@
   UPDATE_LOG_LOCATION_URL: `${PREFIX}/log/location`,
   GET_CLIENT_VERIFICATION_SETTINGS_URL: `${PREFIX}/proxy_req_dev/rest/loadbalancing/slb/ssl/SSLClientVerificationSettings`,
   APV_CLI_EXTEND_URL: `${PREFIX}/proxy_req_dev/rest/apv/cli_extend`,
+  GET_DEVICES_NETWORK_METRICS_URL: `${PREFIX}/devices-network-metrics`,
   // AVX
   GET_AVX_DEVICES_URL: `${PREFIX}/api/cm/virtualization/Host/_get_list_data`,
   ADD_AVX_DEVICE_URL: `${PREFIX}/api/cm/virtualization/Host/_add`,
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/auth.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/auth.ts	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/auth.ts	(working copy)
@@ -54,6 +54,7 @@
     'lSSL',
     'lVPN',
     'Observability',
+    'ControlPanel',
   ]
 
   constructor(
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/chart-options.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/chart-options.ts	(revision 2749)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/chart-options.ts	(working copy)
@@ -609,4 +609,47 @@
       ]
     };
   }
+
+  getLoadChartOptions(percent: number, color: string, label: string): EChartsOption {
+    return {
+      title: {
+        text: label,
+        bottom: 0,
+        left: 'center',
+        textStyle: {
+          color: '#e0e0e0',
+          fontSize: 12
+        }
+      },
+      graphic: {
+        type: 'text',
+        left: 'center',
+        top: '38%',
+        style: {
+          text: `${percent}%`,
+          fill: '#e0e0e0',
+          fontSize: 24,
+          fontWeight: 'normal'
+        }
+      },
+      series: [
+        {
+          type: 'pie',
+          radius: ['70%', '100%'],
+          avoidLabelOverlap: true,
+          label: {show: false},
+          data: [
+            {
+              value: percent,
+              itemStyle: {color: color}
+            },
+            {
+              value: 100 - percent,
+              itemStyle: {color: '#2a3a6b'}
+            }
+          ]
+        }
+      ]
+    };
+  }
 }
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts	(revision 2749)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/device-service.ts	(working copy)
@@ -592,7 +592,7 @@
     metrics.forEach((_metric: any) => {
       const device = devices.find(_device => _metric?.agent_host === _device?.ip);
       if (device) {
-        _metric.device_name = device?.name;
+        _metric.device_name = device.name || 'N/A';
         _metric.device_type = device?.type;
         // Specific for LLB
         if (!_metric.service_name && _metric?.link_name) {
@@ -648,6 +648,15 @@
     );
   }
 
+  getDevicesNetworkMetrics(payload: any) {
+    return this.http.post(URLS.GET_DEVICES_NETWORK_METRICS_URL, payload, {
+        csrf: true,
+        isFormData: false,
+        csrfInFormData: true
+      }
+    );
+  }
+
   getReports() {
     return this.http.get(URLS.GET_LIST_OF_REPORTS_URL);
   }
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 2749)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/gui/src/app/services/utils-service.ts	(working copy)
@@ -114,7 +114,7 @@
       result.connections = rawData
         .filter((item: any) => item.metric === 'connections')
         .map((item: any) => ({
-          name: `${item.service_name} (${item.device_name})`,
+          name: `${item.service_name} (${item.device_name || 'N/A'})`,
           value: item.value
         }))
         .sort((a: any, b: any) => b.value - a.value);
@@ -124,7 +124,7 @@
       result.hits = rawData
         .filter((item: any) => item.metric === 'hits' || item.metric === 'requests')
         .map((item: any) => ({
-          name: `${item.service_name} (${item.device_name})`,
+          name: `${item.service_name} (${item.device_name || 'N/A'})`,
           value: item.value
         }))
         .sort((a: any, b: any) => b.value - a.value);
@@ -133,21 +133,21 @@
     if (metrics.includes('active_sessions')) {
       result.active_sessions = rawData
         .filter((item: any) => item.metric === 'active_sessions')
-        .map((item: any) => ({name: `${item.vsite_name} (${item.device_name})`, value: item.value}))
+        .map((item: any) => ({name: `${item.vsite_name} (${item.device_name || 'N/A'})`, value: item.value}))
         .sort((a: any, b: any) => b.value - a.value);
     }
 
     if (metrics.includes('cpu')) {
       result.cpu = rawData
         .filter((item: any) => item.metric === 'cpu')
-        .map((item: any) => ({name: `${item.device_name}`, value: item.value}))
+        .map((item: any) => ({name: `${item.device_name || 'N/A'}`, value: item.value}))
         .sort((a: any, b: any) => b.value - a.value);
     }
 
     if (metrics.includes('memory')) {
       result.memory = rawData
         .filter((item: any) => item.metric === 'memory')
-        .map((item: any) => ({name: `${item.device_name}`, value: item.value}))
+        .map((item: any) => ({name: `${item.device_name || 'N/A'}`, value: item.value}))
         .sort((a: any, b: any) => b.value - a.value);
     }
 
@@ -155,7 +155,7 @@
       const sortedNetworkData = rawData
         .filter((item: any) => item.metric === 'network')
         .map((item: any) => ({
-          name: `${item.service_name} (${item.device_name})`,
+          name: `${item.service_name} (${item.device_name || 'N/A'})`,
           // Convert Bytes to Megabytes (MB)
           inbound: item.received / (1024 * 1024),
           outbound: item.sent / (1024 * 1024),
@@ -172,7 +172,7 @@
       const sortedNetworkData = rawData
         .filter((item: any) => item.metric === 'network')
         .map((item: any) => ({
-          name: `${item.device_name}`,
+          name: `${item.device_name || 'N/A'}`,
           // Convert Bytes to Megabytes (MB)
           total_in: item.total_in / (1024 * 1024),
           total_out: item.total_out / (1024 * 1024),
@@ -189,7 +189,7 @@
       const sortedNetworkData = rawData
         .filter((item: any) => item.metric === 'client_network')
         .map((item: any) => ({
-          name: `${item.vsite_name} (${item.device_name})`,
+          name: `${item.vsite_name} (${item.device_name || 'N/A'})`,
           // Convert Bytes to Megabytes (MB)
           inbound: item.received / (1024 * 1024),
           outbound: item.sent / (1024 * 1024),
@@ -206,7 +206,7 @@
       const sortedNetworkData = rawData
         .filter((item: any) => item.metric === 'server_network')
         .map((item: any) => ({
-          name: `${item.vsite_name} (${item.device_name})`,
+          name: `${item.vsite_name} (${item.device_name || 'N/A'})`,
           // Convert Bytes to Megabytes (MB)
           inbound: item.received / (1024 * 1024),
           outbound: item.sent / (1024 * 1024),
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/controller/devices_metrics.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/controller/devices_metrics.py	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/controller/devices_metrics.py	(working copy)
@@ -2,7 +2,7 @@
 
 from cm.lib.libbasic_operation import oper_log
 from hive.custom_exceptions import generic_exception as ge
-from hive.services.devices_metrics import get_top_devices_metrics
+from hive.services.devices_metrics import get_top_devices_metrics, get_devices_network_metrics
 from hive.utils import andebug
 
 
@@ -32,3 +32,31 @@
         msg = f'Exception while getting latest metrics: {str(e)}'
         oper_log('error', 'system', msg)
         raise ge.GenericError(500, msg)
+
+
+def handle_get_devices_network_metrics(request, path=None):
+    try:
+        if request.method != 'POST':
+            return JsonResponse({
+                'error': 400,
+                'message': "Invalid HTTP method"
+            }, status=400)
+
+        payload = getattr(request, 'json', {}) or {}
+        agent_hosts = payload.get('agent_host', None)
+        if agent_hosts is not None:
+            if isinstance(agent_hosts, str):
+                agent_hosts = [agent_hosts]
+
+        devices_metrics = get_devices_network_metrics(agent_hosts)
+
+        return JsonResponse(devices_metrics, safe=False)
+
+    except ge.GenericError as e:
+        oper_log('error', 'system', str(e))
+        return ge.handle_exception(e)
+    except Exception as e:
+        andebug('an.model.cli', e)
+        msg = f'Exception while getting latest devices network metrics: {str(e)}'
+        oper_log('error', 'system', msg)
+        raise ge.GenericError(500, msg)
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/repositories/devices_metrics.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/repositories/devices_metrics.py	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/repositories/devices_metrics.py	(working copy)
@@ -5,6 +5,102 @@
 class DevicesMetricsRepo:
     @staticmethod
     @with_db_connection
+    def get_devices_network_metrics(cur, agent_hosts=None, total_duration_seconds=900, num_records=60):
+        """
+        Fetches network throughput history for the last N seconds, grouped into Y buckets.
+
+        Returns a list of dictionaries, with each entry containing the agent_host
+        and a nested 'data' list of its time-series points.
+        """
+        # Calculate the bucket interval. 900s / 60 records = 15s.
+        bucket_interval_seconds = total_duration_seconds // num_records
+
+        # Build the network WHERE clause
+        network_clauses = []
+        network_params = []
+        if agent_hosts:
+            placeholders = ','.join(['%s'] * len(agent_hosts))
+            network_clauses.append(f"agent_host IN ({placeholders})")
+            network_params.extend(agent_hosts)
+
+        # We need data from slightly further back to calculate the delta for the first bucket.
+        safe_duration = total_duration_seconds + (bucket_interval_seconds * 2)
+        network_clauses.append(f"time >= NOW() - INTERVAL '{safe_duration} seconds'")
+        network_where = "WHERE " + " AND ".join(network_clauses)
+
+        _query = f"""
+            WITH NetworkBuckets AS (
+                SELECT
+                    agent_host,
+                    time_bucket('{bucket_interval_seconds} seconds', time) AS bucket_time,
+                    MAX(total_in) AS total_in,
+                    MAX(total_out) AS total_out
+                FROM an_device_metrics
+                {network_where}
+                GROUP BY agent_host, bucket_time
+            ),
+            NetworkDeltas AS (
+                SELECT
+                    agent_host,
+                    bucket_time,
+                    -- Calculate rate in Bytes/sec, multiply by 8 for bits/sec
+                    (GREATEST(total_in - LAG(total_in) OVER (PARTITION BY agent_host ORDER BY bucket_time), 0) / {bucket_interval_seconds}.0) * 8 AS received_bps,
+                    (GREATEST(total_out - LAG(total_out) OVER (PARTITION BY agent_host ORDER BY bucket_time), 0) / {bucket_interval_seconds}.0) * 8 AS sent_bps
+                FROM NetworkBuckets
+            )
+            -- Final Select: Get all calculated rates within the requested time window
+            SELECT
+                'network_history' AS metric,
+                agent_host,
+                EXTRACT(EPOCH FROM bucket_time)::bigint AS time_epoch,
+
+                -- *** PATCH: Convert NULLs to 0 ***
+                COALESCE(received_bps, 0) AS total_in,
+                COALESCE(sent_bps, 0) AS total_out
+
+            FROM NetworkDeltas
+            WHERE
+                -- *** PATCH: Removed the IS NOT NULL filter ***
+
+                -- Filter to the user's requested time window
+                bucket_time >= NOW() - INTERVAL '{total_duration_seconds} seconds'
+            ORDER BY agent_host, time_epoch; -- Order by host, then time
+            """
+
+        cur.execute(_query, network_params)
+        rows = cur.fetchall()
+        cur.close()
+
+        # --- Grouping Logic (remains the same) ---
+        grouped_data = {}
+
+        for row in rows:
+            # Unpack the row from the SQL query
+            metric, agent_host, time_epoch, total_in, total_out = row
+
+            # Create the nested data point
+            data_point = {
+                "time": time_epoch,
+                "total_in": total_in,
+                "total_out": total_out
+            }
+
+            # If we haven't seen this host yet, create its main entry
+            if agent_host not in grouped_data:
+                grouped_data[agent_host] = {
+                    "metric": metric,
+                    "agent_host": agent_host,
+                    "data": []
+                }
+
+            # Append the time-series data point to this host's 'data' list
+            grouped_data[agent_host]["data"].append(data_point)
+
+        # Convert the dictionary's values into a list for the final JSON output
+        return list(grouped_data.values())
+
+    @staticmethod
+    @with_db_connection
     def get_top_devices_metrics(cur, agent_hosts=None, interval_seconds=30, limit=5):
         """
         Fetch top CPU, Memory, and Network metrics with optional filtering by agent_hosts.
Index: /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/services/devices_metrics.py
===================================================================
--- /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/services/devices_metrics.py	(revision 2748)
+++ /branches/amp_4_0/src/webui/webui/htdocs/new/src/hive/services/devices_metrics.py	(working copy)
@@ -34,3 +34,10 @@
 
     metrics_list = sanitize_metrics(metrics_list)
     return metrics_list
+
+
+def get_devices_network_metrics(agent_hosts=None, interval=30, limit=5):
+    metrics_objects = DevicesMetricsRepo.get_devices_network_metrics(
+        agent_hosts=agent_hosts,
+    )
+    return metrics_objects
