fixtureqa 0.4.27__tar.gz → 0.4.29__tar.gz
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.
- {fixtureqa-0.4.27/fixtureqa.egg-info → fixtureqa-0.4.29}/PKG-INFO +1 -1
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_engine.py +7 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_models.py +1 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_stats.py +3 -1
- fixtureqa-0.4.27/fixture/static/assets/index-DgRTHspW.js → fixtureqa-0.4.29/fixture/static/assets/index-C2JvCG6w.js +22 -22
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/index.html +1 -1
- {fixtureqa-0.4.27 → fixtureqa-0.4.29/fixtureqa.egg-info}/PKG-INFO +1 -1
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/SOURCES.txt +1 -1
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/pyproject.toml +1 -1
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_engine.py +19 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/LICENSE +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/README.md +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/__init__.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/__main__.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/__init__.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/app.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/connection_manager.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/deps.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/__init__.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/admin.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/auth.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/branding.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/custom_tags.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/fix_spec.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/messages.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/perf.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/scenarios.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/sessions.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/setup.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/spec_overlay.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/templates.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/routers/ws.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/api/schemas.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/config/__init__.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/__init__.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/atomic_io.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/auth.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/config_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/custom_tag_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/db_migrations.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/events.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_application.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_builder.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_parser.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_spec_parser.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_tags.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/fix_time.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/housekeeping.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/inbound.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/json_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/latency_csv_writer.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/message_log.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/message_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/models.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_charts.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_payload.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/perf_writer.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/scenario_runner.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/scenario_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/session.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/session_manager.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/spec_overlay_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/template_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/user_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/core/venue_responses.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/fix_specs/FIX42.xml +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/fix_specs/FIX44.xml +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/server.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/assets/ag-grid-_QKprVdm.js +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/assets/index-C9bcm_lN.css +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/assets/index-CyNOPa0n.js +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/assets/react-vendor-2eF0YfZT.js +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/static/favicon.svg +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixture/ui/__init__.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/dependency_links.txt +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/entry_points.txt +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/requires.txt +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/fixtureqa.egg-info/top_level.txt +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/setup.cfg +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_atomic_io.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_auth.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_config_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_connection_manager.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_db_migrations.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_fix_builder.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_health.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_inbound.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_inbound_validation.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_message_store.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_api.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_models.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_payload.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_perf_rehydrate.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_scenarios.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_session_auto_response.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_session_lifecycle.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_session_manager_concurrency.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_sessions.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_templates.py +0 -0
- {fixtureqa-0.4.27 → fixtureqa-0.4.29}/tests/test_ws.py +0 -0
|
@@ -331,6 +331,12 @@ class PerfRun:
|
|
|
331
331
|
self.stats.amends_lost += 1
|
|
332
332
|
if entry.get("cancel_inflight"):
|
|
333
333
|
self.stats.cancels_lost += 1
|
|
334
|
+
if not entry.get("completed"):
|
|
335
|
+
# In-flight when the run ended — truncated, not timeout-reaped. Counted
|
|
336
|
+
# separately from lost_timeout so the summary reconciles (orders_sent =
|
|
337
|
+
# completions + lost_timeout + lost_shutdown) and "stuck" stays distinct
|
|
338
|
+
# from "ran out of time".
|
|
339
|
+
self.stats.lost_shutdown += 1
|
|
334
340
|
self._finalize(entry, "filled" if entry.get("completed") else "lost")
|
|
335
341
|
self._pending.clear()
|
|
336
342
|
self._venue_orders.clear()
|
|
@@ -1376,6 +1382,7 @@ class PerfRun:
|
|
|
1376
1382
|
cancel_latency=LatencyStats(**self.stats.cancel_latency.stats()),
|
|
1377
1383
|
scenario_latency=LatencyStats(**self.stats.scenario_latency.stats()),
|
|
1378
1384
|
errors=SnapshotErrors(lost_timeout=self.stats.lost_timeout,
|
|
1385
|
+
lost_shutdown=self.stats.lost_shutdown,
|
|
1379
1386
|
rejected=self.stats.rejected,
|
|
1380
1387
|
saturated=self.status == "saturated"))
|
|
1381
1388
|
self.latest = snap.model_dump()
|
|
@@ -163,7 +163,8 @@ class PerfStats:
|
|
|
163
163
|
# middle_manager relay: messages forwarded each direction
|
|
164
164
|
self.relay_fwd_down = 0 # client→venue direction (orders/amends/cancels)
|
|
165
165
|
self.relay_fwd_up = 0 # venue→client direction (execs/rejects)
|
|
166
|
-
self.lost_timeout = 0
|
|
166
|
+
self.lost_timeout = 0 # reaped mid-run by the timeout sweeper (genuinely stuck)
|
|
167
|
+
self.lost_shutdown = 0 # still in-flight when the run ended (truncated, not stuck)
|
|
167
168
|
self.dropped = 0
|
|
168
169
|
self.rejected = 0
|
|
169
170
|
self.pending = 0 # gauge, set by the engine
|
|
@@ -263,6 +264,7 @@ class PerfStats:
|
|
|
263
264
|
"cancels_received": self.cancels_received,
|
|
264
265
|
"cancels_uncorrelated": self.cancels_uncorrelated,
|
|
265
266
|
"lost_timeout": self.lost_timeout,
|
|
267
|
+
"lost_shutdown": self.lost_shutdown,
|
|
266
268
|
"dropped": self.dropped,
|
|
267
269
|
"rejected": self.rejected,
|
|
268
270
|
"scenarios_dispatched": self.scenarios_dispatched,
|