···1212the output topic, and reports drop rate + latency. Exits non-zero on threshold
1313breach so it can be wired into CI as a gate.
14141515-The `measure` subcommand is reserved for when #236 (jetstream input stream
1616-plugin) lands — it will let the same measurement layer run in open-loop mode
1717-against any external input source. Today it prints a stub message.
1515+The `measure` subcommand is a planned open-loop mode: it would run the same
1616+measurement layer against events produced by an external source (such as the
1717+JetStream input stream sample from #236) rather than synthetic ones. It is not
1818+implemented yet, so today it prints a stub message; use `run` in the meantime.
1819"""
19202021from __future__ import annotations
···282283283284 measure = subparsers.add_parser(
284285 'measure',
285285- help='Measure-only mode (open-loop). Stub until #236 lands.',
286286+ help='Open-loop measurement mode; not yet implemented (use `run`).',
286287 )
287288 _add_common_kafka_args(measure)
288289 _add_threshold_args(measure)
···428429429430def cmd_measure(args: argparse.Namespace) -> int:
430431 print(
431431- '[osprey-stress] `measure` is not yet implemented. It will activate once '
432432- '#236 (jetstream input stream plugin) lands so this CLI can run the '
433433- 'measurement layer against externally-produced events. '
434434- 'Use `osprey-stress run` for synthetic closed-loop testing.',
432432+ '[osprey-stress] `measure` (open-loop mode) is not yet implemented. It is '
433433+ 'intended to measure against externally-produced events, such as the '
434434+ 'JetStream input stream sample (#236). '
435435+ 'Use `osprey-stress run` for synthetic closed-loop testing in the meantime.',
435436 file=sys.stderr,
436437 )
437438 return EXIT_INTERNAL_ERROR
···44wall-clock receive time per `ActionId` so the reporter can pair every input
55event with its output and compute end-to-end latency.
6677-Producer-agnostic: the same consumer works against synthetic load (#324),
88-jetstream-driven load (once #236 lands), or any other input source. The
99-optional `action_id_filter` decides whether we're in closed-loop matching mode
77+Producer-agnostic: the same consumer works against synthetic load (#324), an
88+external source such as the JetStream input stream, or any other input source.
99+The optional `action_id_filter` decides whether we're in closed-loop matching mode
1010(only count IDs we know about) or open-loop throughput mode (count everything).
1111"""
1212
···8899* Closed-loop (synthetic source): we know every action_id we sent and when we
1010 sent it, so we can compute exact drop rate and per-event latency.
1111-* Open-loop (external source — e.g. jetstream once #236 lands): we don't have
1111+* Open-loop (external source, e.g. the JetStream input stream): we don't have
1212 per-event produce timestamps, so latency is unavailable; we report aggregate
1313 throughput and drop rate via input/output counts.
1414"""