From bc446bd82b8ccd15fd5ea7d94276de6369c0442c Mon Sep 17 00:00:00 2001 From: Bryce Buchanan Date: Tue, 20 Jun 2023 14:00:13 -0700 Subject: [PATCH 1/3] updated some metrics from struct to class --- Examples/Stable Metric Sample/main.swift | 3 +-- .../Metrics/Stable/DoubleCounterBuilder.swift | 4 +-- .../Metrics/Stable/DoubleGaugeBuilder.swift | 4 +-- .../Stable/DoubleHistogramBuilder.swift | 2 +- .../Stable/DoubleUpDownCounterBuilder.swift | 4 +-- .../Metrics/Stable/LongCounterBuilder.swift | 4 +-- .../Metrics/Stable/LongGaugeBuilder.swift | 4 +-- .../Metrics/Stable/LongHistogramBuilder.swift | 2 +- .../Stable/LongUpDownCounterBuilder.swift | 4 +-- .../Stable/DoubleCounterMeterBuilderSdk.swift | 3 ++- .../Stable/DoubleGaugeBuilderSdk.swift | 5 ++-- .../DoubleHistogramMeterBuilderSdk.swift | 2 +- .../Stable/DoubleHistogramMeterSdk.swift | 6 ++--- .../DoubleUpDownCounterBuilderSdk.swift | 6 ++--- .../Stable/DoubleUpDownCounterSdk.swift | 6 ++--- .../Metrics/Stable/Instrument.swift | 4 +-- .../Metrics/Stable/InstrumentBuilder.swift | 15 +++++------ .../Stable/InstrumentSelectorBuilder.swift | 2 -- .../Stable/LongCounterMeterBuilderSdk.swift | 6 ++--- .../Metrics/Stable/LongGaugeBuilderSdk.swift | 7 +++-- .../Stable/LongHistogramMeterBuilderSdk.swift | 2 +- .../Stable/LongHistogramMeterSdk.swift | 6 ++--- .../Stable/LongUpDownCounterBuilderSdk.swift | 8 +++--- .../Metrics/Stable/LongUpDownCounterSdk.swift | 6 ++--- .../Metrics/StableMetrics/BuilderTests.swift | 26 +++++++++++++++++++ .../Metrics/StableMetrics/File.swift | 6 ----- 26 files changed, 80 insertions(+), 67 deletions(-) create mode 100644 Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift delete mode 100644 Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/File.swift diff --git a/Examples/Stable Metric Sample/main.swift b/Examples/Stable Metric Sample/main.swift index 3fe37229..27cc343b 100644 --- a/Examples/Stable Metric Sample/main.swift +++ b/Examples/Stable Metric Sample/main.swift @@ -69,7 +69,6 @@ basicConfiguration() // creating a new meter & instrument let meter = OpenTelemetry.instance.stableMeterProvider?.meterBuilder(name: "MyMeter").build() -var gaugeBuilder = meter!.gaugeBuilder(name: "Gauge") -var gauge = gaugeBuilder.buildWithCallback({ ObservableDoubleMeasurement in +var gaugeBuilder = meter!.gaugeBuilder(name: "Gauge").buildWithCallback({ ObservableDoubleMeasurement in ObservableDoubleMeasurement.record(value: 1.0, attributes: ["test": AttributeValue.bool(true)]) }) diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleCounterBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleCounterBuilder.swift index ea4d0800..407a537b 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleCounterBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleCounterBuilder.swift @@ -5,8 +5,8 @@ import Foundation -public protocol DoubleCounterBuilder { +public protocol DoubleCounterBuilder : AnyObject { func build() -> DoubleCounter - mutating func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableDoubleCounter + func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableDoubleCounter } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleGaugeBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleGaugeBuilder.swift index d9a16873..93377031 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleGaugeBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleGaugeBuilder.swift @@ -5,7 +5,7 @@ import Foundation -public protocol DoubleGaugeBuilder { +public protocol DoubleGaugeBuilder : AnyObject { func ofLongs() -> LongGaugeBuilder - mutating func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement)->Void) -> ObservableDoubleGauge + func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement)->Void) -> ObservableDoubleGauge } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleHistogramBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleHistogramBuilder.swift index 831ad391..05af4a3b 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleHistogramBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleHistogramBuilder.swift @@ -5,7 +5,7 @@ import Foundation -public protocol DoubleHistogramBuilder { +public protocol DoubleHistogramBuilder : AnyObject { func ofLongs() -> LongHistogramBuilder func build() -> DoubleHistogram diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleUpDownCounterBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleUpDownCounterBuilder.swift index 4bc4544d..731e72d8 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleUpDownCounterBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleUpDownCounterBuilder.swift @@ -5,9 +5,9 @@ import Foundation -public protocol DoubleUpDownCounterBuilder { +public protocol DoubleUpDownCounterBuilder : AnyObject { func build() -> DoubleUpDownCounter - mutating func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableDoubleUpDownCounter + func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableDoubleUpDownCounter } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/LongCounterBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/LongCounterBuilder.swift index 65323e3e..fb930b15 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/LongCounterBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/LongCounterBuilder.swift @@ -5,13 +5,13 @@ import Foundation -public protocol LongCounterBuilder { +public protocol LongCounterBuilder : AnyObject { func ofDoubles() -> DoubleCounterBuilder func build() -> LongCounter - mutating func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongCounter + func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongCounter } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/LongGaugeBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/LongGaugeBuilder.swift index 4b992f23..42bf644c 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/LongGaugeBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/LongGaugeBuilder.swift @@ -5,6 +5,6 @@ import Foundation -public protocol LongGaugeBuilder { - mutating func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongGauge +public protocol LongGaugeBuilder : AnyObject { + func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongGauge } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/LongHistogramBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/LongHistogramBuilder.swift index 129ffa15..5a47fd12 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/LongHistogramBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/LongHistogramBuilder.swift @@ -5,6 +5,6 @@ import Foundation -public protocol LongHistogramBuilder { +public protocol LongHistogramBuilder : AnyObject { func build() -> LongHistogram } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/LongUpDownCounterBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/LongUpDownCounterBuilder.swift index 92b4620d..cd874f8d 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/LongUpDownCounterBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/LongUpDownCounterBuilder.swift @@ -5,8 +5,8 @@ import Foundation -public protocol LongUpDownCounterBuilder { +public protocol LongUpDownCounterBuilder : AnyObject { func ofDoubles() -> DoubleUpDownCounterBuilder func build() -> LongUpDownCounter - mutating func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongUpDownCounter + func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongUpDownCounter } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleCounterMeterBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleCounterMeterBuilderSdk.swift index e3246d9c..bce029a0 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleCounterMeterBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleCounterMeterBuilderSdk.swift @@ -7,7 +7,8 @@ import Foundation import OpenTelemetryApi public class DoubleCounterMeterBuilderSdk : DoubleCounterBuilder, InstrumentBuilder { - var meterSharedState: StableMeterSharedState + + var meterSharedState: StableMeterSharedState var meterProviderSharedState: MeterProviderSharedState diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleGaugeBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleGaugeBuilderSdk.swift index b493d2a5..dcf9d690 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleGaugeBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleGaugeBuilderSdk.swift @@ -6,8 +6,7 @@ import Foundation import OpenTelemetryApi -public struct DoubleGaugeBuilderSdk : DoubleGaugeBuilder, InstrumentBuilder { - +public class DoubleGaugeBuilderSdk : DoubleGaugeBuilder, InstrumentBuilder { var meterProviderSharedState: MeterProviderSharedState @@ -34,7 +33,7 @@ public struct DoubleGaugeBuilderSdk : DoubleGaugeBuilder, InstrumentBuilder { swapBuilder(LongGaugeBuilderSdk.init) } - mutating public func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableDoubleMeasurement) -> Void) -> OpenTelemetryApi.ObservableDoubleGauge { + public func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableDoubleMeasurement) -> Void) -> OpenTelemetryApi.ObservableDoubleGauge { registerDoubleAsynchronousInstrument(type: type, updater: callback) } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift index 53ebc1c4..1f5aeba8 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift @@ -7,7 +7,7 @@ import Foundation import OpenTelemetryApi -public struct DoubleHistogramMeterBuilderSdk : DoubleHistogramBuilder, InstrumentBuilder { +public class DoubleHistogramMeterBuilderSdk : DoubleHistogramBuilder, InstrumentBuilder { var meterProviderSharedState: MeterProviderSharedState var meterSharedState: StableMeterSharedState diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterSdk.swift index ef1cbbe9..ee5433cd 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterSdk.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -public struct DoubleHistogramMeterSdk : DoubleHistogram, Instrument { +public class DoubleHistogramMeterSdk : DoubleHistogram, Instrument { public var instrumentDescriptor: InstrumentDescriptor public var storage : WritableMetricStorage @@ -15,11 +15,11 @@ public struct DoubleHistogramMeterSdk : DoubleHistogram, Instrument { self.storage = storage } - public mutating func record(value: Double) { + public func record(value: Double) { record(value: value, attributes: [String:AttributeValue]()) } - public mutating func record(value: Double, attributes: [String : OpenTelemetryApi.AttributeValue]) { + public func record(value: Double, attributes: [String : OpenTelemetryApi.AttributeValue]) { } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterBuilderSdk.swift index 00260c01..6c697da8 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterBuilderSdk.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -struct DoubleUpDownCounterBuilderSdk : DoubleUpDownCounterBuilder, InstrumentBuilder { +public class DoubleUpDownCounterBuilderSdk : DoubleUpDownCounterBuilder, InstrumentBuilder { var meterSharedState: StableMeterSharedState var meterProviderSharedState: MeterProviderSharedState @@ -29,11 +29,11 @@ struct DoubleUpDownCounterBuilderSdk : DoubleUpDownCounterBuilder, InstrumentBui self.instrumentName = name } - func build() -> OpenTelemetryApi.DoubleUpDownCounter { + public func build() -> OpenTelemetryApi.DoubleUpDownCounter { buildSynchronousInstrument(DoubleUpDownCounterSdk.init) } - mutating func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableDoubleMeasurement) -> Void) -> OpenTelemetryApi.ObservableDoubleUpDownCounter { + public func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableDoubleMeasurement) -> Void) -> OpenTelemetryApi.ObservableDoubleUpDownCounter { registerDoubleAsynchronousInstrument(type: type, updater: callback) } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterSdk.swift index 2e8d0c41..8c6bb44a 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterSdk.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -public struct DoubleUpDownCounterSdk : DoubleUpDownCounter, Instrument { +public class DoubleUpDownCounterSdk : DoubleUpDownCounter, Instrument { public private(set) var instrumentDescriptor: InstrumentDescriptor var storage : WritableMetricStorage @@ -15,12 +15,12 @@ public struct DoubleUpDownCounterSdk : DoubleUpDownCounter, Instrument { self.storage = storage } - mutating public func add(value: Double) { + public func add(value: Double) { add(value: value, attributes: [String:AttributeValue]()) } - mutating public func add(value: Double, attributes: [String : OpenTelemetryApi.AttributeValue]) { + public func add(value: Double, attributes: [String : OpenTelemetryApi.AttributeValue]) { storage.recordDouble(value: value, attributes: attributes) } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/Instrument.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/Instrument.swift index 3d2d4c4a..8eefa944 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/Instrument.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/Instrument.swift @@ -7,11 +7,9 @@ import Foundation public protocol Instrument : Equatable { - var instrumentDescriptor : InstrumentDescriptor { get } - + var instrumentDescriptor : InstrumentDescriptor { get } } - extension Instrument { public static func == (lhs: Self, rhs: Self) -> Bool { return lhs.instrumentDescriptor == rhs.instrumentDescriptor diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift index 3987caff..2b82d13c 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift @@ -6,8 +6,7 @@ import Foundation import OpenTelemetryApi - -protocol InstrumentBuilder { +protocol InstrumentBuilder : AnyObject { var meterProviderSharedState : MeterProviderSharedState { get } var meterSharedState : StableMeterSharedState { get set } var type : InstrumentType { get } @@ -17,13 +16,13 @@ protocol InstrumentBuilder { var instrumentName : String { get } } extension InstrumentBuilder { - mutating func setUnit(_ units: String) -> Self { + public func setUnit(_ units: String) -> Self { // todo : validate unit self.unit = unit return self } - mutating func setDescription(_ description: String) -> Self { + public func setDescription(_ description: String) -> Self { self.description = description return self } @@ -34,14 +33,14 @@ extension InstrumentBuilder { // todo : Is it necessary to use inout for writableMetricStorage? - func buildSynchronousInstrument(_ instrumentFactory: (InstrumentDescriptor, inout WritableMetricStorage) -> T) -> T { + public func buildSynchronousInstrument(_ instrumentFactory: (InstrumentDescriptor, inout WritableMetricStorage) -> T) -> T { let descriptor = InstrumentDescriptor(name: instrumentName, description: description, unit: unit, type: type, valueType: valueType) var storage = meterSharedState.registerSynchronousMetricStorage(instrument: descriptor, meterProviderSharedState: meterProviderSharedState) return instrumentFactory(descriptor,&storage) } - func registerDoubleAsynchronousInstrument(type : InstrumentType, updater: @escaping (ObservableDoubleMeasurement)-> Void) -> ObservableInstrumentSdk { + public func registerDoubleAsynchronousInstrument(type : InstrumentType, updater: @escaping (ObservableDoubleMeasurement)-> Void) -> ObservableInstrumentSdk { let sdkObservableMeasurement = buildObservableMeasurement(type: type) let callbackRegistration = CallbackRegistration.init(observableMeasurements: [sdkObservableMeasurement]) { updater(sdkObservableMeasurement) @@ -50,7 +49,7 @@ extension InstrumentBuilder { return ObservableInstrumentSdk(meterSharedState: meterSharedState, callbackRegistration: callbackRegistration) } - func registerLongAsynchronousInstrument(type: InstrumentType, updater: @escaping (ObservableLongMeasurement)->Void ) -> ObservableInstrumentSdk { + public func registerLongAsynchronousInstrument(type: InstrumentType, updater: @escaping (ObservableLongMeasurement)->Void ) -> ObservableInstrumentSdk { let sdkObservableMeasurement = buildObservableMeasurement(type: type) let callbackRegistration = CallbackRegistration(observableMeasurements: [sdkObservableMeasurement], callback: { updater(sdkObservableMeasurement) @@ -59,7 +58,7 @@ extension InstrumentBuilder { return ObservableInstrumentSdk(meterSharedState: meterSharedState, callbackRegistration: callbackRegistration) } - func buildObservableMeasurement(type: InstrumentType) -> StableObservableMeasurementSdk { + public func buildObservableMeasurement(type: InstrumentType) -> StableObservableMeasurementSdk { let descriptor = InstrumentDescriptor(name: instrumentName, description: description, unit: unit, type: type, valueType: valueType) return meterSharedState.registerObservableMeasurement(instrumentDescriptor: descriptor) } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentSelectorBuilder.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentSelectorBuilder.swift index c9673bd5..3b249b38 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentSelectorBuilder.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentSelectorBuilder.swift @@ -5,8 +5,6 @@ import Foundation - - public class InstrumentSelectorBuilder { var instrumentType : InstrumentType? var instrumentName : String = "*" diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterMeterBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterMeterBuilderSdk.swift index 4c750760..558a18f4 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterMeterBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterMeterBuilderSdk.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -public struct LongCounterMeterBuilderSdk : LongCounterBuilder, InstrumentBuilder { +public class LongCounterMeterBuilderSdk : LongCounterBuilder, InstrumentBuilder { var meterProviderSharedState: MeterProviderSharedState @@ -22,7 +22,7 @@ public struct LongCounterMeterBuilderSdk : LongCounterBuilder, InstrumentBuilder var instrumentName: String - init(meterProviderSharedState: inout MeterProviderSharedState, meterSharedState: inout StableMeterSharedState, name: String) { + internal init(meterProviderSharedState: inout MeterProviderSharedState, meterSharedState: inout StableMeterSharedState, name: String) { self.meterProviderSharedState = meterProviderSharedState self.meterSharedState = meterSharedState self.instrumentName = name @@ -39,7 +39,7 @@ public struct LongCounterMeterBuilderSdk : LongCounterBuilder, InstrumentBuilder return buildSynchronousInstrument(LongCounterSdk.init) } - public mutating func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableLongMeasurement) -> Void) -> OpenTelemetryApi.ObservableLongCounter { + public func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableLongMeasurement) -> Void) -> OpenTelemetryApi.ObservableLongCounter { registerLongAsynchronousInstrument(type: type, updater: callback) } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongGaugeBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongGaugeBuilderSdk.swift index fae1326a..fa9c0e96 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongGaugeBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongGaugeBuilderSdk.swift @@ -5,8 +5,7 @@ import Foundation import OpenTelemetryApi -struct LongGaugeBuilderSdk : LongGaugeBuilder, InstrumentBuilder { - +public class LongGaugeBuilderSdk : LongGaugeBuilder, InstrumentBuilder { var meterProviderSharedState: MeterProviderSharedState @@ -23,7 +22,7 @@ struct LongGaugeBuilderSdk : LongGaugeBuilder, InstrumentBuilder { var instrumentName: String - init(meterProviderSharedState: MeterProviderSharedState, meterSharedState : StableMeterSharedState, name: String, description: String, unit: String) { + internal init(meterProviderSharedState: MeterProviderSharedState, meterSharedState : StableMeterSharedState, name: String, description: String, unit: String) { instrumentName = name self.unit = unit self.description = description @@ -31,7 +30,7 @@ struct LongGaugeBuilderSdk : LongGaugeBuilder, InstrumentBuilder { self.meterProviderSharedState = meterProviderSharedState } - mutating public func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableLongMeasurement) -> Void) -> OpenTelemetryApi.ObservableLongGauge { + public func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableLongMeasurement) -> Void) -> OpenTelemetryApi.ObservableLongGauge { registerLongAsynchronousInstrument(type: type, updater: callback) } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterBuilderSdk.swift index 99295628..6a55fd73 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterBuilderSdk.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -public struct LongHistogramMeterBuilderSdk : LongHistogramBuilder, InstrumentBuilder { +public class LongHistogramMeterBuilderSdk : LongHistogramBuilder, InstrumentBuilder { var meterProviderSharedState: MeterProviderSharedState diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterSdk.swift index 8908fabb..0482191d 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterSdk.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -public struct LongHistogramMeterSdk : LongHistogram, Instrument { +public class LongHistogramMeterSdk : LongHistogram, Instrument { public var instrumentDescriptor: InstrumentDescriptor private var storage : WritableMetricStorage @@ -16,11 +16,11 @@ public struct LongHistogramMeterSdk : LongHistogram, Instrument { self.instrumentDescriptor = descriptor } - public mutating func record(value: Int) { + public func record(value: Int) { record(value: value, attributes: [String:AttributeValue]()) } - public mutating func record(value: Int, attributes: [String : OpenTelemetryApi.AttributeValue]) { + public func record(value: Int, attributes: [String : OpenTelemetryApi.AttributeValue]) { if value < 0 { // todo : log error return diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterBuilderSdk.swift index e941db54..dcd51e71 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterBuilderSdk.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -struct LongUpDownCounterBuilderSdk : LongUpDownCounterBuilder, InstrumentBuilder { +public class LongUpDownCounterBuilderSdk : LongUpDownCounterBuilder, InstrumentBuilder { var instrumentName: String @@ -28,15 +28,15 @@ struct LongUpDownCounterBuilderSdk : LongUpDownCounterBuilder, InstrumentBuilder self.instrumentName = name } - func ofDoubles() -> OpenTelemetryApi.DoubleUpDownCounterBuilder { + public func ofDoubles() -> OpenTelemetryApi.DoubleUpDownCounterBuilder { swapBuilder(DoubleUpDownCounterBuilderSdk.init) } - func build() -> OpenTelemetryApi.LongUpDownCounter { + public func build() -> OpenTelemetryApi.LongUpDownCounter { buildSynchronousInstrument(LongUpDownCounterSdk.init) } - mutating func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableLongMeasurement) -> Void) -> OpenTelemetryApi.ObservableLongUpDownCounter { + public func buildWithCallback(_ callback: @escaping (OpenTelemetryApi.ObservableLongMeasurement) -> Void) -> OpenTelemetryApi.ObservableLongUpDownCounter { registerLongAsynchronousInstrument(type: type, updater: callback) } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift index 922d7947..b6bef8bf 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -public struct LongUpDownCounterSdk : LongUpDownCounter, Instrument { +public class LongUpDownCounterSdk : LongUpDownCounter, Instrument { public private(set) var instrumentDescriptor: InstrumentDescriptor var storage : WritableMetricStorage @@ -16,11 +16,11 @@ public struct LongUpDownCounterSdk : LongUpDownCounter, Instrument { } - mutating public func add(value: Int) { + public func add(value: Int) { add(value: value, attributes: [String: AttributeValue]()) } - mutating public func add(value: Int, attributes: [String : OpenTelemetryApi.AttributeValue]) { + public func add(value: Int, attributes: [String : OpenTelemetryApi.AttributeValue]) { storage.recordLong(value: value, attributes: attributes) } diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift new file mode 100644 index 00000000..ec885c77 --- /dev/null +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift @@ -0,0 +1,26 @@ +// +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// + +@testable import OpenTelemetrySdk +import XCTest + +class BuilderTests : XCTestCase { + func testBuilders() { + let meterProvider = StableMeterProviderBuilder().build() + let meter = meterProvider.meterBuilder(name: "meter").build() + let counter = meter.counterBuilder(name: "counter").ofDoubles().build() + XCTAssertTrue(type(of: counter) == DoubleCounterSdk.self) + + XCTAssertTrue(type(of: meter.counterBuilder(name: "counter").build()) == LongCounterSdk.self) + + XCTAssertTrue(type(of:meter.gaugeBuilder(name: "gauge").buildWithCallback({ _ in })) == ObservableInstrumentSdk.self) + XCTAssertTrue(type(of:meter.gaugeBuilder(name: "gauge").ofLongs().buildWithCallback({ _ in })) == ObservableInstrumentSdk.self) + XCTAssertTrue(type(of: meter.histogramBuilder(name: "histogram").build()) == DoubleHistogramMeterSdk.self) + XCTAssertTrue(type(of: meter.histogramBuilder(name: "histogram").ofLongs().build()) == LongHistogramMeterSdk.self) + XCTAssertTrue(type(of:meter.upDownCounterBuilder(name: "updown").build()) == LongUpDownCounterSdk.self) + XCTAssertTrue(type(of:meter.upDownCounterBuilder(name: "updown").ofDoubles().build()) == DoubleUpDownCounterSdk.self) + XCTAssertTrue(type(of:meter.upDownCounterBuilder(name: "updown").buildWithCallback({ _ in })) == ObservableInstrumentSdk.self) + } +} diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/File.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/File.swift deleted file mode 100644 index 4bbe040f..00000000 --- a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/File.swift +++ /dev/null @@ -1,6 +0,0 @@ -// -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 -// - -import Foundation From 6ca948c3122939af0a8773080ab01ea50eae8044 Mon Sep 17 00:00:00 2001 From: Bryce Buchanan Date: Mon, 26 Jun 2023 14:12:30 -0700 Subject: [PATCH 2/3] refactored stable metrics - changed builder structs to classes - removed unused classes - filled out noops - tests --- .../Metrics/Stable/DefaultStableMeter.swift | 165 ++++++++++++++++++ .../Stable/DefaultStableMeterProvider.swift | 99 +++++------ .../Metrics/Stable/DoubleCounter.swift | 1 - .../Instruments/Gauge/ObservableGauge.swift | 16 -- .../Instruments/Histogram/Histogram.swift | 22 --- .../Stable/Instruments/ObservableMeter.swift | 12 -- .../Stable/Instruments/ObservableResult.swift | 18 -- .../Sum/ObservableCounterMeter.swift | 20 --- .../Sum/ObservableUpDownCounter.swift | 18 -- .../Sum/StableCounterMeasurement.swift | 11 -- .../Instruments/Sum/StableCounterMeter.swift | 26 --- .../Instruments/Sum/UpDownCounter.swift | 25 --- .../Metrics/Stable/LongCounter.swift | 1 - .../Metrics/Stable/LongCounterBuilder.swift | 3 - .../Metrics/Stable/MeterBuilder.swift | 2 +- .../Stable/ObservableDoubleMeasurement.swift | 3 +- .../Stable/ObservableLongMeasurement.swift | 1 - .../Metrics/Stable/StableMeter.swift | 5 - .../Metrics/Stable/StableMeterProvider.swift | 1 + .../Logs/LogRecordBuilderSdk.swift | 1 - .../DoubleHistogramMeterBuilderSdk.swift | 5 - .../Metrics/Stable/LongUpDownCounterSdk.swift | 1 - .../Metrics/Stable/MetricDescriptor.swift | 1 + .../Stable/NoopAttributesProcessor.swift | 17 +- .../Metrics/Stable/ObservableCounterSdk.swift | 19 -- .../Metrics/Stable/ObservableResultSdk.swift | 22 --- .../Stable/StableCounterMeasurementSdk.swift | 23 --- .../Stable/StableMeterProviderSdk.swift | 2 +- .../Metrics/StableMetrics/BuilderTests.swift | 20 +-- .../InstrumentSelectorTests.swift | 43 +++++ .../StableMetrics/MetricDescriptorTests.swift | 31 ++++ .../NoopAttributesProcessorTests.swift | 17 ++ .../StableMeterProviderSdkTests.swift | 4 +- 33 files changed, 320 insertions(+), 335 deletions(-) create mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/DefaultStableMeter.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Gauge/ObservableGauge.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Histogram/Histogram.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/ObservableMeter.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/ObservableResult.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/ObservableCounterMeter.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/ObservableUpDownCounter.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/StableCounterMeasurement.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/StableCounterMeter.swift delete mode 100644 Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/UpDownCounter.swift delete mode 100644 Sources/OpenTelemetrySdk/Metrics/Stable/ObservableCounterSdk.swift delete mode 100644 Sources/OpenTelemetrySdk/Metrics/Stable/ObservableResultSdk.swift delete mode 100644 Sources/OpenTelemetrySdk/Metrics/Stable/StableCounterMeasurementSdk.swift create mode 100644 Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/InstrumentSelectorTests.swift create mode 100644 Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/MetricDescriptorTests.swift create mode 100644 Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/NoopAttributesProcessorTests.swift diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/DefaultStableMeter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/DefaultStableMeter.swift new file mode 100644 index 00000000..50300ed1 --- /dev/null +++ b/Sources/OpenTelemetryApi/Metrics/Stable/DefaultStableMeter.swift @@ -0,0 +1,165 @@ +// +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// + +import Foundation + + +public class DefaultStableMeter : StableMeter { + + internal init() {} + + public func counterBuilder(name: String) -> LongCounterBuilder { + NoopLongCounterBuilder() + } + + public func upDownCounterBuilder(name: String) -> LongUpDownCounterBuilder { + NoopLongUpDownCounterBuilder() + } + + public func histogramBuilder(name: String) -> DoubleHistogramBuilder { + NoopDoubleHistogramBuilder() + } + + public func gaugeBuilder(name: String) -> DoubleGaugeBuilder { + NoopDoubleGaugeBuilder() + } + + private class NoopLongUpDownCounterBuilder : LongUpDownCounterBuilder { + func ofDoubles() -> DoubleUpDownCounterBuilder { + NoopDoubleUpDownCounterBuilder() + } + + func build() -> LongUpDownCounter { + NoopLongUpDownCounter() + } + + func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongUpDownCounter { + NoopObservableLongUpDownCounter() + } + } + + private class NoopDoubleHistogramBuilder : DoubleHistogramBuilder { + func ofLongs() -> LongHistogramBuilder { + NoopLongHistogramBuilder() + } + + func build() -> DoubleHistogram { + NoopDoubleHistogram() + } + } + + private class NoopDoubleGaugeBuilder : DoubleGaugeBuilder { + func ofLongs() -> LongGaugeBuilder { + NoopLongGaugeBuilder() + } + + func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableDoubleGauge { + NoopObservableDoubleGauge() + } + } + + private class NoopLongGaugeBuilder : LongGaugeBuilder { + func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongGauge { + NoopObservableLongGauge() + } + } + + private struct NoopObservableLongGauge : ObservableLongGauge {} + + private struct NoopObservableDoubleGauge : ObservableDoubleGauge {} + + private class NoopDoubleUpDownCounterBuilder : DoubleUpDownCounterBuilder { + func build() -> DoubleUpDownCounter { + NoopDoubleUpDownCounter() + } + + func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableDoubleUpDownCounter { + NoopObservableDoubleUpDownCounter() + } + } + + private struct NoopObservableDoubleUpDownCounter : ObservableDoubleUpDownCounter {} + + private struct NoopDoubleUpDownCounter : DoubleUpDownCounter { + mutating func add(value: Double) {} + mutating func add(value: Double, attributes: [String : AttributeValue]) {} + } + + private class NoopLongUpDownCounter : LongUpDownCounter { + func add(value: Int) {} + func add(value: Int, attributes: [String : AttributeValue]) {} + } + + private class NoopLongHistogramBuilder : LongHistogramBuilder { + func build() -> LongHistogram { + NoopLongHistogram() + } + } + + private struct NoopLongHistogram : LongHistogram { + mutating func record(value: Int) {} + mutating func record(value: Int, attributes: [String : AttributeValue]) {} + } + + private class NoopObservableLongUpDownCounter : ObservableLongUpDownCounter {} + + private class NoopDoubleHistogram : DoubleHistogram { + func record(value: Double) {} + func record(value: Double, attributes: [String : AttributeValue]) {} + } + + private class NoopLongCounter : LongCounter { + func add(value: Int) {} + func add(value: Int, attribute: [String : AttributeValue]) {} + } + + private class NoopLongCounterBuilder : LongCounterBuilder { + func ofDoubles() -> DoubleCounterBuilder { + NoopDoubleCounterBuilder() + } + + func build() -> LongCounter { + NoopLongCounter() + } + + func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongCounter { + NoopObservableLongCounter() + } + } + + private class NoopDoubleCounterBuilder : DoubleCounterBuilder { + func build() -> DoubleCounter { + StableNoopDoubleCounter() + } + + func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableDoubleCounter { + NoopObservableDoubleCounter() + } + } + + private class NoopObservableLongCounter : ObservableLongCounter {} + private class NoopObservableDoubleCounter: ObservableDoubleCounter {} + + private class StableNoopDoubleCounterBuilder : DoubleCounterBuilder { + func build() -> DoubleCounter { + StableNoopDoubleCounter() + } + + func buildWithCallback(_ callback: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableDoubleCounter { + NoopObservableDoubleCounter() + } + } + + private class StableNoopDoubleCounter : DoubleCounter { + func add(value: Double) {} + func add(value: Double, attributes: [String : AttributeValue]) {} + } +} + + + + + + diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/DefaultStableMeterProvider.swift b/Sources/OpenTelemetryApi/Metrics/Stable/DefaultStableMeterProvider.swift index 9f81f775..9cca201f 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/DefaultStableMeterProvider.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/DefaultStableMeterProvider.swift @@ -1,62 +1,41 @@ -//// -//// Copyright The OpenTelemetry Authors -//// SPDX-License-Identifier: Apache-2.0 -//// // -//import Foundation +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 // -//public class DefaultStableMeterProvider: StableMeterProvider { -// static var proxyMeter = StableProxyMeter() -// static var proxyMeterBuilder = ProxyMeterBuilder() -// static var initialized = false -// -// class StableProxyMeter : StableMeter { -// func counterBuilder(name: String) -> LongCounterBuilder { -// } -// -// func upDownCounterBuilder(name: String) -> LongUpDownCounterBuilder { -// } -// -// func histogramBuilder(name: String) -> DoubleHistogramBuilder { -// } -// -// func gaugeBuilder(name: String) -> DoubleGaugeBuilder { -// } -// } -// -// class ProxyMeterBuilder : MeterBuilder { -// func setSchemaUrl(schemaUrl: String) -> Self { -// return self -// } -// -// func setInstrumentationVersion(instrumentationVersion: String) -> Self { -// return self -// } -// -// func build() -> StableMeter { -// return DefaultStableMeterProvider.proxyMeter -// } -// -// -// init() {} -// -// public static func setDefault(meterFactory: StableMeterProvider) { -// guard !initialized else { -// return -// } -// instance = meterFactory -// proxyMeter.updateMeter(realMeter: meterFactory.get(name: "")) -// initialized = true -// } -// -// public func get(name: String) -> StableMeter { -// return Self.initialized ? Self.instance.get(name: name) : Self.proxyMeter -// } -// -// public func meterBuilder(name: String) -> MeterBuilder { -// return Self.initialized ? self.instance.meterBuilder(name: name) : return Self.proxyMeterBuilder -// -// } -// -// public static var instance : StableMeterProvider = DefaultStableMeterProvider() -//} + +import Foundation + +public class DefaultStableMeterProvider: StableMeterProvider { + static let noopMeterBuilder = NoopMeterBuilder() + + public static func noop() -> MeterBuilder { + noopMeterBuilder + } + + public func get(name: String) -> StableMeter { + DefaultStableMeter() + } + + public func meterBuilder(name: String) -> MeterBuilder { + Self.noop() + } + + class NoopMeterBuilder : MeterBuilder { + static let noopMeter = DefaultStableMeter() + + func setSchemaUrl(schemaUrl: String) -> Self { + self + } + + func setInstrumentationVersion(instrumentationVersion: String) -> Self { + self + } + + func build() -> StableMeter { + Self.noopMeter + } + + } + + public static var instance : StableMeterProvider = DefaultStableMeterProvider() +} diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleCounter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleCounter.swift index fbb02774..01b49277 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/DoubleCounter.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/DoubleCounter.swift @@ -7,6 +7,5 @@ import Foundation public protocol DoubleCounter { mutating func add(value: Double) - mutating func add(value: Double, attributes: [String: AttributeValue]) } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Gauge/ObservableGauge.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Gauge/ObservableGauge.swift deleted file mode 100644 index 067a7476..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Gauge/ObservableGauge.swift +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - -public protocol ObservableGauge : ObservableMeter { - associatedtype T -} - -public struct NoopObservableGauge : ObservableGauge { - public typealias U = NoopObservableResult - public private(set) var callback: (U) -> () -} - diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Histogram/Histogram.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Histogram/Histogram.swift deleted file mode 100644 index b877f641..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Histogram/Histogram.swift +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - -public protocol Histogram { - associatedtype T -/// - Parameters: -/// - value: value that should be recorded (positive values) -/// - attributes: array of key-value pair - func record(_ value: T, attributes: [String: AttributeValue]?) -} - -public struct NoopHistogram : Histogram { - init() {} - public func record(_ value: T, attributes: [String: AttributeValue]?) {} -} - -typealias NoopIntHistogram = NoopHistogram -typealias NoopDoubleHistogram = NoopHistogram \ No newline at end of file diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/ObservableMeter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/ObservableMeter.swift deleted file mode 100644 index 9625e190..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/ObservableMeter.swift +++ /dev/null @@ -1,12 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - -public protocol ObservableMeter { - associatedtype T - associatedtype U : ObservableResult where U.T == T - var callback : (U) -> () {get} -} diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/ObservableResult.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/ObservableResult.swift deleted file mode 100644 index b3071718..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/ObservableResult.swift +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - -public protocol ObservableResult { - associatedtype T - func observe(_ value: T, attributes: [String: AttributeValue]?) -} - -public struct NoopObservableResult : ObservableResult { - init() {} - public func observe(_ value: T, attributes: [String: AttributeValue]?) { - - } -} diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/ObservableCounterMeter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/ObservableCounterMeter.swift deleted file mode 100644 index 29e076ed..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/ObservableCounterMeter.swift +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - - -public protocol ObservableCounterMeter: ObservableMeter { - associatedtype T -} - - -public struct NoopObservableCounterMeter : ObservableCounterMeter { - public typealias T = T - public typealias U = NoopObservableResult - public private(set) var callback: (U) -> () -} -public typealias NoopObservableIntCounter = NoopObservableCounterMeter -public typealias NoopObservableDoubleCounter = NoopObservableCounterMeter \ No newline at end of file diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/ObservableUpDownCounter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/ObservableUpDownCounter.swift deleted file mode 100644 index 3514b889..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/ObservableUpDownCounter.swift +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - -protocol ObservableUpDownCounter : ObservableMeter { - associatedtype T -} - -public struct NoopObservableUpDownCounter : ObservableUpDownCounter { - public typealias T = T - public typealias U = NoopObservableResult - public private(set) var callback: (U) -> () -} -public typealias NoopObservableIntUpDownCounter = NoopObservableUpDownCounter -public typealias NoopObservableDoubleUpDownCounter = NoopObservableUpDownCounter \ No newline at end of file diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/StableCounterMeasurement.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/StableCounterMeasurement.swift deleted file mode 100644 index 49a5b09e..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/StableCounterMeasurement.swift +++ /dev/null @@ -1,11 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - -public protocol StableCounterMeasurement { - associatedtype T : Numeric - func add (value:T) -} diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/StableCounterMeter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/StableCounterMeter.swift deleted file mode 100644 index 916b32be..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/StableCounterMeter.swift +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - -/// Measure instrument. -public protocol StableCounterMeter { - associatedtype T : Numeric - /// - /// - Parameters: - /// - value: value by which the counter should be incremented (monotonic) - /// - attributes: array of key-value pair (optional) - func add(_ value: T, attributes: [String: AttributeValue]?) -} - - - -public struct NoopCounterMeter : StableCounterMeter { - init() {} - public func add(_ value: T, attributes: [String: AttributeValue]?) {} -} - -typealias NoopIntCounter = NoopCounterMeter -typealias NoopDoubleCounter = NoopCounterMeter \ No newline at end of file diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/UpDownCounter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/UpDownCounter.swift deleted file mode 100644 index d9ed07f9..00000000 --- a/Sources/OpenTelemetryApi/Metrics/Stable/Instruments/Sum/UpDownCounter.swift +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation - -protocol UpDownCounter { - associatedtype T - /// - /// - Parameters: - /// - value: the value by which the counter should be incremented (non-monotonic) - /// - attributes:array of key-value pairs (optional) - func add(_ value: T, attributes: [String: AttributeValue]?) -} - -public struct NoopUpDownCounter : UpDownCounter { - init() {} - - func add(_ value: T, attributes: [String: AttributeValue]?) { - - } -} -typealias NoopIntUpDownCounter = NoopUpDownCounter -typealias NoopDoubleUpDownCounter = NoopUpDownCounter \ No newline at end of file diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/LongCounter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/LongCounter.swift index e53c05cd..87697e97 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/LongCounter.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/LongCounter.swift @@ -7,6 +7,5 @@ import Foundation public protocol LongCounter { mutating func add(value: Int) - mutating func add(value: Int, attribute: [String: AttributeValue]) } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/LongCounterBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/LongCounterBuilder.swift index fb930b15..f6181dd1 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/LongCounterBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/LongCounterBuilder.swift @@ -6,11 +6,8 @@ import Foundation public protocol LongCounterBuilder : AnyObject { - func ofDoubles() -> DoubleCounterBuilder - func build() -> LongCounter - func buildWithCallback(_ callback: @escaping (ObservableLongMeasurement) -> Void) -> ObservableLongCounter } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/MeterBuilder.swift b/Sources/OpenTelemetryApi/Metrics/Stable/MeterBuilder.swift index 97a0307a..70f52966 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/MeterBuilder.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/MeterBuilder.swift @@ -5,7 +5,7 @@ import Foundation -public protocol MeterBuilder { +public protocol MeterBuilder : AnyObject { /// Assign an OpenTelemetry schema URL to the resulting Meter /// diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/ObservableDoubleMeasurement.swift b/Sources/OpenTelemetryApi/Metrics/Stable/ObservableDoubleMeasurement.swift index 54796c5f..5082bf11 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/ObservableDoubleMeasurement.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/ObservableDoubleMeasurement.swift @@ -5,8 +5,7 @@ import Foundation -public protocol ObservableDoubleMeasurement { - +public protocol ObservableDoubleMeasurement { func record(value: Double) func record(value : Double, attributes: [String: AttributeValue]) } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/ObservableLongMeasurement.swift b/Sources/OpenTelemetryApi/Metrics/Stable/ObservableLongMeasurement.swift index 806c2899..bbf4538f 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/ObservableLongMeasurement.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/ObservableLongMeasurement.swift @@ -7,6 +7,5 @@ import Foundation public protocol ObservableLongMeasurement { func record(value: Int) - func record(value: Int, attributes: [String: AttributeValue]) } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/StableMeter.swift b/Sources/OpenTelemetryApi/Metrics/Stable/StableMeter.swift index af509461..978da5bd 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/StableMeter.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/StableMeter.swift @@ -9,15 +9,10 @@ import Foundation /// Replaces Meter class. After a deprecation period StableMeter will be renamed to Meter /// public protocol StableMeter { - func counterBuilder(name : String) -> LongCounterBuilder - func upDownCounterBuilder(name: String) -> LongUpDownCounterBuilder - func histogramBuilder(name: String) -> DoubleHistogramBuilder - func gaugeBuilder(name: String) -> DoubleGaugeBuilder - } diff --git a/Sources/OpenTelemetryApi/Metrics/Stable/StableMeterProvider.swift b/Sources/OpenTelemetryApi/Metrics/Stable/StableMeterProvider.swift index a0217e32..a8289d96 100644 --- a/Sources/OpenTelemetryApi/Metrics/Stable/StableMeterProvider.swift +++ b/Sources/OpenTelemetryApi/Metrics/Stable/StableMeterProvider.swift @@ -17,3 +17,4 @@ public protocol StableMeterProvider: AnyObject { func meterBuilder(name: String) -> MeterBuilder } + diff --git a/Sources/OpenTelemetrySdk/Logs/LogRecordBuilderSdk.swift b/Sources/OpenTelemetrySdk/Logs/LogRecordBuilderSdk.swift index df039ea1..7a52e834 100644 --- a/Sources/OpenTelemetrySdk/Logs/LogRecordBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Logs/LogRecordBuilderSdk.swift @@ -85,5 +85,4 @@ public class LogRecordBuilderSdk: EventBuilder { body: body, attributes: attributes.attributes)) } - } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift index 1f5aeba8..b1de3f41 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift @@ -6,7 +6,6 @@ import Foundation import OpenTelemetryApi - public class DoubleHistogramMeterBuilderSdk : DoubleHistogramBuilder, InstrumentBuilder { var meterProviderSharedState: MeterProviderSharedState @@ -31,10 +30,6 @@ public class DoubleHistogramMeterBuilderSdk : DoubleHistogramBuilder, Instrument self.unit = "" self.instrumentName = name } - - - - public func ofLongs() -> OpenTelemetryApi.LongHistogramBuilder { swapBuilder(LongHistogramMeterBuilderSdk.init) diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift index b6bef8bf..d4b7d1f2 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift @@ -15,7 +15,6 @@ public class LongUpDownCounterSdk : LongUpDownCounter, Instrument { self.storage = storage } - public func add(value: Int) { add(value: value, attributes: [String: AttributeValue]()) } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/MetricDescriptor.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/MetricDescriptor.swift index 1c630cae..8be49e1f 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/MetricDescriptor.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/MetricDescriptor.swift @@ -5,6 +5,7 @@ import Foundation + public struct MetricDescriptor: Hashable { public private(set) var name: String public private(set) var description: String diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/NoopAttributesProcessor.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/NoopAttributesProcessor.swift index ad6dd914..ba4f688f 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/NoopAttributesProcessor.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/NoopAttributesProcessor.swift @@ -7,12 +7,11 @@ import Foundation import OpenTelemetryApi -//class NoopAttributesProccessor : AnyAttributesProcessor { -// func process(attributes: [String : OpenTelemetryApi.AttributeValue]) -> { -// return attributes -// } -// -// -// public static let noop = NoopAttributesProccessor() -// -//} +class NoopAttributesProccessor : AttributeProcessorProtocol { + + func process(incoming attributes: [String : OpenTelemetryApi.AttributeValue]) -> [String: OpenTelemetryApi.AttributeValue] { + return attributes + } + + public static let noop = NoopAttributesProccessor() +} diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/ObservableCounterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/ObservableCounterSdk.swift deleted file mode 100644 index f51da8fe..00000000 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/ObservableCounterSdk.swift +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation -import OpenTelemetryApi -public class ObservableCounterSdk : ObservableCounterMeter { - public typealias U = ObservableResultSdk - public private(set) var callback: (ObservableResultSdk) -> () = { _ in - } - - init(_ callback: @escaping (ObservableResultSdk) -> ()) { - self.callback = callback - } -} - -public typealias DoubleObservableCounterSdk = ObservableResultSdk -public typealias IntObservableCounterSdk = ObservableResultSdk diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/ObservableResultSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/ObservableResultSdk.swift deleted file mode 100644 index 12907cec..00000000 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/ObservableResultSdk.swift +++ /dev/null @@ -1,22 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation -import OpenTelemetryApi - -public class ObservableResultSdk : ObservableResult { - var value : T? - var attributes = [String: AttributeValue]() - - init() {} - - public func observe(_ value: T, attributes: [String: AttributeValue]?) { - self.value = value - if let a = attributes { - self.attributes = a - } - - } -} diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/StableCounterMeasurementSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/StableCounterMeasurementSdk.swift deleted file mode 100644 index eb41c89f..00000000 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/StableCounterMeasurementSdk.swift +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright The OpenTelemetry Authors - * SPDX-License-Identifier: Apache-2.0 - */ - -import Foundation -import OpenTelemetryApi - -public class StableCounterMeasurementSdk : StableCounterMeasurement { - var value : T = 0 - var count : UInt = 0 - - init () {} - - init(value: T) { - self.value = value - count += 1 - } - public func add(value: T) { - self.value += value - count += 1 - } -} diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/StableMeterProviderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/StableMeterProviderSdk.swift index f1f11399..6397ee7e 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/StableMeterProviderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/StableMeterProviderSdk.swift @@ -24,7 +24,7 @@ public class StableMeterProviderSdk: StableMeterProvider { public func meterBuilder(name: String) -> MeterBuilder { if registeredReaders.isEmpty { - // TODO: noop meter provider builder + return DefaultStableMeterProvider.noop() } var name = name if name.isEmpty { diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift index ec885c77..d1e9faf2 100644 --- a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift @@ -3,6 +3,7 @@ // SPDX-License-Identifier: Apache-2.0 // +@testable import OpenTelemetryApi @testable import OpenTelemetrySdk import XCTest @@ -10,17 +11,16 @@ class BuilderTests : XCTestCase { func testBuilders() { let meterProvider = StableMeterProviderBuilder().build() let meter = meterProvider.meterBuilder(name: "meter").build() - let counter = meter.counterBuilder(name: "counter").ofDoubles().build() - XCTAssertTrue(type(of: counter) == DoubleCounterSdk.self) + XCTAssertTrue(type(of:meter) == DefaultStableMeter.self) + XCTAssertNotNil(meter.counterBuilder(name: "counter").ofDoubles().build()) - XCTAssertTrue(type(of: meter.counterBuilder(name: "counter").build()) == LongCounterSdk.self) - XCTAssertTrue(type(of:meter.gaugeBuilder(name: "gauge").buildWithCallback({ _ in })) == ObservableInstrumentSdk.self) - XCTAssertTrue(type(of:meter.gaugeBuilder(name: "gauge").ofLongs().buildWithCallback({ _ in })) == ObservableInstrumentSdk.self) - XCTAssertTrue(type(of: meter.histogramBuilder(name: "histogram").build()) == DoubleHistogramMeterSdk.self) - XCTAssertTrue(type(of: meter.histogramBuilder(name: "histogram").ofLongs().build()) == LongHistogramMeterSdk.self) - XCTAssertTrue(type(of:meter.upDownCounterBuilder(name: "updown").build()) == LongUpDownCounterSdk.self) - XCTAssertTrue(type(of:meter.upDownCounterBuilder(name: "updown").ofDoubles().build()) == DoubleUpDownCounterSdk.self) - XCTAssertTrue(type(of:meter.upDownCounterBuilder(name: "updown").buildWithCallback({ _ in })) == ObservableInstrumentSdk.self) + XCTAssertNotNil(meter.gaugeBuilder(name: "gauge").buildWithCallback({ _ in })) + XCTAssertNotNil(meter.gaugeBuilder(name: "gauge").ofLongs().buildWithCallback({ _ in })) + XCTAssertNotNil(meter.histogramBuilder(name: "histogram").build()) + XCTAssertNotNil(meter.histogramBuilder(name: "histogram").ofLongs().build()) + XCTAssertNotNil(meter.upDownCounterBuilder(name: "updown").build()) + XCTAssertNotNil(meter.upDownCounterBuilder(name: "updown").ofDoubles().build()) + XCTAssertNotNil(meter.upDownCounterBuilder(name: "updown").buildWithCallback({ _ in })) } } diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/InstrumentSelectorTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/InstrumentSelectorTests.swift new file mode 100644 index 00000000..a63170f5 --- /dev/null +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/InstrumentSelectorTests.swift @@ -0,0 +1,43 @@ +// +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// + +import Foundation + +import OpenTelemetryApi +@testable import OpenTelemetrySdk +import XCTest + +public class InstrumentSelectorTests : XCTestCase { + func testDefault() { + let defaultInstrumentSelector = InstrumentSelector.builder().build() + XCTAssertNil(defaultInstrumentSelector.meterName) + XCTAssertNil(defaultInstrumentSelector.instrumentType) + XCTAssertNil(defaultInstrumentSelector.meterName) + XCTAssertNil(defaultInstrumentSelector.meterVersion) + XCTAssertNil(defaultInstrumentSelector.meterSchemaUrl) + XCTAssertEqual("*", defaultInstrumentSelector.instrumentName) + } + + func testInstrumentSelector() { + let basicInstrument = InstrumentSelector.builder().setInstrument(name: "instrument").build() + XCTAssertEqual("instrument", basicInstrument.instrumentName) + XCTAssertNil(basicInstrument.meterName) + XCTAssertNil(basicInstrument.instrumentType) + XCTAssertNil(basicInstrument.meterName) + XCTAssertNil(basicInstrument.meterVersion) + XCTAssertNil(basicInstrument.meterSchemaUrl) + + + + let fullSetSelector = InstrumentSelector.builder().setMeter(name: "MyMeter").setMeter(version: "1.0.0").setMeter(schemaUrl: "test.com").setInstrument(name: "instrument").setInstrument(type: .upDownCounter).build() + + XCTAssertEqual("MyMeter", fullSetSelector.meterName) + XCTAssertEqual("1.0.0", fullSetSelector.meterVersion) + XCTAssertEqual("test.com", fullSetSelector.meterSchemaUrl) + XCTAssertEqual("instrument", fullSetSelector.instrumentName) + XCTAssertEqual(InstrumentType.upDownCounter, fullSetSelector.instrumentType) + } + +} diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/MetricDescriptorTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/MetricDescriptorTests.swift new file mode 100644 index 00000000..36d6aa89 --- /dev/null +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/MetricDescriptorTests.swift @@ -0,0 +1,31 @@ +// +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// + +import Foundation + +import OpenTelemetryApi +@testable import OpenTelemetrySdk +import XCTest + +class MetricDescriptorTests : XCTestCase { + + func testInitMetricDescriptor() { + let descriptor = MetricDescriptor(name: "Name", description: "Description", unit: "point") + + XCTAssertEqual("OpenTelemetrySdk.DefaultAggregation", descriptor.aggregationName()) + + let viewDescriptor = MetricDescriptor(view:StableView.builder().build(), instrument: InstrumentDescriptor(name: "Name", description: "Description", unit: "point", type: .observableGauge, valueType: .double)) + + XCTAssertEqual(descriptor, viewDescriptor) + XCTAssertEqual(descriptor.hashValue, viewDescriptor.hashValue) + XCTAssertEqual(descriptor.aggregationName(), viewDescriptor.aggregationName()) + } + + func testViews() { + let descriptor = MetricDescriptor(view: StableView(name: "View", description: "View Descriptor", aggregation: Aggregations.drop(), attributeProcessor: NoopAttributeProcessor.noop), instrument: InstrumentDescriptor(name: "name", description: "instrumentDescriptor", unit: "ms", type: .observableGauge, valueType: .double)) + XCTAssertEqual(descriptor.name, "View") + XCTAssertEqual(descriptor.description, "View Descriptor") + } +} diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/NoopAttributesProcessorTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/NoopAttributesProcessorTests.swift new file mode 100644 index 00000000..433ae3c4 --- /dev/null +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/NoopAttributesProcessorTests.swift @@ -0,0 +1,17 @@ +// +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// + +import Foundation + +import OpenTelemetryApi +@testable import OpenTelemetrySdk +import XCTest + +class NoopAttributesProcessorTests : XCTestCase { + func testStaticNoop() { + XCTAssertNotNil(NoopAttributeProcessor.noop) + XCTAssertEqual(NoopAttributeProcessor.noop.process(incoming: ["hello": AttributeValue.string("world")]), ["hello" : AttributeValue.string("world")]) + } +} diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/StableMeterProviderSdkTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/StableMeterProviderSdkTests.swift index 42af288a..7e1a283b 100644 --- a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/StableMeterProviderSdkTests.swift +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/StableMeterProviderSdkTests.swift @@ -2,7 +2,7 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 // - +import OpenTelemetryApi @testable import OpenTelemetrySdk import XCTest @@ -10,7 +10,7 @@ class StableMeterProviderSdkTests : XCTestCase { var meterProvider = StableMeterProviderBuilder().build() func testDefaultGet() { - XCTAssert(meterProvider.get(name: "test") is StableMeterSdk) + XCTAssert(meterProvider.get(name: "test") is DefaultStableMeter) } func testGetSameInstanceForName_WithoutVersion() { From c2209a088e3893394eeee26d35f88b3f2b3abd48 Mon Sep 17 00:00:00 2001 From: Bryce Buchanan Date: Wed, 28 Jun 2023 15:13:55 -0700 Subject: [PATCH 3/3] Fixes and More Tests - Corrected incorrect dealloc in StablePeriodicMetricReader - Corrected default regex for Instrument Selector - removed inout attribute for storage in meters, preventing in potentially unowned storage objectes. - changed StableObservableMeasurementSdk from struct to class to prevent copy propogation. --- .../Stable/DoubleHistogramMeterSdk.swift | 4 +- .../Stable/DoubleUpDownCounterSdk.swift | 2 +- .../StablePeriodicMetricReaderSdk.swift | 4 + .../Metrics/Stable/InstrumentBuilder.swift | 11 +- .../Stable/InstrumentSelectorBuilder.swift | 2 +- .../Metrics/Stable/LongCounterSdk.swift | 4 +- .../Stable/LongHistogramMeterSdk.swift | 2 +- .../Metrics/Stable/LongUpDownCounterSdk.swift | 2 +- .../Metrics/Stable/StableMeterSdk.swift | 19 +++- .../State/StableObservableMeasurement.swift | 6 +- .../Metrics/StableMetrics/BuilderTests.swift | 5 +- .../InstrumentSelectorTests.swift | 2 +- .../Mocks/BlockingMetricExporter.swift | 103 ++++++++++++++++++ .../StableMetrics/StableMeterSdkTests.swift | 65 +++++++++++ 14 files changed, 206 insertions(+), 25 deletions(-) create mode 100644 Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/Mocks/BlockingMetricExporter.swift create mode 100644 Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/StableMeterSdkTests.swift diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterSdk.swift index ee5433cd..f9ebbf4c 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterSdk.swift @@ -10,7 +10,7 @@ public class DoubleHistogramMeterSdk : DoubleHistogram, Instrument { public var instrumentDescriptor: InstrumentDescriptor public var storage : WritableMetricStorage - init(instrumentDescriptor : InstrumentDescriptor, storage: inout WritableMetricStorage) { + init(instrumentDescriptor : InstrumentDescriptor, storage: WritableMetricStorage) { self.instrumentDescriptor = instrumentDescriptor self.storage = storage } @@ -20,7 +20,7 @@ public class DoubleHistogramMeterSdk : DoubleHistogram, Instrument { } public func record(value: Double, attributes: [String : OpenTelemetryApi.AttributeValue]) { - + //TODO: implement } } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterSdk.swift index 8c6bb44a..2af7ab58 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterSdk.swift @@ -10,7 +10,7 @@ public class DoubleUpDownCounterSdk : DoubleUpDownCounter, Instrument { public private(set) var instrumentDescriptor: InstrumentDescriptor var storage : WritableMetricStorage - init(instrumentDescriptor: InstrumentDescriptor, storage: inout WritableMetricStorage) { + init(instrumentDescriptor: InstrumentDescriptor, storage: WritableMetricStorage) { self.instrumentDescriptor = instrumentDescriptor self.storage = storage } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/Exporter/StablePeriodicMetricReaderSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/Exporter/StablePeriodicMetricReaderSdk.swift index f9cf178f..e3344613 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/Exporter/StablePeriodicMetricReaderSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/Exporter/StablePeriodicMetricReaderSdk.swift @@ -31,6 +31,10 @@ public class StablePeriodicMetricReaderSdk : StableMetricReader { } } + deinit { + _ = shutdown() + scheduleTimer.activate() + } public func register(registration: CollectionRegistration) { diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift index 2b82d13c..cbb66f72 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift @@ -33,12 +33,11 @@ extension InstrumentBuilder { // todo : Is it necessary to use inout for writableMetricStorage? - public func buildSynchronousInstrument(_ instrumentFactory: (InstrumentDescriptor, inout WritableMetricStorage) -> T) -> T { - let descriptor = InstrumentDescriptor(name: instrumentName, description: description, unit: unit, type: type, valueType: valueType) - var storage = meterSharedState.registerSynchronousMetricStorage(instrument: descriptor, meterProviderSharedState: meterProviderSharedState) - return instrumentFactory(descriptor,&storage) - - } + public func buildSynchronousInstrument(_ instrumentFactory: (InstrumentDescriptor, WritableMetricStorage) -> T) -> T { + let descriptor = InstrumentDescriptor(name: instrumentName, description: description, unit: unit, type: type, valueType: valueType) + let storage = meterSharedState.registerSynchronousMetricStorage(instrument: descriptor, meterProviderSharedState: meterProviderSharedState) + return instrumentFactory(descriptor, storage) + } public func registerDoubleAsynchronousInstrument(type : InstrumentType, updater: @escaping (ObservableDoubleMeasurement)-> Void) -> ObservableInstrumentSdk { let sdkObservableMeasurement = buildObservableMeasurement(type: type) diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentSelectorBuilder.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentSelectorBuilder.swift index 3b249b38..3e33e444 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentSelectorBuilder.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentSelectorBuilder.swift @@ -7,7 +7,7 @@ import Foundation public class InstrumentSelectorBuilder { var instrumentType : InstrumentType? - var instrumentName : String = "*" + var instrumentName : String = ".*" var meterName : String? var meterVersion : String? var meterSchemaUrl : String? diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterSdk.swift index 15f3f783..c9deba38 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterSdk.swift @@ -11,7 +11,7 @@ public class LongCounterSdk : LongCounter, Instrument { public var instrumentDescriptor: InstrumentDescriptor private var storage : WritableMetricStorage - init(descriptor : InstrumentDescriptor, storage: inout WritableMetricStorage) { + init(descriptor : InstrumentDescriptor, storage: WritableMetricStorage) { self.storage = storage self.instrumentDescriptor = descriptor } @@ -35,7 +35,7 @@ public struct DoubleCounterSdk : DoubleCounter, Instrument { public var instrumentDescriptor: InstrumentDescriptor private var storage: WritableMetricStorage - init(descriptor: InstrumentDescriptor, storage: inout WritableMetricStorage) { + init(descriptor: InstrumentDescriptor, storage: WritableMetricStorage) { self.storage = storage self.instrumentDescriptor = descriptor } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterSdk.swift index 0482191d..b96e24a3 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterSdk.swift @@ -11,7 +11,7 @@ public class LongHistogramMeterSdk : LongHistogram, Instrument { public var instrumentDescriptor: InstrumentDescriptor private var storage : WritableMetricStorage - init(descriptor : InstrumentDescriptor, storage: inout WritableMetricStorage) { + init(descriptor : InstrumentDescriptor, storage: WritableMetricStorage) { self.storage = storage self.instrumentDescriptor = descriptor } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift index d4b7d1f2..7bba3948 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/LongUpDownCounterSdk.swift @@ -10,7 +10,7 @@ public class LongUpDownCounterSdk : LongUpDownCounter, Instrument { public private(set) var instrumentDescriptor: InstrumentDescriptor var storage : WritableMetricStorage - init(instrumentDescriptor: InstrumentDescriptor, storage: inout WritableMetricStorage){ + init(instrumentDescriptor: InstrumentDescriptor, storage: WritableMetricStorage){ self.instrumentDescriptor = instrumentDescriptor self.storage = storage } diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/StableMeterSdk.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/StableMeterSdk.swift index 151b789e..94468196 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/StableMeterSdk.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/StableMeterSdk.swift @@ -10,10 +10,13 @@ class StableMeterSdk : StableMeter { var meterSharedState : StableMeterSharedState public private(set) var instrumentationScopeInfo: InstrumentationScopeInfo - init(meterProviderSharedState : inout MeterProviderSharedState, instrumentScope: InstrumentationScopeInfo, registeredReaders : inout [RegisteredReader]) { + init(meterProviderSharedState : inout MeterProviderSharedState, + instrumentScope: InstrumentationScopeInfo, + registeredReaders : inout [RegisteredReader]) { self.instrumentationScopeInfo = instrumentScope self.meterProviderSharedState = meterProviderSharedState - self.meterSharedState = StableMeterSharedState(instrumentationScope: instrumentScope, registeredReaders: registeredReaders) + self.meterSharedState = StableMeterSharedState(instrumentationScope: instrumentScope, + registeredReaders: registeredReaders) } func counterBuilder(name: String) -> OpenTelemetryApi.LongCounterBuilder { @@ -23,15 +26,21 @@ class StableMeterSdk : StableMeter { } func upDownCounterBuilder(name: String) -> OpenTelemetryApi.LongUpDownCounterBuilder { - return LongUpDownCounterBuilderSdk(meterProviderSharedState: &meterProviderSharedState, meterSharedState: &meterSharedState, name: name) + return LongUpDownCounterBuilderSdk(meterProviderSharedState: &meterProviderSharedState, + meterSharedState: &meterSharedState, + name: name) } func histogramBuilder(name: String) -> OpenTelemetryApi.DoubleHistogramBuilder { - return DoubleHistogramMeterBuilderSdk(meterProviderSharedState: &meterProviderSharedState, meterSharedState: &meterSharedState, name: name) + return DoubleHistogramMeterBuilderSdk(meterProviderSharedState: &meterProviderSharedState, + meterSharedState: &meterSharedState, + name: name) } func gaugeBuilder(name: String) -> OpenTelemetryApi.DoubleGaugeBuilder { - DoubleGaugeBuilderSdk(meterProviderSharedState: &meterProviderSharedState, meterSharedState: &meterSharedState, name: name) + DoubleGaugeBuilderSdk(meterProviderSharedState: &meterProviderSharedState, + meterSharedState: &meterSharedState, + name: name) } fileprivate let collectLock = Lock() diff --git a/Sources/OpenTelemetrySdk/Metrics/Stable/State/StableObservableMeasurement.swift b/Sources/OpenTelemetrySdk/Metrics/Stable/State/StableObservableMeasurement.swift index 3221e382..7f77d9c9 100644 --- a/Sources/OpenTelemetrySdk/Metrics/Stable/State/StableObservableMeasurement.swift +++ b/Sources/OpenTelemetrySdk/Metrics/Stable/State/StableObservableMeasurement.swift @@ -6,7 +6,7 @@ import Foundation import OpenTelemetryApi -public struct StableObservableMeasurementSdk : ObservableLongMeasurement, ObservableDoubleMeasurement { +public class StableObservableMeasurementSdk : ObservableLongMeasurement, ObservableDoubleMeasurement { private var insturmentScope : InstrumentationScopeInfo public private(set) var descriptor : InstrumentDescriptor public private(set) var storages : [AsynchronousMetricStorage] @@ -21,13 +21,13 @@ public struct StableObservableMeasurementSdk : ObservableLongMeasurement, Observ self.storages = storages } - mutating func setActiveReader(reader: RegisteredReader, startEpochNanos : UInt64, epochNanos : UInt64) { + func setActiveReader(reader: RegisteredReader, startEpochNanos : UInt64, epochNanos : UInt64) { activeReader = reader self.startEpochNanos = startEpochNanos self.epochNanos = epochNanos } - mutating public func clearActiveReader() { + public func clearActiveReader() { activeReader = nil } public func record(value: Int) { diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift index d1e9faf2..ac222371 100644 --- a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/BuilderTests.swift @@ -13,8 +13,7 @@ class BuilderTests : XCTestCase { let meter = meterProvider.meterBuilder(name: "meter").build() XCTAssertTrue(type(of:meter) == DefaultStableMeter.self) XCTAssertNotNil(meter.counterBuilder(name: "counter").ofDoubles().build()) - - + XCTAssertNotNil(meter.counterBuilder(name: "counter").build()) XCTAssertNotNil(meter.gaugeBuilder(name: "gauge").buildWithCallback({ _ in })) XCTAssertNotNil(meter.gaugeBuilder(name: "gauge").ofLongs().buildWithCallback({ _ in })) XCTAssertNotNil(meter.histogramBuilder(name: "histogram").build()) @@ -22,5 +21,7 @@ class BuilderTests : XCTestCase { XCTAssertNotNil(meter.upDownCounterBuilder(name: "updown").build()) XCTAssertNotNil(meter.upDownCounterBuilder(name: "updown").ofDoubles().build()) XCTAssertNotNil(meter.upDownCounterBuilder(name: "updown").buildWithCallback({ _ in })) + + } } diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/InstrumentSelectorTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/InstrumentSelectorTests.swift index a63170f5..e234e972 100644 --- a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/InstrumentSelectorTests.swift +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/InstrumentSelectorTests.swift @@ -17,7 +17,7 @@ public class InstrumentSelectorTests : XCTestCase { XCTAssertNil(defaultInstrumentSelector.meterName) XCTAssertNil(defaultInstrumentSelector.meterVersion) XCTAssertNil(defaultInstrumentSelector.meterSchemaUrl) - XCTAssertEqual("*", defaultInstrumentSelector.instrumentName) + XCTAssertEqual(".*", defaultInstrumentSelector.instrumentName) } func testInstrumentSelector() { diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/Mocks/BlockingMetricExporter.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/Mocks/BlockingMetricExporter.swift new file mode 100644 index 00000000..ea41c2ee --- /dev/null +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/Mocks/BlockingMetricExporter.swift @@ -0,0 +1,103 @@ +// +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// + +import Foundation +import OpenTelemetrySdk + +class BlockingMetricExporter : StableMetricExporter { + let cond = NSCondition() + + enum State { + case waitToBlock + case blocked + case unblocked + } + + var state: State = .waitToBlock + + let aggregrationTemporality: AggregationTemporality + + init(aggregationTemporality: AggregationTemporality) { + + self.aggregrationTemporality = aggregationTemporality + } + + func export(metrics: [OpenTelemetrySdk.StableMetricData]) -> OpenTelemetrySdk.ExportResult { + cond.lock() + while state != .unblocked { + state = .blocked + // Some threads may wait for Blocked State. + cond.broadcast() + cond.wait() + } + cond.unlock() + return .success + } + + func waitUntilIsBlocked() { + cond.lock() + while state != .blocked { + cond.wait() + } + cond.unlock() + } + + func flush() -> OpenTelemetrySdk.ExportResult { + .success + } + + func shutdown() -> OpenTelemetrySdk.ExportResult { + .success + } + + func getAggregationTemporality(for instrument: OpenTelemetrySdk.InstrumentType) -> OpenTelemetrySdk.AggregationTemporality { + return aggregrationTemporality + } +} + +class WaitingMetricExporter: StableMetricExporter { + var metricDataList = [StableMetricData]() + let cond = NSCondition() + let numberToWaitFor: Int + var shutdownCalled = false + var aggregationTemporality : AggregationTemporality = .delta + init(numberToWaitFor: Int, aggregationTemporality : AggregationTemporality = .delta) { + self.numberToWaitFor = numberToWaitFor + self.aggregationTemporality = aggregationTemporality + } + + func export(metrics: [OpenTelemetrySdk.StableMetricData]) -> OpenTelemetrySdk.ExportResult { + cond.lock() + metricDataList.append(contentsOf: metrics) + cond.unlock() + cond.broadcast() + return .success + } + + func waitForExport() -> [StableMetricData] { + var ret : [StableMetricData] + cond.lock() + defer { cond.unlock()} + while metricDataList.count < numberToWaitFor { + cond.wait() + } + ret = metricDataList + metricDataList.removeAll() + return ret + } + + func flush() -> OpenTelemetrySdk.ExportResult { + .success + } + + func shutdown() -> OpenTelemetrySdk.ExportResult { + .success + } + + func getAggregationTemporality(for instrument: OpenTelemetrySdk.InstrumentType) -> OpenTelemetrySdk.AggregationTemporality { + return aggregationTemporality + } +} + diff --git a/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/StableMeterSdkTests.swift b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/StableMeterSdkTests.swift new file mode 100644 index 00000000..e5275eba --- /dev/null +++ b/Tests/OpenTelemetrySdkTests/Metrics/StableMetrics/StableMeterSdkTests.swift @@ -0,0 +1,65 @@ +// +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 +// + +import Foundation +import XCTest +@testable import OpenTelemetrySdk +import OpenTelemetryApi + +class MockStableMetricExporter : StableMetricExporter { + + public var exportData : [StableMetricData] = [StableMetricData]() + + func export(metrics: [OpenTelemetrySdk.StableMetricData]) -> OpenTelemetrySdk.ExportResult { + exportData = metrics + return .success + } + + func flush() -> OpenTelemetrySdk.ExportResult { + .success + } + + func shutdown() -> OpenTelemetrySdk.ExportResult { + .success + } + + func getAggregationTemporality(for instrument: OpenTelemetrySdk.InstrumentType) -> OpenTelemetrySdk.AggregationTemporality { + .delta + } + + +} + +class StableMeterProviderTests : XCTestCase { + func testStableMeterSdk() { + let mockExporter = WaitingMetricExporter(numberToWaitFor: 3, aggregationTemporality: .delta) + let stableMeterProvider = StableMeterProviderSdk.builder().registerMetricReader(reader: StablePeriodicMetricReaderSdk(exporter: mockExporter, exportInterval: 5.0)).registerView(selector: InstrumentSelectorBuilder().build(), view: StableView.builder().build()).build() + let meterSdk = stableMeterProvider.meterBuilder(name: "myMeter").build() + + var counter = meterSdk.counterBuilder(name: "counter").build() + + var _ = meterSdk.gaugeBuilder(name: "gauge").buildWithCallback { measurement in + measurement.record(value: 1.0) + } + var histogram = meterSdk.histogramBuilder(name: "histogram").build() + var upDown = meterSdk.upDownCounterBuilder(name: "upDown").build() + + counter.add(value: 1) +// histogram.record(value: 2.0) + upDown.add(value: 100) + + let metrics = mockExporter.waitForExport() + + XCTAssertTrue(metrics.contains(where: { metric in + metric.name == "counter" && (metric.data.points[0] as! LongPointData).value == 1 + })) + XCTAssertTrue(metrics.contains(where: { metric in + metric.name == "gauge" && (metric.data.points[0] as! DoublePointData).value == 1.0 + })) + XCTAssertTrue(metrics.contains(where: { metric in + metric.name == "upDown" && (metric.data.points[0] as! LongPointData).value == 100 + })) + } +}