Metadata-Version: 2.4
Name: jsrv
Version: 3.1.0
Summary: Production operations and monitoring server for jrtc
Author-email: Leydotpy <leydotpy.dev@gmail.com>
License-Expression: MIT
Project-URL: Repository, https://github.com/Leydotpy/Janus-API
Project-URL: Issues, https://github.com/Leydotpy/Janus-API/issues
Classifier: Development Status :: 4 - Beta
Classifier: Framework :: AsyncIO
Classifier: Framework :: FastAPI
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Typing :: Typed
Requires-Python: >=3.12
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: jrtc==3.1.0
Requires-Dist: broka==0.0.2
Requires-Dist: fastapi<1,>=0.115
Requires-Dist: logvista==0.1.0
Requires-Dist: starlette<2,>=1.3.1
Requires-Dist: uvicorn<1,>=0.30
Requires-Dist: websockets<17,>=14
Provides-Extra: admin
Requires-Dist: asyncpg<1,>=0.29; extra == "admin"
Provides-Extra: kafka
Requires-Dist: jrtc[kafka]==3.1.0; extra == "kafka"
Provides-Extra: ops
Requires-Dist: asyncpg<1,>=0.29; extra == "ops"
Requires-Dist: jrtc[kafka]==3.1.0; extra == "ops"
Dynamic: license-file

# jsrv

Production operations and monitoring service for `jrtc`.

This distribution owns the FastAPI/Starlette application, ASGI lifespan,
Admin/Monitor client, optional Timescale persistence, EventHandler ingestion,
and structured log viewer. It depends on `jrtc`, while `jrtc` has no
dependency on this server.

The server never creates or attaches a Janus session, starts a
`JanusSessionManager`, installs a process-global Janus manager, or owns a core
event publisher. Each application remains responsible for its own Janus session
lifecycle.

```python
from jsrv import create_asgi_app

app = create_asgi_app(mount_rest_api=True)
```

Install the optional persistence and Kafka support with:

```bash
pip install "jsrv[ops]"
```

See the
[project README](https://github.com/Leydotpy/Janus-API/blob/main/README.md#operations-server-configuration)
for configuration, deployment, and security, and the
[broker event guide](https://github.com/Leydotpy/Janus-API/blob/main/docs/broker-events.md)
for the wire contract. In particular, EventHandler records use Broka envelopes
rather than the raw-JSON Kafka values emitted by the former bundled server, so
existing native consumers require a coordinated migration.

Deploy EventHandler-only replicas horizontally against a shared durable broker.
Admin polling, Timescale fallback sampling, and file tailing must be singletons
per Janus target or log file; run those features with one ASGI worker or an
external leader election mechanism, and scale them separately from ingestion.
