bloccs_web
A self-hosted, real-time dashboard for bloccs
— mount it into your Phoenix app and watch your running networks: topology in the
bloccs hexagon notation, live per-node metrics, and coverage. Modeled on
oban_web: a separate package, mounted with one router macro, shipping
precompiled assets (no Node build in your app).
Experimental. bloccs_web tracks the bloccs library closely and its API may change between minor versions while both are pre-1.0.
It is observe-only — the dashboard reads the library's Bloccs.Introspect
API and the [:bloccs, …] telemetry stream; it never drives the runtime.
Install
# mix.exs
def deps do
[
{:bloccs, "~> 0.3"},
{:bloccs_web, "~> 0.1"}
]
end
Mount
# lib/my_app_web/router.ex
defmodule MyAppWeb.Router do
use MyAppWeb, :router
import Bloccs.Web.Router
scope "/" do
pipe_through [:browser, :require_admin] # your existing auth
bloccs_dashboard "/bloccs"
end
end
Visit /bloccs. The dashboard inherits auth from the pipeline you pipe it
through. See the installation guide for the resolver
(per-feature authorization) and asset details.
The four panels
- Networks — every running network, with node/edge counts and uptime.
- Topology — the network graph drawn in the bloccs hexagon notation, node state lighting up live.
- Metrics — per-node throughput, latency, error rate, and queue back-pressure, on a rolling window.
- Coverage — which ports and edges a run actually exercised, plus a
.bloccs-traceviewer.
License & Pro
bloccs_web is Apache-2.0-licensed and free. Some advanced features may later be
offered under a bloccs Pro license; the dashboard ships the gating seam (a
Bloccs.Web.Resolver) but no license logic — in the open build every feature is
on.
Try it locally
From a checkout of this repo:
$ mix deps.get
$ mix dev
# → open http://localhost:4000/bloccs
mix dev boots a standalone Phoenix endpoint with the dashboard mounted, starts
a sample orders network, and drives a trickle of traffic so the live metrics
and topology animate. (The precompiled app.js bundle is committed, so no Node
build is needed; rebuild it with mix assets.build if you change assets/.)