nucliadb-utils 6.4.0.post4146__py3-none-any.whl → 6.4.0.post4158__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
nucliadb_utils/nats.py CHANGED
@@ -34,6 +34,7 @@ from nats.js.client import JetStreamContext
34
34
 
35
35
  from nucliadb_telemetry.errors import capture_exception
36
36
  from nucliadb_telemetry.jetstream import JetStreamContextTelemetry
37
+ from nucliadb_telemetry.metrics import Counter
37
38
  from nucliadb_telemetry.utils import get_telemetry
38
39
 
39
40
  logger = logging.getLogger(__name__)
@@ -119,6 +120,7 @@ class NatsConnectionManager:
119
120
  service_name: str,
120
121
  nats_servers: list[str],
121
122
  nats_creds: Optional[str] = None,
123
+ pull_utilization_metrics: Optional[Counter] = None,
122
124
  ):
123
125
  self._service_name = service_name
124
126
  self._nats_servers = nats_servers
@@ -132,6 +134,7 @@ class NatsConnectionManager:
132
134
  self._reconnect_task: Optional[asyncio.Task] = None
133
135
  self._expected_subscriptions: set[str] = set()
134
136
  self._initialized = False
137
+ self.pull_utilization_metrics = pull_utilization_metrics
135
138
 
136
139
  def healthy(self) -> bool:
137
140
  if not self._healthy:
@@ -364,15 +367,29 @@ class NatsConnectionManager:
364
367
  if cancelled.is_set():
365
368
  break
366
369
  try:
370
+ if self.pull_utilization_metrics:
371
+ start_wait = time.monotonic()
372
+
367
373
  messages = await psub.fetch(batch=1)
374
+
375
+ if self.pull_utilization_metrics:
376
+ received = time.monotonic()
377
+ self.pull_utilization_metrics.inc({"status": "waiting"}, received - start_wait)
378
+
368
379
  for message in messages:
369
380
  await cb(message)
381
+
382
+ if self.pull_utilization_metrics:
383
+ processed = time.monotonic()
384
+ self.pull_utilization_metrics.inc({"status": "processing"}, processed - received)
370
385
  except asyncio.CancelledError:
371
386
  # Handle task cancellation
372
387
  logger.info("Pull subscription consume task cancelled", extra={"subject": subject})
373
388
  break
374
389
  except TimeoutError:
375
- pass
390
+ if self.pull_utilization_metrics:
391
+ received = time.monotonic()
392
+ self.pull_utilization_metrics.inc({"status": "waiting"}, received - start_wait)
376
393
  except Exception:
377
394
  logger.exception("Error in pull_subscribe task", extra={"subject": subject})
378
395
 
@@ -27,6 +27,7 @@ from enum import Enum
27
27
  from typing import TYPE_CHECKING, Any, List, Optional, Union, cast
28
28
 
29
29
  from nucliadb_protos.writer_pb2_grpc import WriterStub
30
+ from nucliadb_telemetry.metrics import Counter
30
31
  from nucliadb_utils import featureflagging
31
32
  from nucliadb_utils.aiopynecone.client import PineconeSession
32
33
  from nucliadb_utils.audit.audit import AuditStorage
@@ -58,6 +59,10 @@ if TYPE_CHECKING: # pragma: no cover
58
59
 
59
60
  logger = logging.getLogger(__name__)
60
61
 
62
+ pull_subscriber_utilization = Counter(
63
+ "nucliadb_pull_subscriber_utilization_seconds", labels={"status": ""}
64
+ )
65
+
61
66
 
62
67
  class Utility(str, Enum):
63
68
  INGEST = "ingest"
@@ -359,6 +364,7 @@ async def start_nats_manager(
359
364
  service_name=service_name,
360
365
  nats_servers=nats_servers,
361
366
  nats_creds=nats_creds,
367
+ pull_utilization_metrics=pull_subscriber_utilization,
362
368
  )
363
369
  await nats_manager.initialize()
364
370
  set_utility(Utility.NATS_MANAGER, nats_manager)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: nucliadb_utils
3
- Version: 6.4.0.post4146
3
+ Version: 6.4.0.post4158
4
4
  Summary: NucliaDB util library
5
5
  Author-email: Nuclia <nucliadb@nuclia.com>
6
6
  License: AGPL
@@ -27,8 +27,8 @@ Requires-Dist: nats-py[nkeys]>=2.6.0
27
27
  Requires-Dist: PyNaCl
28
28
  Requires-Dist: pyjwt>=2.4.0
29
29
  Requires-Dist: mrflagly>=0.2.9
30
- Requires-Dist: nucliadb-protos>=6.4.0.post4146
31
- Requires-Dist: nucliadb-telemetry>=6.4.0.post4146
30
+ Requires-Dist: nucliadb-protos>=6.4.0.post4158
31
+ Requires-Dist: nucliadb-telemetry>=6.4.0.post4158
32
32
  Provides-Extra: cache
33
33
  Requires-Dist: redis>=4.3.4; extra == "cache"
34
34
  Requires-Dist: orjson>=3.6.7; extra == "cache"
@@ -7,7 +7,7 @@ nucliadb_utils/exceptions.py,sha256=y_3wk77WLVUtdo-5FtbBsdSkCtK_DsJkdWb5BoPn3qo,
7
7
  nucliadb_utils/featureflagging.py,sha256=SYqr31e0_NeOMx6dZgSiDO9VJiV6xxYhM_gWkk8ITTQ,2386
8
8
  nucliadb_utils/grpc.py,sha256=apu0uePnkGHCAT7GRQ9YZfRYyFj26kJ440i8jitbM3U,3314
9
9
  nucliadb_utils/helpers.py,sha256=nPw8yod3hP-pxq80VF8QC36s7ygSg0dBUdfI-LatvCs,1600
10
- nucliadb_utils/nats.py,sha256=-ehKk0u5ZhiJEyg67yV26YysBGEGp4TDSQKq3aydJn0,15275
10
+ nucliadb_utils/nats.py,sha256=LrUNBPffjK3e_EuF_s2MGmmE7ExOVD9cdi0yZjHNSv4,16167
11
11
  nucliadb_utils/partition.py,sha256=jBgy4Hu5Iwn4gjbPPcthSykwf-qNx-GcLAIwbzPd1d0,1157
12
12
  nucliadb_utils/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  nucliadb_utils/run.py,sha256=Es0_Bu5Yc-LWczvwL6gzWqSwC85RjDCk-0oFQAJi9g4,1827
@@ -15,7 +15,7 @@ nucliadb_utils/settings.py,sha256=RnGhEUvwv6faNqALiqDCivvzNOyyXVBflYh_37uNkow,81
15
15
  nucliadb_utils/signals.py,sha256=lo_Mk12NIX5Au--3H3WObvDOXq_OMurql2qiC2TnAao,2676
16
16
  nucliadb_utils/store.py,sha256=kQ35HemE0v4_Qg6xVqNIJi8vSFAYQtwI3rDtMsNy62Y,890
17
17
  nucliadb_utils/transaction.py,sha256=z_VeiTIta48rosS2SXMqx86XaavprSMRWf6s6zWIeEs,7920
18
- nucliadb_utils/utilities.py,sha256=Vc4zLpDf-FQh9bs0ZyAfGAjzlbbMTMWf3VWt2Ao5V3k,15379
18
+ nucliadb_utils/utilities.py,sha256=w4nsdyiFgZVEq5aBhjzVg176UDJNxfhIEfDbEi8bJdA,15604
19
19
  nucliadb_utils/aiopynecone/__init__.py,sha256=cp15ZcFnHvpcu_5-aK2A4uUyvuZVV_MJn4bIXMa20ks,835
20
20
  nucliadb_utils/aiopynecone/client.py,sha256=MPyHnDXwhukJr7U3CJh7BpsekfSuOkyM4g5b9LLtzc8,22941
21
21
  nucliadb_utils/aiopynecone/exceptions.py,sha256=fUErx3ceKQK1MUbOnYcZhIzpNe8UVAptZE9JIRDLXDE,4000
@@ -57,7 +57,7 @@ nucliadb_utils/tests/gcs.py,sha256=MBMzn_UHU5SU6iILuCsB5zU4umhNcaCw_MKrxZhwvOc,4
57
57
  nucliadb_utils/tests/local.py,sha256=cxIfPrKuqs5Ef0nbrVYQQAH2mwc4E0iD9bC2sWegS-c,1934
58
58
  nucliadb_utils/tests/nats.py,sha256=RWHjwqq5esuO7OFbP24yYX1cXnpPLcWJwDUdmwCpH28,1897
59
59
  nucliadb_utils/tests/s3.py,sha256=DACUh3HvgH3BchKFZ9R7RFUzsrg3v9A-cxTcXx4nmvA,3734
60
- nucliadb_utils-6.4.0.post4146.dist-info/METADATA,sha256=LQOCHAfy9qQfnuGtGdKmX9iQ8VRLiNCXkN4TtgoySE0,2205
61
- nucliadb_utils-6.4.0.post4146.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
62
- nucliadb_utils-6.4.0.post4146.dist-info/top_level.txt,sha256=fE3vJtALTfgh7bcAWcNhcfXkNPp_eVVpbKK-2IYua3E,15
63
- nucliadb_utils-6.4.0.post4146.dist-info/RECORD,,
60
+ nucliadb_utils-6.4.0.post4158.dist-info/METADATA,sha256=KPkRuBKajcHcxE-iszjsutjEtfweRGqp8gE2xvAPoUA,2205
61
+ nucliadb_utils-6.4.0.post4158.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
62
+ nucliadb_utils-6.4.0.post4158.dist-info/top_level.txt,sha256=fE3vJtALTfgh7bcAWcNhcfXkNPp_eVVpbKK-2IYua3E,15
63
+ nucliadb_utils-6.4.0.post4158.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.1)
2
+ Generator: setuptools (80.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5