"""
PD-Sep Lifecycle Profiler — patch for mooncake_connector.py + scheduler.py

Activated by env var: VLLM_PD_PROFILE_LOG=/path/to/events.jsonl

Each line is one event:
  {"t_ns": <perf_counter_ns>, "event": "<name>", "req_id": "<id>",
   "transfer_id": "<id>", "role": "<kv_producer|kv_consumer>",
   "data": {...event-specific fields...}}

This module is imported by the patched mooncake_connector.py and scheduler.py
to centralize event emission.
"""

import os
import json
import time
import threading
from typing import Any

_LOG_FILE = os.environ.get("VLLM_PD_PROFILE_LOG", "")
_LOCK = threading.Lock()
_HANDLE = None
_ENABLED = bool(_LOG_FILE)


def _get_handle():
    global _HANDLE
    if _HANDLE is None and _ENABLED:
        _HANDLE = open(_LOG_FILE, "a", buffering=1)  # line-buffered
    return _HANDLE


def emit(event: str, req_id: str = "", transfer_id: str = "",
         role: str = "", **data: Any) -> None:
    """Record a profile event. No-op if VLLM_PD_PROFILE_LOG is not set."""
    if not _ENABLED:
        return
    record = {
        "t_ns": time.perf_counter_ns(),
        "event": event,
        "req_id": str(req_id),
        "transfer_id": str(transfer_id),
        "role": role,
        "data": data,
    }
    try:
        h = _get_handle()
        if h:
            with _LOCK:
                h.write(json.dumps(record, default=str) + "\n")
    except Exception:
        pass  # never let profiling break vLLM


def enabled() -> bool:
    return _ENABLED
