|
11 | 11 | describe OpenTelemetry::Instrumentation::Sidekiq::Middlewares::Server::TracerMiddleware do
|
12 | 12 | let(:instrumentation) { OpenTelemetry::Instrumentation::Sidekiq::Instrumentation.instance }
|
13 | 13 | let(:exporter) { EXPORTER }
|
14 |
| - let(:metrics_exporter) { METRICS_EXPORTER } |
15 | 14 | let(:spans) { exporter.finished_spans }
|
16 | 15 | let(:enqueuer_span) { spans.first }
|
17 | 16 | let(:job_span) { spans.last }
|
18 | 17 | let(:root_span) { spans.find { |s| s.parent_span_id == OpenTelemetry::Trace::INVALID_SPAN_ID } }
|
19 | 18 | let(:config) { {} }
|
20 | 19 |
|
21 |
| - with_metrics do |
| 20 | + with_metrics_sdk do |
22 | 21 | let(:metric_snapshots) do
|
23 |
| - METRICS_EXPORTER.tap(&:pull).metric_snapshots.group_by(&:name) |
| 22 | + METRICS_EXPORTER.tap(&:pull) |
| 23 | + .metric_snapshots.select { |snapshot| snapshot.data_points.any? } |
| 24 | + .group_by(&:name) |
24 | 25 | end
|
25 | 26 | end
|
26 | 27 |
|
27 | 28 | before do
|
28 | 29 | instrumentation.install(config)
|
29 | 30 | exporter.reset
|
30 |
| - with_metrics { metrics_exporter.tap(&:pull).reset } |
| 31 | + reset_metrics_exporter |
31 | 32 | end
|
32 | 33 |
|
33 | 34 | after do
|
|
59 | 60 | _(job_span.events[1].name).must_equal('enqueued_at')
|
60 | 61 | end
|
61 | 62 |
|
62 |
| - it 'metrics processing', with_metrics: true do |
63 |
| - job_id = SimpleJob.perform_async |
64 |
| - SimpleJob.drain |
| 63 | + with_metrics_sdk do |
| 64 | + # FIXME: still seeing order-dependent failure here |
| 65 | + it 'yields no metrics if config is not set' do |
| 66 | + _(OpenTelemetry::Instrumentation::Sidekiq::Instrumentation.instance.metrics_enabled?).must_equal false |
| 67 | + job_id = SimpleJob.perform_async |
| 68 | + SimpleJob.drain |
65 | 69 |
|
66 |
| - queue_latency = metric_snapshots['messaging.queue.latency'] |
67 |
| - _(queue_latency.count).must_equal 1 |
68 |
| - _(queue_latency.first.data_points.count).must_equal 1 |
69 |
| - queue_latency_attributes = queue_latency.first.data_points.first.attributes |
70 |
| - _(queue_latency_attributes['messaging.system']).must_equal 'sidekiq' |
71 |
| - _(queue_latency_attributes['messaging.destination.name']).must_equal 'default' # FIXME: newer semconv specifies this key |
72 |
| - |
73 |
| - process_duration = metric_snapshots['messaging.process.duration'] |
74 |
| - _(process_duration.count).must_equal 1 |
75 |
| - _(process_duration.first.data_points.count).must_equal 1 |
76 |
| - process_duration_attributes = process_duration.first.data_points.first.attributes |
77 |
| - _(process_duration_attributes['messaging.system']).must_equal 'sidekiq' |
78 |
| - _(process_duration_attributes['messaging.operation.name']).must_equal 'process' |
79 |
| - _(process_duration_attributes['messaging.destination.name']).must_equal 'default' |
80 |
| - |
81 |
| - process_duration_data_point = process_duration.first.data_points.first |
82 |
| - _(process_duration_data_point.count).must_equal 1 |
83 |
| - |
84 |
| - consumed_messages = metric_snapshots['messaging.client.consumed.messages'] |
85 |
| - _(consumed_messages.count).must_equal 1 |
86 |
| - _(consumed_messages.first.data_points.count).must_equal 1 |
87 |
| - consumed_messages_attributes = queue_latency.first.data_points.first.attributes |
88 |
| - _(consumed_messages_attributes['messaging.system']).must_equal 'sidekiq' |
89 |
| - _(consumed_messages_attributes['messaging.destination.name']).must_equal 'default' # FIXME: newer semconv specifies this key |
90 |
| - _(consumed_messages.first.data_points.first.value).must_equal 1 |
| 70 | + _(exporter.finished_spans.size).must_equal 2 |
| 71 | + _(metric_snapshots).must_be_empty |
| 72 | + end |
| 73 | + |
| 74 | + describe 'with metrics enabled' do |
| 75 | + let(:config) { { metrics: true } } |
| 76 | + |
| 77 | + it 'metrics processing' do |
| 78 | + _(OpenTelemetry::Instrumentation::Sidekiq::Instrumentation.instance.metrics_enabled?).must_equal true |
| 79 | + job_id = SimpleJob.perform_async |
| 80 | + SimpleJob.drain |
| 81 | + |
| 82 | + queue_latency = metric_snapshots['messaging.queue.latency'] |
| 83 | + _(queue_latency.count).must_equal 1 |
| 84 | + _(queue_latency.first.data_points.count).must_equal 1 |
| 85 | + queue_latency_attributes = queue_latency.first.data_points.first.attributes |
| 86 | + _(queue_latency_attributes['messaging.system']).must_equal 'sidekiq' |
| 87 | + _(queue_latency_attributes['messaging.destination.name']).must_equal 'default' # FIXME: newer semconv specifies this key |
| 88 | + |
| 89 | + process_duration = metric_snapshots['messaging.process.duration'] |
| 90 | + _(process_duration.count).must_equal 1 |
| 91 | + _(process_duration.first.data_points.count).must_equal 1 |
| 92 | + process_duration_attributes = process_duration.first.data_points.first.attributes |
| 93 | + _(process_duration_attributes['messaging.system']).must_equal 'sidekiq' |
| 94 | + _(process_duration_attributes['messaging.operation.name']).must_equal 'process' |
| 95 | + _(process_duration_attributes['messaging.destination.name']).must_equal 'default' |
| 96 | + |
| 97 | + process_duration_data_point = process_duration.first.data_points.first |
| 98 | + _(process_duration_data_point.count).must_equal 1 |
| 99 | + |
| 100 | + consumed_messages = metric_snapshots['messaging.client.consumed.messages'] |
| 101 | + _(consumed_messages.count).must_equal 1 |
| 102 | + _(consumed_messages.first.data_points.count).must_equal 1 |
| 103 | + consumed_messages_attributes = queue_latency.first.data_points.first.attributes |
| 104 | + _(consumed_messages_attributes['messaging.system']).must_equal 'sidekiq' |
| 105 | + _(consumed_messages_attributes['messaging.destination.name']).must_equal 'default' # FIXME: newer semconv specifies this key |
| 106 | + _(consumed_messages.first.data_points.first.value).must_equal 1 |
| 107 | + end |
| 108 | + end |
91 | 109 | end
|
92 | 110 |
|
93 | 111 | it 'traces when enqueued with Active Job' do
|
|
0 commit comments