honeyhive.tracer.registry
Tracer registry for automatic tracer discovery via OpenTelemetry baggage.
This module provides a lightweight registry system that enables backward-compatible @trace decorator usage by automatically discovering the appropriate HoneyHiveTracer instance from OpenTelemetry baggage context.
The registry uses weak references to prevent memory leaks and automatically cleans up when tracer instances are garbage collected.
register_tracer
register_tracer(tracer: HoneyHiveTracer) -> str
Register a tracer instance and return its unique ID.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tracer
|
HoneyHiveTracer
|
HoneyHiveTracer instance to register |
required |
Returns:
| Type | Description |
|---|---|
str
|
Unique tracer ID for use in baggage context |
Example
tracer = HoneyHiveTracer(api_key="your-api-key") # project from API key tracer_id = register_tracer(tracer) print(f"Registered tracer with ID: {tracer_id}")
Source code in src/honeyhive/tracer/registry.py
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | |
unregister_tracer
Unregister a tracer instance by ID.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tracer_id
|
str
|
Unique tracer ID to unregister |
required |
Returns:
| Type | Description |
|---|---|
bool
|
True if tracer was found and unregistered, False otherwise |
Note
This is typically not needed as the WeakValueDictionary automatically cleans up when tracers are garbage collected.
Source code in src/honeyhive/tracer/registry.py
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | |
get_tracer_from_baggage
get_tracer_from_baggage(
ctx: Optional[Context] = None,
) -> Optional[HoneyHiveTracer]
Discover and return the HoneyHiveTracer instance from baggage context.
This function looks up the tracer ID from OpenTelemetry baggage and returns the corresponding registered tracer instance.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
ctx
|
Optional[Context]
|
OpenTelemetry context to read baggage from. If None, uses current context. |
None
|
Returns:
| Type | Description |
|---|---|
Optional[HoneyHiveTracer]
|
HoneyHiveTracer instance if found in baggage and registry, |
Optional[HoneyHiveTracer]
|
None otherwise |
Example
Within a traced context:
tracer = get_tracer_from_baggage() if tracer: ... print(f"Found tracer for project: {tracer.project}")
Source code in src/honeyhive/tracer/registry.py
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 | |
set_default_tracer
set_default_tracer(
tracer: Optional[HoneyHiveTracer],
) -> None
Set a global default tracer for backward compatibility.
This tracer will be used as a fallback when no tracer is found in baggage context and no explicit tracer is provided.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
tracer
|
Optional[HoneyHiveTracer]
|
HoneyHiveTracer instance to use as default, or None to clear the default |
required |
Example
default_tracer = HoneyHiveTracer(api_key="your-api-key") # auto project set_default_tracer(default_tracer)
Now @trace will use default_tracer when no context available
@trace ... def my_function(): ... pass
Source code in src/honeyhive/tracer/registry.py
134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 | |
get_default_tracer
get_default_tracer() -> Optional[HoneyHiveTracer]
Get the global default tracer if set and still alive.
Returns:
| Type | Description |
|---|---|
Optional[HoneyHiveTracer]
|
Default HoneyHiveTracer instance if set and not garbage collected, |
Optional[HoneyHiveTracer]
|
None otherwise |
Example
tracer = get_default_tracer() if tracer: ... print(f"Default tracer project: {tracer.project}")
Source code in src/honeyhive/tracer/registry.py
164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | |
discover_tracer
discover_tracer(
explicit_tracer: Optional[HoneyHiveTracer] = None,
ctx: Optional[Context] = None,
) -> Optional[HoneyHiveTracer]
Discover the appropriate tracer using priority-based fallback.
This is the main function used by decorators to find the right tracer instance using the following priority order: 1. Explicit tracer parameter (highest priority) 2. Baggage-discovered tracer (context-aware) 3. Global default tracer (fallback)
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
explicit_tracer
|
Optional[HoneyHiveTracer]
|
Explicitly provided tracer (from decorator parameter) |
None
|
ctx
|
Optional[Context]
|
OpenTelemetry context to read baggage from |
None
|
Returns:
| Type | Description |
|---|---|
Optional[HoneyHiveTracer]
|
HoneyHiveTracer instance using priority fallback, None if none found |
Example
In decorator implementation:
tracer = discover_tracer( ... explicit_tracer=kwargs.get("tracer"), ... ctx=context.get_current() ... ) if tracer: ... # Use discovered tracer for tracing ... with tracer.start_span("operation") as span: ... # ... tracing logic
Source code in src/honeyhive/tracer/registry.py
190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 | |
get_all_tracers
get_all_tracers() -> List[HoneyHiveTracer]
Get all registered tracers.
Returns:
| Type | Description |
|---|---|
List[HoneyHiveTracer]
|
List of all registered HoneyHiveTracer instances |
Example
tracers = get_all_tracers() print(f"Found {len(tracers)} active tracers")
Source code in src/honeyhive/tracer/registry.py
238 239 240 241 242 243 244 245 246 247 248 | |
get_registry_stats
Get statistics about the tracer registry for debugging.
Returns:
| Type | Description |
|---|---|
Dict[str, int]
|
Dictionary with registry statistics |
Example
stats = get_registry_stats() print(f"Active tracers: {stats['active_tracers']}") print(f"Has default: {stats['has_default_tracer']}")
Source code in src/honeyhive/tracer/registry.py
251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 | |
clear_registry
clear_registry() -> None
Clear all registered tracers and default tracer.
This is primarily useful for testing and cleanup scenarios.
Warning
This will break any ongoing tracing operations that depend on auto-discovery. Use with caution.
Example
In test teardown:
clear_registry()
Source code in src/honeyhive/tracer/registry.py
268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 | |