Module: Foam::Otel::Classifier
- Defined in:
- lib/foam/otel/classifier.rb
Constant Summary collapse
- SIGNALS =
%i[traces metrics logs].freeze
- UNCLASSIFIABLE =
Sentinel owner for a slot whose FREE predicate is unavailable (the Internal proxy constant disappeared — see Verdict#unclassifiable?).
:unclassifiable_otel_api_shape
Class Method Summary collapse
- .classify ⇒ Object
-
.classify_signal(signal) ⇒ Object
One slot, read NOW.
-
.owner_name(provider) ⇒ Object
A registered provider does not announce its vendor; the class/package is the honest best-effort, "an unknown OTel SDK" the fallback (rule 18 B).
- .verdict(provider, proxy_class) ⇒ Object
Class Method Details
.classify ⇒ Object
48 49 50 |
# File 'lib/foam/otel/classifier.rb', line 48 def classify SIGNALS.to_h { |signal| [signal, classify_signal(signal)] } end |
.classify_signal(signal) ⇒ Object
One slot, read NOW. init() calls this IMMEDIATELY before each signal's setter — never as an up-front classify-all pass — so the unavoidable pre-read→set gap (Ruby has no atomic set-once attempt; GOTCHAS F8) stays as narrow as the platform allows.
56 57 58 59 60 61 62 63 64 65 |
# File 'lib/foam/otel/classifier.rb', line 56 def classify_signal(signal) case signal when :traces verdict(OpenTelemetry.tracer_provider, defined?(OpenTelemetry::Internal::ProxyTracerProvider) && OpenTelemetry::Internal::ProxyTracerProvider) when :metrics verdict(OpenTelemetry.meter_provider, defined?(OpenTelemetry::Internal::ProxyMeterProvider) && OpenTelemetry::Internal::ProxyMeterProvider) when :logs verdict(OpenTelemetry.logger_provider, defined?(OpenTelemetry::Internal::ProxyLoggerProvider) && OpenTelemetry::Internal::ProxyLoggerProvider) end end |
.owner_name(provider) ⇒ Object
A registered provider does not announce its vendor; the class/package is the honest best-effort, "an unknown OTel SDK" the fallback (rule 18 B).
81 82 83 84 85 86 |
# File 'lib/foam/otel/classifier.rb', line 81 def owner_name(provider) name = provider.class.name name && !name.empty? ? name : "an unknown OTel SDK" rescue StandardError "an unknown OTel SDK" end |
.verdict(provider, proxy_class) ⇒ Object
67 68 69 70 71 72 73 74 75 76 |
# File 'lib/foam/otel/classifier.rb', line 67 def verdict(provider, proxy_class) # No proxy constant to test against: fail safe (never register into a # slot foam cannot prove free) but report the DISTINCT unclassifiable # state — a degraded verdict must never name the renamed proxy class # as a "foreign owner" (rule 42 warned no-op, GOTCHAS G14). return Verdict.new(false, UNCLASSIFIABLE) unless proxy_class free = provider.instance_of?(proxy_class) Verdict.new(free, free ? nil : owner_name(provider)) end |