Skip to content

Commit e5c6a8a

Browse files
authored
refactored InstrumentBuilder to make relevant builder function public (#722)
* refactored InstrumentBuilder to make relevant builder function public * added tests and made some corrections to instrumentBuilder object
1 parent 0707166 commit e5c6a8a

File tree

10 files changed

+350
-179
lines changed

10 files changed

+350
-179
lines changed

Sources/OpenTelemetrySdk/Metrics/Stable/DoubleCounterMeterBuilderSdk.swift

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,21 @@
66
import Foundation
77
import OpenTelemetryApi
88

9-
public class DoubleCounterMeterBuilderSdk: DoubleCounterBuilder, InstrumentBuilder {
10-
var meterSharedState: StableMeterSharedState
11-
12-
var meterProviderSharedState: MeterProviderSharedState
13-
14-
let type: InstrumentType = .counter
15-
16-
let valueType: InstrumentValueType = .double
17-
18-
var instrumentName: String
19-
20-
var description: String
21-
22-
var unit: String
23-
24-
init(meterProviderSharedState: MeterProviderSharedState,
25-
meterSharedState: StableMeterSharedState,
9+
public class DoubleCounterMeterBuilderSdk: InstrumentBuilder, DoubleCounterBuilder {
10+
init(meterProviderSharedState: inout MeterProviderSharedState,
11+
meterSharedState: inout StableMeterSharedState,
2612
name: String,
2713
description: String,
2814
unit: String) {
29-
self.meterProviderSharedState = meterProviderSharedState
30-
self.meterSharedState = meterSharedState
31-
self.unit = unit
32-
self.description = description
33-
instrumentName = name
15+
super.init(
16+
meterProviderSharedState: &meterProviderSharedState,
17+
meterSharedState: &meterSharedState,
18+
type: .counter,
19+
valueType: .double,
20+
description: description,
21+
unit: unit,
22+
instrumentName: name
23+
)
3424
}
3525

3626
public func build() -> OpenTelemetryApi.DoubleCounter {

Sources/OpenTelemetrySdk/Metrics/Stable/DoubleGaugeBuilderSdk.swift

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,17 @@
66
import Foundation
77
import OpenTelemetryApi
88

9-
public class DoubleGaugeBuilderSdk: DoubleGaugeBuilder, InstrumentBuilder {
10-
var meterProviderSharedState: MeterProviderSharedState
11-
12-
var meterSharedState: StableMeterSharedState
13-
14-
var type: InstrumentType = .observableGauge
15-
16-
var valueType: InstrumentValueType = .double
17-
18-
var description: String = ""
19-
20-
var unit: String = ""
21-
22-
var instrumentName: String
23-
9+
public class DoubleGaugeBuilderSdk: InstrumentBuilder, DoubleGaugeBuilder {
2410
init(meterProviderSharedState: inout MeterProviderSharedState, meterSharedState: inout StableMeterSharedState, name: String) {
25-
self.meterProviderSharedState = meterProviderSharedState
26-
self.meterSharedState = meterSharedState
27-
instrumentName = name
11+
super.init(
12+
meterProviderSharedState: &meterProviderSharedState,
13+
meterSharedState: &meterSharedState,
14+
type: .observableGauge,
15+
valueType: .double,
16+
description: "",
17+
unit: "",
18+
instrumentName: name
19+
)
2820
}
2921

3022
public func ofLongs() -> OpenTelemetryApi.LongGaugeBuilder {

Sources/OpenTelemetrySdk/Metrics/Stable/DoubleHistogramMeterBuilderSdk.swift

Lines changed: 10 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,21 @@
66
import Foundation
77
import OpenTelemetryApi
88

9-
public class DoubleHistogramMeterBuilderSdk: DoubleHistogramBuilder, InstrumentBuilder {
10-
var meterProviderSharedState: MeterProviderSharedState
11-
12-
var meterSharedState: StableMeterSharedState
13-
14-
let type: InstrumentType = .histogram
15-
16-
let valueType: InstrumentValueType = .double
17-
18-
let instrumentName: String
19-
20-
var description: String
21-
22-
var unit: String
23-
9+
public class DoubleHistogramMeterBuilderSdk: InstrumentBuilder, DoubleHistogramBuilder {
2410
init(meterProviderSharedState: inout MeterProviderSharedState,
2511
meterSharedState: inout StableMeterSharedState,
2612
name: String,
2713
description: String = "",
2814
unit: String = "") {
29-
self.meterProviderSharedState = meterProviderSharedState
30-
self.meterSharedState = meterSharedState
31-
instrumentName = name
32-
self.description = description
33-
self.unit = unit
15+
super.init(
16+
meterProviderSharedState: &meterProviderSharedState,
17+
meterSharedState: &meterSharedState,
18+
type: .histogram,
19+
valueType: .double,
20+
description: description,
21+
unit: unit,
22+
instrumentName: name
23+
)
3424
}
3525

3626
public func ofLongs() -> OpenTelemetryApi.LongHistogramBuilder {

Sources/OpenTelemetrySdk/Metrics/Stable/DoubleUpDownCounterBuilderSdk.swift

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,21 @@
66
import Foundation
77
import OpenTelemetryApi
88

9-
public class DoubleUpDownCounterBuilderSdk: DoubleUpDownCounterBuilder, InstrumentBuilder {
10-
var meterSharedState: StableMeterSharedState
11-
12-
var meterProviderSharedState: MeterProviderSharedState
13-
14-
let type: InstrumentType = .upDownCounter
15-
16-
let valueType: InstrumentValueType = .double
17-
18-
var instrumentName: String
19-
20-
var description: String
21-
22-
var unit: String
23-
24-
init(meterProviderSharedState: MeterProviderSharedState,
25-
meterSharedState: StableMeterSharedState,
9+
public class DoubleUpDownCounterBuilderSdk: InstrumentBuilder, DoubleUpDownCounterBuilder {
10+
init(meterProviderSharedState: inout MeterProviderSharedState,
11+
meterSharedState: inout StableMeterSharedState,
2612
name: String,
2713
description: String,
2814
unit: String) {
29-
self.meterProviderSharedState = meterProviderSharedState
30-
self.meterSharedState = meterSharedState
31-
self.unit = unit
32-
self.description = description
33-
instrumentName = name
15+
super.init(
16+
meterProviderSharedState: &meterProviderSharedState,
17+
meterSharedState: &meterSharedState,
18+
type: .upDownCounter,
19+
valueType: .double,
20+
description: description,
21+
unit: unit,
22+
instrumentName: name
23+
)
3424
}
3525

3626
public func build() -> OpenTelemetryApi.DoubleUpDownCounter {

Sources/OpenTelemetrySdk/Metrics/Stable/InstrumentBuilder.swift

Lines changed: 27 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,40 +6,49 @@
66
import Foundation
77
import OpenTelemetryApi
88

9-
protocol InstrumentBuilder: AnyObject {
10-
var meterProviderSharedState: MeterProviderSharedState { get }
11-
var meterSharedState: StableMeterSharedState { get set }
12-
var type: InstrumentType { get }
13-
var valueType: InstrumentValueType { get }
14-
var description: String { get set }
15-
var unit: String { get set }
16-
var instrumentName: String { get }
9+
public class InstrumentBuilder {
10+
private var meterProviderSharedState: MeterProviderSharedState
11+
private var meterSharedState: StableMeterSharedState
12+
internal var type: InstrumentType
13+
internal var valueType: InstrumentValueType
14+
internal var description: String
15+
internal var unit: String
16+
internal var instrumentName: String
17+
internal init(meterProviderSharedState: inout MeterProviderSharedState, meterSharedState: inout StableMeterSharedState, type: InstrumentType, valueType: InstrumentValueType, description: String, unit: String, instrumentName: String) {
18+
self.meterProviderSharedState = meterProviderSharedState
19+
self.meterSharedState = meterSharedState
20+
self.type = type
21+
self.valueType = valueType
22+
self.description = description
23+
self.unit = unit
24+
self.instrumentName = instrumentName
25+
}
1726
}
1827

19-
extension InstrumentBuilder {
20-
public func setUnit(_ units: String) -> Self {
28+
public extension InstrumentBuilder {
29+
func setUnit(_ units: String) -> Self {
2130
// todo : validate unit
22-
unit = unit
31+
unit = units
2332
return self
2433
}
2534

26-
public func setDescription(_ description: String) -> Self {
35+
func setDescription(_ description: String) -> Self {
2736
self.description = description
2837
return self
2938
}
3039

31-
func swapBuilder<T: InstrumentBuilder>(_ builder: (MeterProviderSharedState, StableMeterSharedState, String, String, String) -> T) -> T {
32-
return builder(meterProviderSharedState, meterSharedState, instrumentName, description, unit)
40+
internal func swapBuilder<T: InstrumentBuilder>(_ builder: (inout MeterProviderSharedState, inout StableMeterSharedState, String, String, String) -> T) -> T {
41+
return builder(&meterProviderSharedState, &meterSharedState, instrumentName, description, unit)
3342
}
3443

3544
// todo : Is it necessary to use inout for writableMetricStorage?
36-
public func buildSynchronousInstrument<T: Instrument>(_ instrumentFactory: (InstrumentDescriptor, WritableMetricStorage) -> T) -> T {
45+
func buildSynchronousInstrument<T: Instrument>(_ instrumentFactory: (InstrumentDescriptor, WritableMetricStorage) -> T) -> T {
3746
let descriptor = InstrumentDescriptor(name: instrumentName, description: description, unit: unit, type: type, valueType: valueType)
3847
let storage = meterSharedState.registerSynchronousMetricStorage(instrument: descriptor, meterProviderSharedState: meterProviderSharedState)
3948
return instrumentFactory(descriptor, storage)
4049
}
4150

42-
public func registerDoubleAsynchronousInstrument(type: InstrumentType, updater: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableInstrumentSdk {
51+
func registerDoubleAsynchronousInstrument(type: InstrumentType, updater: @escaping (ObservableDoubleMeasurement) -> Void) -> ObservableInstrumentSdk {
4352
let sdkObservableMeasurement = buildObservableMeasurement(type: type)
4453
let callbackRegistration = CallbackRegistration(observableMeasurements: [sdkObservableMeasurement]) {
4554
updater(sdkObservableMeasurement)
@@ -48,7 +57,7 @@ extension InstrumentBuilder {
4857
return ObservableInstrumentSdk(meterSharedState: meterSharedState, callbackRegistration: callbackRegistration)
4958
}
5059

51-
public func registerLongAsynchronousInstrument(type: InstrumentType, updater: @escaping (ObservableLongMeasurement) -> Void) -> ObservableInstrumentSdk {
60+
func registerLongAsynchronousInstrument(type: InstrumentType, updater: @escaping (ObservableLongMeasurement) -> Void) -> ObservableInstrumentSdk {
5261
let sdkObservableMeasurement = buildObservableMeasurement(type: type)
5362
let callbackRegistration = CallbackRegistration(observableMeasurements: [sdkObservableMeasurement], callback: {
5463
updater(sdkObservableMeasurement)
@@ -57,7 +66,7 @@ extension InstrumentBuilder {
5766
return ObservableInstrumentSdk(meterSharedState: meterSharedState, callbackRegistration: callbackRegistration)
5867
}
5968

60-
public func buildObservableMeasurement(type: InstrumentType) -> StableObservableMeasurementSdk {
69+
func buildObservableMeasurement(type: InstrumentType) -> StableObservableMeasurementSdk {
6170
let descriptor = InstrumentDescriptor(name: instrumentName, description: description, unit: unit, type: type, valueType: valueType)
6271
return meterSharedState.registerObservableMeasurement(instrumentDescriptor: descriptor)
6372
}

Sources/OpenTelemetrySdk/Metrics/Stable/LongCounterMeterBuilderSdk.swift

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,19 @@
66
import Foundation
77
import OpenTelemetryApi
88

9-
public class LongCounterMeterBuilderSdk: LongCounterBuilder, InstrumentBuilder {
10-
var meterProviderSharedState: MeterProviderSharedState
11-
12-
var meterSharedState: StableMeterSharedState
13-
14-
let type: InstrumentType = .counter
15-
16-
let valueType: InstrumentValueType = .long
17-
18-
var instrumentName: String
19-
20-
var description: String = ""
21-
22-
var unit: String = ""
23-
9+
public class LongCounterMeterBuilderSdk: InstrumentBuilder, LongCounterBuilder {
2410
init(meterProviderSharedState: inout MeterProviderSharedState,
2511
meterSharedState: inout StableMeterSharedState,
2612
name: String) {
27-
self.meterProviderSharedState = meterProviderSharedState
28-
self.meterSharedState = meterSharedState
29-
instrumentName = name
13+
super.init(
14+
meterProviderSharedState: &meterProviderSharedState,
15+
meterSharedState: &meterSharedState,
16+
type: .counter,
17+
valueType: .long,
18+
description: "",
19+
unit: "",
20+
instrumentName: name
21+
)
3022
}
3123

3224
public func ofDoubles() -> OpenTelemetryApi.DoubleCounterBuilder {

Sources/OpenTelemetrySdk/Metrics/Stable/LongGaugeBuilderSdk.swift

Lines changed: 11 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,27 +6,17 @@
66
import Foundation
77
import OpenTelemetryApi
88

9-
public class LongGaugeBuilderSdk: LongGaugeBuilder, InstrumentBuilder {
10-
var meterProviderSharedState: MeterProviderSharedState
11-
12-
var meterSharedState: StableMeterSharedState
13-
14-
var type: InstrumentType = .observableGauge
15-
16-
var valueType: InstrumentValueType = .long
17-
18-
var description: String = ""
19-
20-
var unit: String = ""
21-
22-
var instrumentName: String
23-
24-
init(meterProviderSharedState: MeterProviderSharedState, meterSharedState: StableMeterSharedState, name: String, description: String, unit: String) {
25-
instrumentName = name
26-
self.unit = unit
27-
self.description = description
28-
self.meterSharedState = meterSharedState
29-
self.meterProviderSharedState = meterProviderSharedState
9+
public class LongGaugeBuilderSdk: InstrumentBuilder, LongGaugeBuilder {
10+
init(meterProviderSharedState: inout MeterProviderSharedState, meterSharedState: inout StableMeterSharedState, name: String, description: String, unit: String) {
11+
super.init(
12+
meterProviderSharedState: &meterProviderSharedState,
13+
meterSharedState: &meterSharedState,
14+
type: .observableGauge,
15+
valueType: .long,
16+
description: description,
17+
unit: unit,
18+
instrumentName: name
19+
)
3020
}
3121

3222
public func build() -> OpenTelemetryApi.LongGauge {

Sources/OpenTelemetrySdk/Metrics/Stable/LongHistogramMeterBuilderSdk.swift

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,21 @@
66
import Foundation
77
import OpenTelemetryApi
88

9-
public class LongHistogramMeterBuilderSdk: LongHistogramBuilder, InstrumentBuilder {
10-
var meterProviderSharedState: MeterProviderSharedState
11-
12-
var meterSharedState: StableMeterSharedState
13-
14-
let type: InstrumentType = .histogram
15-
16-
let valueType: InstrumentValueType = .long
17-
18-
var description: String
19-
20-
var unit: String
21-
22-
var instrumentName: String
23-
24-
init(meterProviderSharedState: MeterProviderSharedState,
25-
meterSharedState: StableMeterSharedState,
9+
public class LongHistogramMeterBuilderSdk: InstrumentBuilder, LongHistogramBuilder {
10+
init(meterProviderSharedState: inout MeterProviderSharedState,
11+
meterSharedState: inout StableMeterSharedState,
2612
instrumentName: String,
2713
description: String,
2814
unit: String) {
29-
self.meterProviderSharedState = meterProviderSharedState
30-
self.meterSharedState = meterSharedState
31-
self.instrumentName = instrumentName
32-
self.description = description
33-
self.unit = unit
15+
super.init(
16+
meterProviderSharedState: &meterProviderSharedState,
17+
meterSharedState: &meterSharedState,
18+
type: .histogram,
19+
valueType: .long,
20+
description: description,
21+
unit: unit,
22+
instrumentName: instrumentName
23+
)
3424
}
3525

3626
public func build() -> OpenTelemetryApi.LongHistogram {

0 commit comments

Comments
 (0)