Skip to content

Commit dddef14

Browse files
committed
Draft to add stats to ApifyRequestQueueClient
wait for #552 to be merged first
1 parent 1eb11ef commit dddef14

File tree

1 file changed

+28
-3
lines changed

1 file changed

+28
-3
lines changed

src/apify/storage_clients/_apify/_request_queue_client.py

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,10 @@
77
from datetime import datetime, timedelta, timezone
88
from hashlib import sha256
99
from logging import getLogger
10-
from typing import TYPE_CHECKING, Final
10+
from typing import TYPE_CHECKING, Final, Annotated
1111

1212
from cachetools import LRUCache
13+
from pydantic import BaseModel, ConfigDict, Field
1314
from typing_extensions import override
1415

1516
from apify_client import ApifyClientAsync
@@ -52,6 +53,29 @@ def unique_key_to_request_id(unique_key: str, *, request_id_length: int = 15) ->
5253
return url_safe_key[:request_id_length]
5354

5455

56+
class RequestQueueStats(BaseModel):
57+
model_config = ConfigDict(populate_by_name=True)
58+
59+
delete_count: Annotated[int, Field(alias='deleteCount', default=0)]
60+
""""The number of request queue deletes."""
61+
62+
head_item_read_count: Annotated[int, Field(alias='headItemReadCount', default=0)]
63+
"""The number of request queue head reads."""
64+
65+
read_count: Annotated[int, Field(alias='readCount', default=0)]
66+
"""The number of request queue reads."""
67+
68+
storage_bytes: Annotated[int, Field(alias='storageBytes', default=0)]
69+
"""Storage size in Bytes."""
70+
71+
write_count: Annotated[int, Field(alias='writeCount', default=0)]
72+
"""The number of request queue writes."""
73+
74+
class ApifyRequestQueueMetadata(RequestQueueMetadata):
75+
stats: Annotated[RequestQueueStats, Field(alias='stats', default_factory=RequestQueueStats)]
76+
"""Additional optional statistics about the request queue."""
77+
78+
5579
class ApifyRequestQueueClient(RequestQueueClient):
5680
"""An Apify platform implementation of the request queue client."""
5781

@@ -114,12 +138,12 @@ def __init__(
114138
"""Fetch lock to minimize race conditions when communicating with API."""
115139

116140
@override
117-
async def get_metadata(self) -> RequestQueueMetadata:
141+
async def get_metadata(self) -> ApifyRequestQueueMetadata:
118142
total_count = self._initial_total_count + self._assumed_total_count
119143
handled_count = self._initial_handled_count + self._assumed_handled_count
120144
pending_count = total_count - handled_count
121145

122-
return RequestQueueMetadata(
146+
return ApifyRequestQueueMetadata(
123147
id=self._id,
124148
name=self._name,
125149
total_request_count=total_count,
@@ -129,6 +153,7 @@ async def get_metadata(self) -> RequestQueueMetadata:
129153
modified_at=datetime.now(timezone.utc),
130154
accessed_at=datetime.now(timezone.utc),
131155
had_multiple_clients=self._had_multiple_clients,
156+
stats=RequestQueueStats.model_validate({}) # TODO: update after https://github.com/apify/apify-sdk-python/pull/552
132157
)
133158

134159
@classmethod

0 commit comments

Comments
 (0)