dita_v2: VenueTelemetrySnapshot + Zinc venue plane (4th shm partition) + local Rust target dir
Upstream-canonical commit of the ~366 lines that sat uncommitted in the working tree (surveyed in DITAV2_SOA_SURVEY_20260702). Venue telemetry published at every venue boundary (submit/cancel/reconcile) over the zinc venue_region; SOA per UV DITAv2 adjudication 2026-07-03. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@ import struct
|
||||
import sys
|
||||
import threading
|
||||
|
||||
from .contracts import KernelIntent, TradeSide, TradeSlot, TradeStage, VenueOrder, VenueOrderStatus
|
||||
from .contracts import KernelIntent, TradeSide, TradeSlot, TradeStage, VenueOrder, VenueOrderStatus, VenueTelemetrySnapshot
|
||||
from .control import KernelControlSnapshot
|
||||
|
||||
_ZINC_ADAPTER_PATH = Path(__file__).resolve().parents[3] / "zinc" / "adapters" / "python"
|
||||
@@ -130,6 +130,42 @@ def _decode_packet(buf: memoryview) -> Dict[str, Any]:
|
||||
return out
|
||||
|
||||
|
||||
def _venue_from_payload(payload: Dict[str, Any]) -> VenueTelemetrySnapshot:
|
||||
timestamp = payload.get("timestamp")
|
||||
ts_value = None
|
||||
if isinstance(timestamp, str) and timestamp:
|
||||
try:
|
||||
ts_value = datetime.fromisoformat(timestamp)
|
||||
except Exception:
|
||||
ts_value = None
|
||||
try:
|
||||
side = TradeSide(str(payload.get("side", TradeSide.FLAT.value)))
|
||||
except Exception:
|
||||
side = TradeSide.FLAT
|
||||
details = payload.get("details", {})
|
||||
return VenueTelemetrySnapshot(
|
||||
phase=str(payload.get("phase", "idle")),
|
||||
status=str(payload.get("status", "IDLE")),
|
||||
venue=str(payload.get("venue", "bingx")),
|
||||
endpoint=str(payload.get("endpoint", "")),
|
||||
method=str(payload.get("method", "")),
|
||||
intent_id=str(payload.get("intent_id", "")),
|
||||
trade_id=str(payload.get("trade_id", "")),
|
||||
slot_id=int(payload.get("slot_id", 0) or 0),
|
||||
asset=str(payload.get("asset", "")),
|
||||
side=side,
|
||||
action=str(payload.get("action", "")),
|
||||
order_id=str(payload.get("order_id", "")),
|
||||
client_order_id=str(payload.get("client_order_id", "")),
|
||||
venue_order_status=str(payload.get("venue_order_status", "")),
|
||||
venue_event_kind=str(payload.get("venue_event_kind", "")),
|
||||
message=str(payload.get("message", "")),
|
||||
retry_after_ms=int(payload.get("retry_after_ms", 0) or 0),
|
||||
timestamp=ts_value,
|
||||
details=dict(details) if isinstance(details, dict) else {},
|
||||
)
|
||||
|
||||
|
||||
class RealZincPlane:
|
||||
"""Shared-memory Zinc plane used by the Python prototype."""
|
||||
|
||||
@@ -148,18 +184,22 @@ class RealZincPlane:
|
||||
self.intent_name = f"{base}_intent"
|
||||
self.state_name = f"{base}_state"
|
||||
self.control_name = f"{base}_control"
|
||||
self.venue_name = f"{base}_venue"
|
||||
self._intent_seq = 0
|
||||
self._state_seq = 0
|
||||
self._control_seq = 0
|
||||
self._venue_seq = 0
|
||||
self._lock = threading.Lock()
|
||||
self._slot_cache: Dict[int, TradeSlot] = {i: TradeSlot(slot_id=i) for i in range(int(slot_count))}
|
||||
self._slot_count = int(slot_count)
|
||||
self._intent_cache: List[Dict[str, Any]] = []
|
||||
self._control_cache = KernelControlSnapshot()
|
||||
self._venue_cache = VenueTelemetrySnapshot()
|
||||
if create:
|
||||
self.intent_region = SharedRegion.create(self.intent_name, intent_capacity)
|
||||
self.state_region = SharedRegion.create(self.state_name, state_capacity)
|
||||
self.control_region = SharedRegion.create(self.control_name, control_capacity)
|
||||
self.venue_region = SharedRegion.create(self.venue_name, control_capacity)
|
||||
self._write_region(self.control_region, self._control_seq, {"control": self._control_cache.as_dict()})
|
||||
self._write_region(
|
||||
self.state_region,
|
||||
@@ -167,13 +207,16 @@ class RealZincPlane:
|
||||
{"slots": [self._slot_cache[key].to_dict() for key in range(self._slot_count)]},
|
||||
)
|
||||
self._write_region(self.intent_region, self._intent_seq, {"items": []})
|
||||
self._write_region(self.venue_region, self._venue_seq, {"venue": self._venue_cache.as_dict()})
|
||||
else:
|
||||
self.intent_region = SharedRegion.open(self.intent_name)
|
||||
self.state_region = SharedRegion.open(self.state_name)
|
||||
self.control_region = SharedRegion.open(self.control_name)
|
||||
self.venue_region = SharedRegion.open(self.venue_name)
|
||||
control_payload = _decode_packet(self.control_region.as_buffer())
|
||||
state_payload = _decode_packet(self.state_region.as_buffer())
|
||||
intent_payload = _decode_packet(self.intent_region.as_buffer())
|
||||
venue_payload = _decode_packet(self.venue_region.as_buffer())
|
||||
if isinstance(control_payload.get("control"), dict):
|
||||
self._control_cache = KernelControlSnapshot(**control_payload["control"])
|
||||
if isinstance(state_payload.get("slots"), list):
|
||||
@@ -183,11 +226,14 @@ class RealZincPlane:
|
||||
self._slot_cache[int(slot.slot_id)] = slot
|
||||
if isinstance(intent_payload.get("items"), list):
|
||||
self._intent_cache = list(intent_payload["items"])
|
||||
if isinstance(venue_payload.get("venue"), dict):
|
||||
self._venue_cache = _venue_from_payload(venue_payload["venue"])
|
||||
|
||||
def close(self) -> None:
|
||||
self.intent_region.close()
|
||||
self.state_region.close()
|
||||
self.control_region.close()
|
||||
self.venue_region.close()
|
||||
|
||||
def publish_intent(self, intent: KernelIntent) -> None:
|
||||
with self._lock:
|
||||
@@ -246,6 +292,26 @@ class RealZincPlane:
|
||||
def notify_control(self) -> None:
|
||||
self.control_region.notify()
|
||||
|
||||
def publish_venue(self, telemetry: VenueTelemetrySnapshot) -> None:
|
||||
with self._lock:
|
||||
self._venue_seq += 1
|
||||
self._venue_cache = telemetry
|
||||
self._write_region(self.venue_region, self._venue_seq, {"venue": telemetry.as_dict()})
|
||||
|
||||
def read_venue(self) -> VenueTelemetrySnapshot:
|
||||
payload = _decode_packet(self.venue_region.as_buffer())
|
||||
venue = payload.get("venue") if isinstance(payload, dict) else None
|
||||
if not isinstance(venue, dict):
|
||||
return self._venue_cache
|
||||
self._venue_cache = _venue_from_payload(venue)
|
||||
return self._venue_cache
|
||||
|
||||
def wait_on_venue(self, timeout_ms: int = 1000) -> bool:
|
||||
return bool(self.venue_region.wait(timeout_ms))
|
||||
|
||||
def notify_venue(self) -> None:
|
||||
self.venue_region.notify()
|
||||
|
||||
def wait_on_intent(self, timeout_ms: int = 1000) -> bool:
|
||||
return bool(self.intent_region.wait(timeout_ms))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user