Skip to content

Commit 85c4335

Browse files
vdusekclaude
andauthored
fix: Use max() instead of min() for request_max_duration statistic (#1701)
The statistics tracking for maximum request duration was incorrectly using `min()` instead of `max()`, causing the statistic to always show the minimum duration instead of the maximum. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent fb1e7ee commit 85c4335

2 files changed

Lines changed: 35 additions & 1 deletion

File tree

‎src/crawlee/statistics/_statistics.py‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,7 @@ def record_request_processing_finish(self, request_id_or_key: str) -> None:
234234
state.request_min_duration = min(
235235
state.request_min_duration if state.request_min_duration is not None else timedelta.max, duration
236236
)
237-
state.request_max_duration = min(
237+
state.request_max_duration = max(
238238
state.request_max_duration if state.request_max_duration is not None else timedelta(), duration
239239
)
240240

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
from __future__ import annotations
2+
3+
import asyncio
4+
5+
from crawlee.statistics import Statistics
6+
7+
8+
async def test_request_max_duration_tracks_maximum() -> None:
9+
"""Test that request_max_duration correctly tracks the maximum duration, not the minimum."""
10+
async with Statistics.with_default_state() as statistics:
11+
# Record a short request
12+
statistics.record_request_processing_start('request_1')
13+
statistics.record_request_processing_finish('request_1')
14+
first_duration = statistics.state.request_max_duration
15+
16+
# Record a longer request
17+
statistics.record_request_processing_start('request_2')
18+
await asyncio.sleep(0.05) # 50ms delay
19+
statistics.record_request_processing_finish('request_2')
20+
second_duration = statistics.state.request_max_duration
21+
22+
# The max duration should be updated to the longer request's duration
23+
assert second_duration is not None
24+
assert first_duration is not None
25+
assert second_duration >= first_duration
26+
assert second_duration.total_seconds() >= 0.05
27+
28+
# Record another short request - max should NOT decrease
29+
statistics.record_request_processing_start('request_3')
30+
statistics.record_request_processing_finish('request_3')
31+
third_duration = statistics.state.request_max_duration
32+
33+
# The max duration should remain unchanged (still the longest request)
34+
assert third_duration == second_duration

0 commit comments

Comments
 (0)