Calculate the current statistics.
(self)
| 256 | del self._requests_in_progress[request_id_or_key] |
| 257 | |
| 258 | def calculate(self) -> FinalStatistics: |
| 259 | """Calculate the current statistics.""" |
| 260 | total_minutes = self.state.crawler_runtime.total_seconds() / 60 |
| 261 | state = self._state.current_value |
| 262 | serialized_state = state.model_dump(by_alias=False) |
| 263 | |
| 264 | return FinalStatistics( |
| 265 | request_avg_failed_duration=state.request_avg_failed_duration, |
| 266 | request_avg_finished_duration=state.request_avg_finished_duration, |
| 267 | requests_finished_per_minute=round(state.requests_finished / total_minutes) if total_minutes else 0, |
| 268 | requests_failed_per_minute=math.floor(state.requests_failed / total_minutes) if total_minutes else 0, |
| 269 | request_total_duration=state.request_total_finished_duration + state.request_total_failed_duration, |
| 270 | requests_total=state.requests_failed + state.requests_finished, |
| 271 | crawler_runtime=state.crawler_runtime, |
| 272 | requests_finished=state.requests_finished, |
| 273 | requests_failed=state.requests_failed, |
| 274 | retry_histogram=serialized_state['request_retry_histogram'], |
| 275 | ) |
| 276 | |
| 277 | async def reset(self) -> None: |
| 278 | """Reset the statistics to their defaults and remove any persistent state.""" |