by-framework 0.2.2.dev14__py3-none-any.whl → 0.2.2.dev15__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.
@@ -367,6 +367,60 @@ _CATALOG: dict[str, MetricDefinition] = {
367
367
  "Instrumentation reliability signal pinpointing exporter failures."
368
368
  ),
369
369
  ),
370
+ # Self-monitoring for the background collector in metrics/collector.py.
371
+ # Exactly one process holds its Redis lock and writes history points, so
372
+ # these answer "is anyone still collecting?" — a gap here means the
373
+ # dashboards go stale silently rather than erroring.
374
+ "by_framework_metrics_collector_cycles_total": MetricDefinition(
375
+ name="by_framework_metrics_collector_cycles_total",
376
+ kind=MetricKind.COUNTER,
377
+ unit=MetricUnit.NONE,
378
+ labels=("result",),
379
+ description=(
380
+ "Metrics collector cycles by result "
381
+ "(success, snapshot_failed, lock_skipped, disabled)."
382
+ ),
383
+ interpretation=(
384
+ "Collector health signal: only the lock holder reports success, so "
385
+ "lock_skipped dominating across a fleet is expected."
386
+ ),
387
+ ),
388
+ "by_framework_metrics_collector_snapshot_duration_ms": MetricDefinition(
389
+ name="by_framework_metrics_collector_snapshot_duration_ms",
390
+ kind=MetricKind.HISTOGRAM,
391
+ unit=MetricUnit.MILLISECONDS,
392
+ description=(
393
+ "Duration of one collector snapshot build plus history write."
394
+ ),
395
+ interpretation=(
396
+ "Latency signal for collection itself; approaching the collection "
397
+ "interval means cycles are about to overlap."
398
+ ),
399
+ ),
400
+ "by_framework_metrics_collector_lock_held": MetricDefinition(
401
+ name="by_framework_metrics_collector_lock_held",
402
+ kind=MetricKind.GAUGE,
403
+ unit=MetricUnit.NONE,
404
+ description=(
405
+ "Whether this process currently holds the metrics collector lock."
406
+ ),
407
+ interpretation=(
408
+ "Saturation signal: should sum to 1 across the fleet — 0 means "
409
+ "nobody is collecting, above 1 means the lock split."
410
+ ),
411
+ ),
412
+ "by_framework_metrics_collector_last_success_timestamp_ms": MetricDefinition(
413
+ name="by_framework_metrics_collector_last_success_timestamp_ms",
414
+ kind=MetricKind.GAUGE,
415
+ unit=MetricUnit.MILLISECONDS,
416
+ description=(
417
+ "Unix timestamp in milliseconds of the last successful collection."
418
+ ),
419
+ interpretation=(
420
+ "Freshness signal: alert on now minus this value exceeding a few "
421
+ "collection intervals."
422
+ ),
423
+ ),
370
424
  }
371
425
 
372
426
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: by-framework
3
- Version: 0.2.2.dev14
3
+ Version: 0.2.2.dev15
4
4
  Summary: 分布式 Agent 调度框架
5
5
  License-File: LICENSE
6
6
  Requires-Python: >=3.12
@@ -69,7 +69,7 @@ by_framework/errors/http.py,sha256=xtm4EKwbE1Z0n4yqWTjPOVbDd9fIPfmT8W4ou5aOLCQ,7
69
69
  by_framework/errors/protocol.py,sha256=MWr15TFIHs8Ql67mgvU9mebGdE04yPxmg4AOEGbF9E4,1269
70
70
  by_framework/errors/registry.py,sha256=LmcqSXiW8FSOghpLPHTllkbrQCnVcMYTLzO2cNU3wIw,842
71
71
  by_framework/metrics/__init__.py,sha256=8AQpVnOwAmHoQsDhCfkNXSKUOX_ZCBF_QajBXmsNhgc,11353
72
- by_framework/metrics/catalog.py,sha256=CR9-1M_L0rR-5jgGUw3M1TplTzntpTjN2MXG34s9lnw,17355
72
+ by_framework/metrics/catalog.py,sha256=1yWxVCvvrbkT0Rdmi0x-rtRwtXFzQg6Dmuj75izN2X0,19684
73
73
  by_framework/metrics/collector.py,sha256=uIO2TJfX4zQTBi5gWbMfgwtdMjrhmhzjzW36BcqxBKE,8533
74
74
  by_framework/metrics/read_client.py,sha256=kcgHJlJh47eFPhlbH8QOyD-K6SpKbZHEX624XD6Mvxo,18511
75
75
  by_framework/metrics/snapshot.py,sha256=eI4JVV3uma7fT6nvp2bliO2ZUBJhJT6bzTvQDIeC-wk,101784
@@ -98,8 +98,8 @@ by_framework/worker/runner.py,sha256=6_L_UUV1Kljys_4Eh_qnwMd7a-gGsikd4M_O5K879NA
98
98
  by_framework/worker/worker.py,sha256=IaPFLWCFo5U5Xo7PIQHtTt4JmtxZA1O_3nAuGl_g4N0,49527
99
99
  by_framework/worker/sandbox/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
100
100
  by_framework/worker/sandbox/hook_sandbox.py,sha256=XXSdH5YGX814LvV03vkq-zn5DVIBPYYt2NhRv1lT1Bk,2329
101
- by_framework-0.2.2.dev14.dist-info/METADATA,sha256=LpR98e5DnEucXKFwftIul_FFYGw3BQvTR3QNP2cayX0,28018
102
- by_framework-0.2.2.dev14.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
103
- by_framework-0.2.2.dev14.dist-info/entry_points.txt,sha256=5t6kgMjkR0UgJTpOsbuQDo0fOf7zeXjQW9DhkxfAGFc,56
104
- by_framework-0.2.2.dev14.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
105
- by_framework-0.2.2.dev14.dist-info/RECORD,,
101
+ by_framework-0.2.2.dev15.dist-info/METADATA,sha256=l050msraVm4RdyM0rIA_GXOpYu5pWyuUTdw7e2IBdd4,28018
102
+ by_framework-0.2.2.dev15.dist-info/WHEEL,sha256=zOwg4jB6zX2kU910N-cMawjivD6tO8NEWvE12je1bVk,87
103
+ by_framework-0.2.2.dev15.dist-info/entry_points.txt,sha256=5t6kgMjkR0UgJTpOsbuQDo0fOf7zeXjQW9DhkxfAGFc,56
104
+ by_framework-0.2.2.dev15.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
105
+ by_framework-0.2.2.dev15.dist-info/RECORD,,