# Class LittleGhost::Instrumentation::Bus

Documentation version: Edge

Canonical HTML: https://littleghostai.org/docs/LittleGhost/Instrumentation/Bus.html

Thread-safe notification bus used by the process-wide Instrumentation API.

## Inheritance

`LittleGhost::Instrumentation::Bus < Object`

## Class methods

<a id="method-c-new"></a>
### `.new`

```ruby
.new(subscribers: [], content_capture: Support::ContentCapture.disabled)
```

Starts an independent bus with ordered subscribers and a content policy.

## Instance methods

<a id="method-i-active-3F"></a>
### `#active?`

```ruby
#active?(handle = nil)
```

With a handle, tests whether that exact handle is active. Without one, reports
whether the bus owns any active operations.

<a id="method-i-capture_content"></a>
### `#capture_content`

```ruby
#capture_content(policy)
```

Selects the diagnostic content policy used for future notifications.

<a id="method-i-context"></a>
### `#context`

```ruby
#context()
```

Copies the attributes active in the current execution.

<a id="method-i-current"></a>
### `#current`

```ruby
#current()
```

Finds the current non-detached Handle for this fiber, if any.

<a id="method-i-finish"></a>
### `#finish`

```ruby
#finish(handle, diagnostic: nil, **attributes)
```

Finishes an active handle and returns the final attribute hash.

<a id="method-i-flush"></a>
### `#flush`

```ruby
#flush(timeout: nil)
```

Flushes subscribers in registration order within an optional total timeout
budget.

<a id="method-i-instrument"></a>
### `#instrument`

```ruby
#instrument(name, payload = {})
```

Measures a block and records raised errors before re-raising them.

<a id="method-i-publish"></a>
### `#publish`

```ruby
#publish(name, diagnostic: nil, **attributes)
```

Publishes a point event with the current context and operation ID.

<a id="method-i-shutdown"></a>
### `#shutdown`

```ruby
#shutdown(timeout: nil)
```

Permanently shuts down this bus after all operations have finished.

<a id="method-i-start"></a>
### `#start`

```ruby
#start(name, parent: current, operation_id: SecureRandom.uuid, detached: false, diagnostic: nil, **attributes)
```

Starts an operation. `parent` may be a local Handle, a remote operation ID, or
nil. Set `detached` for work that will not finish in stack order.

<a id="method-i-subscribe"></a>
### `#subscribe`

```ruby
#subscribe(subscriber, prepend: false)
```

Subscribes a backend once. `prepend` controls notification order.

<a id="method-i-trace_context"></a>
### `#trace_context`

```ruby
#trace_context(**attributes)
```

Uses the first non-empty downstream trace context supplied by a subscriber.

<a id="method-i-unsubscribe"></a>
### `#unsubscribe`

```ruby
#unsubscribe(subscriber)
```

Unsubscribes a backend by identity.

<a id="method-i-with_context"></a>
### `#with_context`

```ruby
#with_context(attributes)
```

Adds copied attributes to notifications emitted while the block runs.
