Cheap observability for Python processes
Project description
Cheap observability for Python processes, with a browser UI and almost no setup.
Live demo: https://demo.plotsrv.com
See plotsrv rendering live plots, tables, JSON, text, and other artifacts in a real browser UI.
plotsrv is a lightweight Python server for exposing live Python objects and on-disk files in a single browser UI. It gives you quick visibility into pipelines, experiments, batch jobs, and long-running processes without needing a full observability stack.
Add a decorator to functions you want to expose, or publish artifacts directly from your code. Fire up the server with a single command, and plotsrv takes care of discovery, view registration, and object-specific rendering automatically.
Key features:
- Browser UI built on FastAPI for viewing live outputs in one place
- Automatic rendering for common Python outputs: plots, tables, JSON, text, HTML, images, code, and tracebacks
- Minimal setup: decorate functions and launch the server
- AST-based discovery of decorated views, so the UI can pre-populate navigation on startup
- Optional on-disk snapshots, with historical browsing and configurable retention
- Freshness tracking, so you can quickly see when a process is delayed or stale
- Configuration via
plotsrv.yaml, including UI settings - CLI-first workflow, with Python entry points available where needed
What it can render
- plots
- tables
- JSON and dictionaries
- markdown and HTML
- images
- plain text and code
- tracebacks
It can also watch files on disk and expose them in the same UI.
Get going
- Start the server
plotsrv run your_module.py --host 127.0.0.1 --port 8000
You can also start the server from Python if needed.
- Expose views from your code
The main pattern is to decorate functions whose output you want to expose:
from plotsrv import plotsrv
@plotsrv(label="sales", section="insights")
def sales_plot():
return fig
@plotsrv(label="latest", section="insights")
def latest_results():
return df
plotsrv inspects the returned object and chooses an appropriate renderer automatically.
You can also publish artifacts directly instead of using decorators:
from plotsrv import publish_artifact
publish_artifact({"status": "ok", "rows": 123}, label="summary")
Watching files on disk
plotsrv can also expose files directly from disk, which is useful for logs, reports, HTML files, JSON outputs, CSVs, and generated artifacts.
plotsrv run src.etl --host 127.0.0.1 --port 8000 \
--watch /var/log/etl_log.txt --watch-label etl-log --watch-section log-files --watch-tail --no-truncate
Status
plotsrv is currently pre-0.1.0 and still evolving, but is already usable for real workflows.
License
plotsrv is licensed under the Apache License 2.0.\
See the LICENSE file for full details.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file plotsrv-0.0.7.tar.gz.
File metadata
- Download URL: plotsrv-0.0.7.tar.gz
- Upload date:
- Size: 610.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8c40bc0b8b0e9efb9f90c375050d452eae1ff870eac3e8883a33acd85f10886
|
|
| MD5 |
dc620ba7341cd9eaebd03cd14e492576
|
|
| BLAKE2b-256 |
593643ad64030084de3676bb287bacbe5a60ec05573363f2a66cf65d12ef1edf
|
File details
Details for the file plotsrv-0.0.7-py3-none-any.whl.
File metadata
- Download URL: plotsrv-0.0.7-py3-none-any.whl
- Upload date:
- Size: 494.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f349a88d1cd7364fa5ffbaae7d430fb88fcef73143a1cf46898cbecb1374196c
|
|
| MD5 |
274e62aebe5ba060bdee11f9dd878052
|
|
| BLAKE2b-256 |
2e4bac38b87f265725288c707d9e00e6dafa20d433fdeaa9de7c1fa8c794d84c
|