Moved monitoring of last_execution_time to system_stats (#9851)

Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
Tim O'Farrell
2025-07-22 11:32:59 -06:00
committed by GitHub
parent 38ffc85470
commit e045b757fa
5 changed files with 132 additions and 26 deletions

View File

@@ -1,8 +1,15 @@
"""Tests for system stats utilities."""
import time
from unittest.mock import patch
import psutil
from openhands.runtime.utils.system_stats import get_system_stats
from openhands.runtime.utils.system_stats import (
get_system_info,
get_system_stats,
update_last_execution_time,
)
def test_get_system_stats():
@@ -58,3 +65,96 @@ def test_get_system_stats_stability():
stats = get_system_stats()
assert isinstance(stats, dict)
assert stats['cpu_percent'] >= 0
def test_get_system_info():
"""Test that get_system_info returns valid system information."""
with patch(
'openhands.runtime.utils.system_stats.get_system_stats'
) as mock_get_stats:
mock_get_stats.return_value = {'cpu_percent': 10.0}
info = get_system_info()
# Test structure
assert isinstance(info, dict)
assert set(info.keys()) == {'uptime', 'idle_time', 'resources'}
# Test values
assert isinstance(info['uptime'], float)
assert isinstance(info['idle_time'], float)
assert info['uptime'] > 0
assert info['idle_time'] >= 0
assert info['resources'] == {'cpu_percent': 10.0}
# Verify get_system_stats was called
mock_get_stats.assert_called_once()
def test_update_last_execution_time():
"""Test that update_last_execution_time updates the last execution time."""
# Get initial system info
initial_info = get_system_info()
initial_idle_time = initial_info['idle_time']
# Wait a bit to ensure time difference
time.sleep(0.1)
# Update last execution time
update_last_execution_time()
# Get updated system info
updated_info = get_system_info()
updated_idle_time = updated_info['idle_time']
# The idle time should be reset (close to zero)
assert updated_idle_time < initial_idle_time
assert updated_idle_time < 0.1 # Should be very small
def test_idle_time_increases_without_updates():
"""Test that idle_time increases when no updates are made."""
# Update last execution time to reset idle time
update_last_execution_time()
# Get initial system info
initial_info = get_system_info()
initial_idle_time = initial_info['idle_time']
# Wait a bit
time.sleep(0.2)
# Get updated system info without calling update_last_execution_time
updated_info = get_system_info()
updated_idle_time = updated_info['idle_time']
# The idle time should have increased
assert updated_idle_time > initial_idle_time
assert updated_idle_time >= 0.2 # Should be at least the sleep time
@patch('time.time')
def test_idle_time_calculation(mock_time):
"""Test that idle_time is calculated correctly."""
# Mock time.time() to return controlled values
mock_time.side_effect = [
100.0, # Initial _start_time
100.0, # Initial _last_execution_time
110.0, # Current time in get_system_info
]
# Import the module again to reset the global variables with our mocked time
import importlib
import openhands.runtime.utils.system_stats
importlib.reload(openhands.runtime.utils.system_stats)
# Get system info
from openhands.runtime.utils.system_stats import get_system_info
info = get_system_info()
# Verify idle_time calculation
assert info['uptime'] == 10.0 # 110 - 100
assert info['idle_time'] == 10.0 # 110 - 100