Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/crawlee/statistics/_statistics.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,7 +234,7 @@ def record_request_processing_finish(self, request_id_or_key: str) -> None:
state.request_min_duration = min(
state.request_min_duration if state.request_min_duration is not None else timedelta.max, duration
)
state.request_max_duration = min(
state.request_max_duration = max(
state.request_max_duration if state.request_max_duration is not None else timedelta(), duration
)

Expand Down
34 changes: 34 additions & 0 deletions tests/unit/_statistics/test_request_max_duration.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
from __future__ import annotations

import asyncio

from crawlee.statistics import Statistics


async def test_request_max_duration_tracks_maximum() -> None:
"""Test that request_max_duration correctly tracks the maximum duration, not the minimum."""
async with Statistics.with_default_state() as statistics:
# Record a short request
statistics.record_request_processing_start('request_1')
statistics.record_request_processing_finish('request_1')
first_duration = statistics.state.request_max_duration

# Record a longer request
statistics.record_request_processing_start('request_2')
await asyncio.sleep(0.05) # 50ms delay
statistics.record_request_processing_finish('request_2')
second_duration = statistics.state.request_max_duration

# The max duration should be updated to the longer request's duration
assert second_duration is not None
assert first_duration is not None
assert second_duration >= first_duration
assert second_duration.total_seconds() >= 0.05

# Record another short request - max should NOT decrease
statistics.record_request_processing_start('request_3')
statistics.record_request_processing_finish('request_3')
third_duration = statistics.state.request_max_duration

# The max duration should remain unchanged (still the longest request)
assert third_duration == second_duration
Loading