def test_aggregator_partial_flush_0_spans(): writer = DummyWriter() aggr = SpanAggregator(partial_flush_enabled=True, partial_flush_min_spans=0, trace_processors=[], writer=writer) # Normal usage parent = Span(None, "parent", on_finish=[aggr.on_span_finish]) aggr.on_span_start(parent) child = Span(None, "child", on_finish=[aggr.on_span_finish]) child.trace_id = parent.trace_id child.parent_id = parent.span_id aggr.on_span_start(child) assert writer.pop() == [] child.finish() assert writer.pop() == [child] parent.finish() assert writer.pop() == [parent] # Parent closes before child parent = Span(None, "parent", on_finish=[aggr.on_span_finish]) aggr.on_span_start(parent) child = Span(None, "child", on_finish=[aggr.on_span_finish]) child.trace_id = parent.trace_id child.parent_id = parent.span_id aggr.on_span_start(child) assert writer.pop() == [] parent.finish() assert writer.pop() == [parent] child.finish() assert writer.pop() == [child]
def test_aggregator_partial_flush_2_spans(): writer = DummyWriter() aggr = SpanAggregator(partial_flush_enabled=True, partial_flush_min_spans=2, trace_processors=[], writer=writer) # Normal usage parent = Span("parent", on_finish=[aggr.on_span_finish]) aggr.on_span_start(parent) child = Span("child", on_finish=[aggr.on_span_finish]) child.trace_id = parent.trace_id child.parent_id = parent.span_id aggr.on_span_start(child) assert writer.pop() == [] child.finish() assert writer.pop() == [] parent.finish() assert writer.pop() == [parent, child] # Parent closes before child parent = Span("parent", on_finish=[aggr.on_span_finish]) aggr.on_span_start(parent) child = Span("child", on_finish=[aggr.on_span_finish]) child.trace_id = parent.trace_id child.parent_id = parent.span_id aggr.on_span_start(child) assert writer.pop() == [] parent.finish() assert writer.pop() == [] child.finish() assert writer.pop() == [parent, child] # Partial flush parent = Span("parent", on_finish=[aggr.on_span_finish]) aggr.on_span_start(parent) child1 = Span("child1", on_finish=[aggr.on_span_finish]) child1.trace_id = parent.trace_id child1.parent_id = parent.span_id aggr.on_span_start(child1) child2 = Span("child2", on_finish=[aggr.on_span_finish]) child2.trace_id = parent.trace_id child2.parent_id = parent.span_id aggr.on_span_start(child2) assert writer.pop() == [] child1.finish() assert writer.pop() == [] child2.finish() assert writer.pop() == [child1, child2] assert child1.get_metric("_dd.py.partial_flush") == 2 assert child2.get_metric("_dd.py.partial_flush") is None parent.finish() assert writer.pop() == [parent] assert parent.get_metric("_dd.py.partial_flush") is None