Class BowireTelemetry

Namespace
Kuestenlogik.Bowire.Telemetry
Assembly
Kuestenlogik.Bowire.dll

Canonical OpenTelemetry surface for Bowire (issue #29). A single ActivitySource and a single Meter with the stable name Kuestenlogik.Bowire so every consumer -- host pipelines that pick up Bowire's traces / metrics via WithTracing().AddSource(...) and WithMetrics().AddMeter(...) -- references one name and receives every Bowire-domain signal we ever emit.

public static class BowireTelemetry
Inheritance
BowireTelemetry
Inherited Members

Remarks

Names are stable, even when Bowire isn't. The ActivityName / MeterName constants don't change between minor releases -- if they ever do we'll cut a major. Embedded hosts and Grafana dashboards can pin against them without breakage.

Always-on, always-cheap. The instruments are created at module-load time regardless of whether OTel is wired up. With no listener, the SDK's no-op fast path keeps the per-call cost at a single virtual call + a null check. Opt-in happens at the host's AddBowireTelemetry call: the SDK starts collecting when a listener attaches.

Fields

ActivityName

public const string ActivityName = "Kuestenlogik.Bowire"

Field Value

string

ActivitySource

Shared ActivitySource Bowire emits all its spans through. Embedded hosts add AddSource(SourceName) to their existing WithTracing() configuration and the Bowire-side spans flow into the host's exporter without further wiring.

public static readonly ActivitySource ActivitySource

Field Value

ActivitySource

DiscoverCount

bowire.discover.count -- discovery passes against backends.

public static readonly Counter<long> DiscoverCount

Field Value

Counter<long>

InvokeCount

bowire.invoke.count -- one increment per workbench invoke.

public static readonly Counter<long> InvokeCount

Field Value

Counter<long>

InvokeDuration

bowire.invoke.duration -- millisecond histogram of invoke latency.

public static readonly Histogram<double> InvokeDuration

Field Value

Histogram<double>

Meter

Shared Meter Bowire emits all its metrics through. Embedded hosts add AddMeter(SourceName) to their existing WithMetrics() configuration.

public static readonly Meter Meter

Field Value

Meter

MeterName

public const string MeterName = "Kuestenlogik.Bowire"

Field Value

string

MockRequests

bowire.mock.requests -- request entries against UI-started mocks.

public static readonly Counter<long> MockRequests

Field Value

Counter<long>

PluginLifecycle

bowire.plugin.lifecycle -- one increment per operator-triggered plugin lifecycle action (restart / unload / load / reset-storage). The action + outcome dimensions split success from failure so dashboards can spot a plugin that's restarting on a loop.

public static readonly Counter<long> PluginLifecycle

Field Value

Counter<long>

PluginLoad

bowire.plugin.load -- one increment per protocol-plugin load attempt at startup.

public static readonly Counter<long> PluginLoad

Field Value

Counter<long>

SourceName

Source name used for both the ActivitySource and the Meter.

public const string SourceName = "Kuestenlogik.Bowire"

Field Value

string