diff --git a/facefusion/system.py b/facefusion/system.py index b8839b6f..d85b3854 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, NetworkMetrics +from facefusion.types import DiskMetrics, MemoryMetrics, Metrics, NetworkMetrics, ProcessorMetrics def get_metrics_set() -> Metrics: @@ -17,7 +17,8 @@ def get_metrics_set() -> Metrics: 'execution_devices': detect_execution_devices(), 'disks': detect_disk_metrics([ drive_path ]), 'memory': detect_memory_metrics(), - 'network': detect_network_metrics() + 'network': detect_network_metrics(), + 'processor': detect_processor_metrics() } @@ -88,3 +89,26 @@ def detect_network_metrics() -> NetworkMetrics: 'unit': 'MB' } } + + +def detect_processor_metrics() -> ProcessorMetrics: + cpu_frequency = psutil.cpu_freq() + + return\ + { + 'cores': + { + 'value': psutil.cpu_count(logical = True), + 'unit': 'cores' + }, + 'frequency': + { + 'value': int(cpu_frequency.current), + 'unit': 'MHz' + }, + 'utilization': + { + 'value': int(psutil.cpu_percent(interval = None)), + 'unit': '%' + } + } diff --git a/facefusion/types.py b/facefusion/types.py index 33ad736f..2343b6e9 100755 --- a/facefusion/types.py +++ b/facefusion/types.py @@ -315,12 +315,19 @@ NetworkMetrics = TypedDict('NetworkMetrics', 'sent' : ValueAndUnit, 'received' : ValueAndUnit }) +ProcessorMetrics = TypedDict('ProcessorMetrics', +{ + 'cores' : ValueAndUnit, + 'frequency' : ValueAndUnit, + 'utilization' : ValueAndUnit +}) Metrics = TypedDict('Metrics', { 'execution_devices' : List[ExecutionDevice], 'disks' : List[DiskMetrics], 'memory' : MemoryMetrics, - 'network' : NetworkMetrics + 'network' : NetworkMetrics, + 'processor' : ProcessorMetrics }) DownloadProvider = Literal['github', 'huggingface'] diff --git a/tests/test_api_metrics.py b/tests/test_api_metrics.py index 17c39944..53db7a60 100644 --- a/tests/test_api_metrics.py +++ b/tests/test_api_metrics.py @@ -73,6 +73,24 @@ def mock_detect_execution_devices(mocker : MockerFixture) -> None: 'unit': 'MB' } }) + mocker.patch('facefusion.system.detect_processor_metrics', return_value = + { + 'cores': + { + 'value': 16, + 'unit': 'cores' + }, + 'frequency': + { + 'value': 3500, + 'unit': 'MHz' + }, + 'utilization': + { + 'value': 25, + 'unit': '%' + } + }) mocker.patch('facefusion.system.detect_execution_devices', return_value = [ { @@ -165,6 +183,10 @@ def test_get_metrics(test_client : TestClient) -> None: assert metrics_body.get('network').get('sent').get('unit') == 'MB' assert metrics_body.get('network').get('received').get('value') == 2048 + assert metrics_body.get('processor').get('cores').get('value') == 16 + assert metrics_body.get('processor').get('frequency').get('value') == 3500 + assert metrics_body.get('processor').get('utilization').get('value') == 25 + def test_websocket_metrics(test_client : TestClient) -> None: create_session_response = test_client.post('/session', json = @@ -194,3 +216,7 @@ def test_websocket_metrics(test_client : TestClient) -> None: 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 + + assert metrics_set.get('processor').get('cores').get('value') == 16 + assert metrics_set.get('processor').get('frequency').get('value') == 3500 + assert metrics_set.get('processor').get('utilization').get('value') == 25