44 */
55
66import Foundation
7- import OpenTelemetryProtocolExporter
7+ import GRPC
8+ import NIO
9+ import NIOSSL
810import OpenTelemetryApi
11+ import OpenTelemetryProtocolExporter
912import OpenTelemetrySdk
1013import ResourceExtension
14+ import SignPostIntegration
1115import StdoutExporter
1216import ZipkinExporter
13- import SignPostIntegration
14- import GRPC
15- import NIO
16- import NIOSSL
1717
1818let sampleKey = " sampleKey "
1919let sampleValue = " sampleValue "
@@ -22,10 +22,6 @@ var resources = DefaultResources().get()
2222
2323let instrumentationScopeName = " OTLPExporter "
2424let instrumentationScopeVersion = " semver:0.1.0 "
25- var instrumentationScopeInfo = InstrumentationScopeInfo ( name: instrumentationScopeName, version: instrumentationScopeVersion)
26-
27- var tracer : TracerSdk
28- tracer = OpenTelemetrySDK . instance. tracerProvider. get ( instrumentationName: instrumentationScopeName, instrumentationVersion: instrumentationScopeVersion) as! TracerSdk
2925
3026let configuration = ClientConnection . Configuration. default (
3127 target: . hostAndPort( " localhost " , 4317 ) ,
@@ -38,10 +34,18 @@ let stdoutExporter = StdoutExporter()
3834let spanExporter = MultiSpanExporter ( spanExporters: [ otlpTraceExporter, stdoutExporter] )
3935
4036let spanProcessor = SimpleSpanProcessor ( spanExporter: spanExporter)
41- OpenTelemetrySDK . instance. tracerProvider. addSpanProcessor ( spanProcessor)
37+ OpenTelemetry . registerTracerProvider ( tracerProvider:
38+ TracerProviderBuilder ( )
39+ . add ( spanProcessor: spanProcessor)
40+ . build ( )
41+ )
42+
43+ let tracer = OpenTelemetry . instance. tracerProvider. get ( instrumentationName: instrumentationScopeName, instrumentationVersion: instrumentationScopeVersion)
44+
4245
4346if #available( macOS 10 . 14 , * ) , #available( iOS 12 . 0 , * ) {
44- OpenTelemetrySDK . instance. tracerProvider. addSpanProcessor ( SignPostIntegration ( ) )
47+ let tracerProviderSDK = OpenTelemetry . instance. tracerProvider as? TracerProviderSdk
48+ tracerProviderSDK? . addSpanProcessor ( SignPostIntegration ( ) )
4549}
4650
4751func createSpans( ) {
@@ -52,34 +56,37 @@ func createSpans() {
5256 doWork ( )
5357 }
5458 Thread . sleep ( forTimeInterval: 0.5 )
55-
59+
5660 let parentSpan2 = tracer. spanBuilder ( spanName: " Another " ) . setSpanKind ( spanKind: . client) . setActive ( true ) . startSpan ( )
5761 parentSpan2. setAttribute ( key: sampleKey, value: sampleValue)
5862 // do more Work
5963 for _ in 1 ... 3 {
6064 doWork ( )
6165 }
6266 Thread . sleep ( forTimeInterval: 0.5 )
63-
67+
6468 parentSpan2. end ( )
6569 parentSpan1. end ( )
6670}
6771
6872func doWork( ) {
6973 let childSpan = tracer. spanBuilder ( spanName: " doWork " ) . setSpanKind ( spanKind: . client) . startSpan ( )
7074 childSpan. setAttribute ( key: sampleKey, value: sampleValue)
71- Thread . sleep ( forTimeInterval: Double . random ( in: 0 ..< 10 ) / 100 )
75+ Thread . sleep ( forTimeInterval: Double . random ( in: 0 ..< 10 ) / 100 )
7276 childSpan. end ( )
7377}
7478
7579// Create a Parent span (Main) and do some Work (child Spans). Repeat for another Span.
7680createSpans ( )
7781
78- //Metrics
82+ // Metrics
7983let otlpMetricExporter = OtlpMetricExporter ( channel: client)
8084let processor = MetricProcessorSdk ( )
8185let meterProvider = MeterProviderSdk ( metricProcessor: processor, metricExporter: otlpMetricExporter, metricPushInterval: 0.1 )
8286
87+ OpenTelemetry . registerMeterProvider ( meterProvider: meterProvider)
88+
89+
8390var meter = meterProvider. get ( instrumentationName: " otlp_example_meter' " )
8491var exampleCounter = meter. createIntCounter ( name: " otlp_example_counter " )
8592var exampleMeasure = meter. createIntMeasure ( name: " otlp_example_measure " )
0 commit comments