You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This umbrella issue enumerates all the pull requests and linked issues that make up the initial introspection proof-of-concept for go-libp2p.
The project is affectionately codenamed Phantom Drift 👻🌊, and we'll be open sourcing the UI and widget library soon. A sneak peek:
Scope
The initial proof-of-concept comprises these components and concepts on the libp2p backend side of the fence:
an Protobuf introspection schema that libp2p implementations adhere to to offer introspection ability.
a WebSockets-based introspection protocol that uses the schema and offers a set of RPCs and streaming operations to fetch the current state of the stack and the events circulating through the eventbus.
an introspectable Host: a Host that renders itself to introspection by offering an introspection endpoint that speak the above protocol.
an introspector component that does the heavy-lifting of sourcing data from the inner libp2p modules (e.g. swarm, DHT, etc.) to expose over the introspection endpoint.
REPL support for quick testing.
On the frontend/application/UI side of things:
the libp2p observer shell: a web application onto which you can load libp2p observation widgets, load file dumps of introspection data, or connect to a live libp2p instance to visualise real-time, or travel back and forth in time to view the state of the host at that point. https://github.com/libp2p/observation-deck
After reviewing the solution end-to-end, I'm proposing that we make a few architectural changes.
I don't like the fact that modules (e.g. swarm) are responsible for populating the introspection schema. I think they should just return go-libp2p-core objects, and the introspector should translate to the introspection schema.
That model also creates symmetry -- the data you can obtain from introspection is the same data that's in the libp2p core model. Otherwise, we can get into a paradoxical situation where an outside observer (introspection UI) would be capable of obtaining more information about the system than an internal observer (via the core API).
I'm going to rejigger the data provider system / introspector accordingly.
I might also move the introspector into go-libp2p -- to align with our pursuit of codebase simplification. The introspector is one of those "replaceable, not modular" components. 99% of users will use the default introspector; the other 1% can implement the interface and inject the custom implementation via the constructor option.
This umbrella issue enumerates all the pull requests and linked issues that make up the initial introspection proof-of-concept for go-libp2p.
The project is affectionately codenamed Phantom Drift 👻🌊, and we'll be open sourcing the UI and widget library soon. A sneak peek:
Scope
The initial proof-of-concept comprises these components and concepts on the libp2p backend side of the fence:
Host
that renders itself to introspection by offering an introspection endpoint that speak the above protocol.On the frontend/application/UI side of things:
go-libp2p work tracker
libp2p/go-libp2p-core
:libp2p/go-libp2p-introspector
: may merge into go-libp2p.libp2p/go-libp2p-swarm
:ID()
method on connections and streams + record opening time go-libp2p-swarm#224libp2p/go-libp2p
:libp2p/repl
:libp2p/go-eventbus
:libp2p/go-libp2p-kad-dht
:For reference, here's the initial issue where this work was initially introduced: #775
The text was updated successfully, but these errors were encountered: