From fa82d87302f022c6c6acb27bde99b6b2d58cfd14 Mon Sep 17 00:00:00 2001 From: harisreedhar Date: Tue, 10 Feb 2026 18:57:32 +0530 Subject: [PATCH] add network metrics --- facefusion/system.py | 23 +++++++++++++++++++++-- facefusion/types.py | 8 +++++++- tests/test_api_metrics.py | 21 +++++++++++++++++++++ 3 files changed, 49 insertions(+), 3 deletions(-) diff --git a/facefusion/system.py b/facefusion/system.py index 608d63f6..b8839b6f 100644 --- a/facefusion/system.py +++ b/facefusion/system.py @@ -6,7 +6,7 @@ import psutil from facefusion import state_manager from facefusion.execution import detect_execution_devices -from facefusion.types import DiskMetrics, MemoryMetrics, Metrics +from facefusion.types import DiskMetrics, MemoryMetrics, Metrics, NetworkMetrics def get_metrics_set() -> Metrics: @@ -16,7 +16,8 @@ def get_metrics_set() -> Metrics: { 'execution_devices': detect_execution_devices(), 'disks': detect_disk_metrics([ drive_path ]), - 'memory': detect_memory_metrics() + 'memory': detect_memory_metrics(), + 'network': detect_network_metrics() } @@ -69,3 +70,21 @@ def detect_memory_metrics() -> MemoryMetrics: 'unit': '%' } } + + +def detect_network_metrics() -> NetworkMetrics: + network_io = psutil.net_io_counters() + + return\ + { + 'sent': + { + 'value': int(network_io.bytes_sent / (1024 * 1024)), + 'unit': 'MB' + }, + 'received': + { + 'value': int(network_io.bytes_recv / (1024 * 1024)), + 'unit': 'MB' + } + } diff --git a/facefusion/types.py b/facefusion/types.py index e2a19bdc..33ad736f 100755 --- a/facefusion/types.py +++ b/facefusion/types.py @@ -310,11 +310,17 @@ MemoryMetrics = TypedDict('MemoryMetrics', 'free' : ValueAndUnit, 'utilization' : ValueAndUnit }) +NetworkMetrics = TypedDict('NetworkMetrics', +{ + 'sent' : ValueAndUnit, + 'received' : ValueAndUnit +}) Metrics = TypedDict('Metrics', { 'execution_devices' : List[ExecutionDevice], 'disks' : List[DiskMetrics], - 'memory' : MemoryMetrics + 'memory' : MemoryMetrics, + 'network' : NetworkMetrics }) DownloadProvider = Literal['github', 'huggingface'] diff --git a/tests/test_api_metrics.py b/tests/test_api_metrics.py index 71a709eb..17c39944 100644 --- a/tests/test_api_metrics.py +++ b/tests/test_api_metrics.py @@ -60,6 +60,19 @@ def mock_detect_execution_devices(mocker : MockerFixture) -> None: 'unit': '%' } }) + mocker.patch('facefusion.system.detect_network_metrics', return_value = + { + 'sent': + { + 'value': 1024, + 'unit': 'MB' + }, + 'received': + { + 'value': 2048, + 'unit': 'MB' + } + }) mocker.patch('facefusion.system.detect_execution_devices', return_value = [ { @@ -148,6 +161,10 @@ def test_get_metrics(test_client : TestClient) -> None: assert metrics_body.get('memory').get('free').get('unit') == 'GB' assert metrics_body.get('memory').get('utilization').get('value') == 50 + assert metrics_body.get('network').get('sent').get('value') == 1024 + assert metrics_body.get('network').get('sent').get('unit') == 'MB' + assert metrics_body.get('network').get('received').get('value') == 2048 + def test_websocket_metrics(test_client : TestClient) -> None: create_session_response = test_client.post('/session', json = @@ -173,3 +190,7 @@ def test_websocket_metrics(test_client : TestClient) -> None: assert metrics_set.get('memory').get('total').get('value') == 32 assert metrics_set.get('memory').get('free').get('unit') == 'GB' assert metrics_set.get('memory').get('utilization').get('value') == 50 + + assert metrics_set.get('network').get('sent').get('value') == 1024 + assert metrics_set.get('network').get('sent').get('unit') == 'MB' + assert metrics_set.get('network').get('received').get('value') == 2048