-
Notifications
You must be signed in to change notification settings - Fork 192
/
Copy pathmetrics_test_helpers.rb
86 lines (66 loc) · 2.26 KB
/
metrics_test_helpers.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# frozen_string_literal: true
# Copyright The OpenTelemetry Authors
#
# SPDX-License-Identifier: Apache-2.0
require 'minitest/spec'
module OpenTelemetry
module MetricsTestHelpers
module LoadedMetricsFeatures
OTEL_METRICS_API_LOADED = !Gem.loaded_specs['opentelemetry-metrics-api'].nil?
OTEL_METRICS_SDK_LOADED = !Gem.loaded_specs['opentelemetry-metrics-sdk'].nil?
extend self
def api_loaded?
OTEL_METRICS_API_LOADED
end
def sdk_loaded?
OTEL_METRICS_SDK_LOADED
end
end
module MinitestExtensions
def self.prepended(base)
base.extend(self)
end
def self.included(base)
base.extend(self)
end
def before_setup
super
reset_metrics_exporter
end
def with_metrics_sdk
yield if LoadedMetricsFeatures.sdk_loaded?
end
def without_metrics_sdk
yield unless LoadedMetricsFeatures.sdk_loaded?
end
def metrics_exporter
with_metrics_sdk { METRICS_EXPORTER }
end
def reset_meter_provider
with_metrics_sdk do
resource = OpenTelemetry.meter_provider.resource
OpenTelemetry.meter_provider = OpenTelemetry::SDK::Metrics::MeterProvider.new(resource: resource)
OpenTelemetry.meter_provider.add_metric_reader(METRICS_EXPORTER)
end
end
def reset_metrics_exporter
with_metrics_sdk do
METRICS_EXPORTER.pull
METRICS_EXPORTER.reset
end
end
def it(desc = 'anonymous', with_metrics_sdk: false, without_metrics_sdk: false, &block)
return super(desc, &block) unless with_metrics_sdk || without_metrics_sdk
raise ArgumentError, 'without_metrics_sdk and with_metrics_sdk must be mutually exclusive' if without_metrics_sdk && with_metrics_sdk
return if with_metrics_sdk && !LoadedMetricsFeatures.sdk_loaded?
return if without_metrics_sdk && LoadedMetricsFeatures.sdk_loaded?
super(desc, &block)
end
end
if LoadedMetricsFeatures.sdk_loaded?
METRICS_EXPORTER = OpenTelemetry::SDK::Metrics::Export::InMemoryMetricPullExporter.new
OpenTelemetry.meter_provider.add_metric_reader(METRICS_EXPORTER)
end
Minitest::Spec.prepend(MinitestExtensions)
end
end