Skip to content

Commit f1b4671

Browse files
committed
add option to suppress resource information with RichConsoleExporter
1 parent 34db73e commit f1b4671

File tree

3 files changed

+40
-8
lines changed

3 files changed

+40
-8
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111
1212
## Unreleased
1313

14+
### Added
15+
16+
- `opentelemetry-instrumentation-richconsole`: Add support for suppressing resource information
17+
1418
## Version 1.38.0/0.59b0 (2025-10-16)
1519

1620
### Fixed

exporter/opentelemetry-exporter-richconsole/src/opentelemetry/exporter/richconsole/__init__.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -76,12 +76,12 @@ def _ns_to_time(nanoseconds):
7676
return ts.strftime("%H:%M:%S.%f")
7777

7878

79-
def _child_to_tree(child: Tree, span: ReadableSpan):
79+
def _child_to_tree(child: Tree, span: ReadableSpan, *, suppress_resource: bool):
8080
child.add(
8181
Text.from_markup(f"[bold cyan]Kind :[/bold cyan] {span.kind.name}")
8282
)
8383
_add_status(child, span)
84-
_child_add_optional_attributes(child, span)
84+
_child_add_optional_attributes(child, span, suppress_resource=suppress_resource)
8585

8686

8787
def _add_status(child: Tree, span: ReadableSpan):
@@ -106,7 +106,7 @@ def _add_status(child: Tree, span: ReadableSpan):
106106
)
107107

108108

109-
def _child_add_optional_attributes(child: Tree, span: ReadableSpan):
109+
def _child_add_optional_attributes(child: Tree, span: ReadableSpan, *, suppress_resource: bool):
110110
if span.events:
111111
events = child.add(
112112
label=Text.from_markup("[bold cyan]Events :[/bold cyan] ")
@@ -133,7 +133,7 @@ def _child_add_optional_attributes(child: Tree, span: ReadableSpan):
133133
f"[bold cyan]{attribute} :[/bold cyan] {span.attributes[attribute]}"
134134
)
135135
)
136-
if span.resource:
136+
if span.resource and not suppress_resource:
137137
resources = child.add(
138138
label=Text.from_markup("[bold cyan]Resources :[/bold cyan] ")
139139
)
@@ -155,21 +155,23 @@ class RichConsoleSpanExporter(SpanExporter):
155155
def __init__(
156156
self,
157157
service_name: Optional[str] = None,
158+
suppress_resource: bool = False,
158159
):
159160
self.service_name = service_name
161+
self.suppress_resource = suppress_resource
160162
self.console = Console()
161163

162164
def export(self, spans: typing.Sequence[ReadableSpan]) -> SpanExportResult:
163165
if not spans:
164166
return SpanExportResult.SUCCESS
165167

166-
for tree in self.spans_to_tree(spans).values():
168+
for tree in self.spans_to_tree(spans, suppress_resource=self.suppress_resource).values():
167169
self.console.print(tree)
168170

169171
return SpanExportResult.SUCCESS
170172

171173
@staticmethod
172-
def spans_to_tree(spans: typing.Sequence[ReadableSpan]) -> Dict[str, Tree]:
174+
def spans_to_tree(spans: typing.Sequence[ReadableSpan], *, suppress_resource: bool = False) -> Dict[str, Tree]:
173175
trees = {}
174176
parents = {}
175177
spans = list(spans)
@@ -186,7 +188,7 @@ def spans_to_tree(spans: typing.Sequence[ReadableSpan]) -> Dict[str, Tree]:
186188
)
187189
)
188190
parents[span.context.span_id] = child
189-
_child_to_tree(child, span)
191+
_child_to_tree(child, span, suppress_resource=suppress_resource)
190192
spans.remove(span)
191193
elif span.parent and span.parent.span_id in parents:
192194
child = parents[span.parent.span_id].add(
@@ -195,6 +197,6 @@ def spans_to_tree(spans: typing.Sequence[ReadableSpan]) -> Dict[str, Tree]:
195197
)
196198
)
197199
parents[span.context.span_id] = child
198-
_child_to_tree(child, span)
200+
_child_to_tree(child, span, suppress_resource=suppress_resource)
199201
spans.remove(span)
200202
return trees

exporter/opentelemetry-exporter-richconsole/tests/test_rich_exporter.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,14 @@
1313
# limitations under the License.
1414

1515
import pytest
16+
from rich.text import Text
1617
from rich.tree import Tree
1718

1819
import opentelemetry.trace
1920
from opentelemetry.exporter.richconsole import RichConsoleSpanExporter
2021
from opentelemetry.sdk import trace
2122
from opentelemetry.sdk.trace.export import BatchSpanProcessor
23+
from opentelemetry.sdk.resources import Resource
2224

2325

2426
@pytest.fixture(name="span_processor")
@@ -96,3 +98,27 @@ def test_multiple_traces(tracer_provider):
9698
parent_2.name in child.label
9799
for child in trees[traceid_1].children[0].children
98100
)
101+
102+
def test_suppress_resource(span_processor):
103+
attributes = {"resource.key": "resource.value"}
104+
resource = Resource(attributes)
105+
tracer_provider = trace.TracerProvider(resource=resource)
106+
tracer_provider.add_span_processor(span_processor)
107+
tracer = tracer_provider.get_tracer(__name__)
108+
109+
with tracer.start_as_current_span("parent") as parent:
110+
with tracer.start_as_current_span("child") as child:
111+
pass
112+
113+
trees = RichConsoleSpanExporter.spans_to_tree((parent, child), suppress_resource=True)
114+
assert len(trees) == 1
115+
116+
nodes = [next(t for t in trees.values())]
117+
for node in nodes:
118+
label = node.label
119+
if isinstance(label, Text):
120+
label = label.plain
121+
122+
assert "resource" not in label.lower()
123+
124+
nodes.extend(node.children)

0 commit comments

Comments
 (0)