Skip to content

Commit dab10fe

Browse files
author
Ignacio Bonafonte
committed
Simplifies Queue logic, and removes FileRead queue that was not being used.
For UploadWorker and FileWriter internally created queues are used It makes Persistence exporter simples to configure providing some default values
1 parent 0b39168 commit dab10fe

28 files changed

+104
-222
lines changed

Sources/Exporters/DatadogExporter/Logs/LogEncoder.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ internal struct LogAttributes {
1616

1717
/// `Encodable` representation of log. It gets sanitized before encoding.
1818
internal struct DDLog: Encodable {
19-
internal struct TracingAttributes {
19+
internal enum TracingAttributes {
2020
static let traceID = "dd.trace_id"
2121
static let spanID = "dd.span_id"
2222
}
@@ -80,7 +80,7 @@ internal struct DDLog: Encodable {
8080
self.threadName = attributes.removeValue(forKey: "threadName")?.description ?? "unkown"
8181
self.applicationVersion = configuration.version
8282

83-
let userAttributes: [String: Encodable] = attributes.mapValues{
83+
let userAttributes: [String: Encodable] = attributes.mapValues {
8484
switch $0 {
8585
case let .string(value):
8686
return value

Sources/Exporters/DatadogExporter/Logs/LogSanitizer.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import Foundation
77

88
/// Sanitizes `Log` representation received from the user, so it can match Datadog log constraints.
99
internal struct LogSanitizer {
10-
struct Constraints {
10+
enum Constraints {
1111
/// Attribute names reserved for Datadog.
1212
/// If any of those is used by the user, the attribute will be ignored.
1313
static let reservedAttributeNames: Set<String> = [
@@ -23,7 +23,7 @@ internal struct LogSanitizer {
2323
static let maxNumberOfAttributes: Int = 256
2424
/// Allowed first character of a tag name (given as ASCII values ranging from lowercased `a` to `z`) .
2525
/// Tags with name starting with different character will be dropped.
26-
static let allowedTagNameFirstCharacterASCIIRange: [UInt8] = Array(97...122)
26+
static let allowedTagNameFirstCharacterASCIIRange: [UInt8] = Array(97 ... 122)
2727
/// Maximum lenght of the tag.
2828
/// Tags exceeting this lenght will be trunkated.
2929
static let maxTagLength: Int = 200

Sources/Exporters/DatadogExporter/Logs/LogsExporter.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,9 @@ internal enum LogLevel: Int, Codable {
1717

1818
internal class LogsExporter {
1919
let logsDirectory = "com.otel.datadog.logs/v1"
20-
2120
let configuration: ExporterConfiguration
22-
2321
let logsStorage: FeatureStorage
24-
let logsStorageQueue = DispatchQueue(label: "com.otel.datadog.logswriter", target: .global(qos: .userInteractive))
25-
2622
let logsUpload: FeatureUpload
27-
let logsUploadQueue = DispatchQueue(label: "com.otel.datadog.logsupload", target: .global(qos: .userInteractive))
2823

2924
init(config: ExporterConfiguration) throws {
3025
self.configuration = config
@@ -39,14 +34,12 @@ internal class LogsExporter {
3934

4035
let logsFileWriter = FileWriter(
4136
dataFormat: dataFormat,
42-
orchestrator: filesOrchestrator,
43-
queue: logsStorageQueue
37+
orchestrator: filesOrchestrator
4438
)
4539

4640
let logsFileReader = FileReader(
4741
dataFormat: dataFormat,
48-
orchestrator: filesOrchestrator,
49-
queue: logsUploadQueue
42+
orchestrator: filesOrchestrator
5043
)
5144

5245
logsStorage = FeatureStorage(writer: logsFileWriter, reader: logsFileReader)
@@ -68,7 +61,6 @@ internal class LogsExporter {
6861
.ddEVPOriginVersionHeader(version: configuration.version),
6962
.ddRequestIDHeader()
7063
] + (configuration.payloadCompression ? [RequestBuilder.HTTPHeader.contentEncodingHeader(contentEncoding: .deflate)] : [])
71-
7264
)
7365

7466
logsUpload = FeatureUpload(featureName: "logsUpload",

Sources/Exporters/DatadogExporter/Metrics/MetricsExporter.swift

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,9 @@ import OpenTelemetrySdk
88

99
internal class MetricsExporter {
1010
let metricsDirectory = "com.otel.datadog.metrics/v1"
11-
1211
let configuration: ExporterConfiguration
13-
1412
let metricsStorage: FeatureStorage
15-
let metricsStorageQueue = DispatchQueue(label: "com.otel.datadog.metricswriter", target: .global(qos: .userInteractive))
16-
1713
let metricsUpload: FeatureUpload
18-
let metricsUploadQueue = DispatchQueue(label: "com.otel.datadog.metricsupload", target: .global(qos: .userInteractive))
1914

2015
init(config: ExporterConfiguration) throws {
2116
configuration = config
@@ -30,14 +25,12 @@ internal class MetricsExporter {
3025

3126
let spanFileWriter = FileWriter(
3227
dataFormat: dataFormat,
33-
orchestrator: filesOrchestrator,
34-
queue: metricsStorageQueue
28+
orchestrator: filesOrchestrator
3529
)
3630

3731
let spanFileReader = FileReader(
3832
dataFormat: dataFormat,
39-
orchestrator: filesOrchestrator,
40-
queue: metricsUploadQueue
33+
orchestrator: filesOrchestrator
4134
)
4235

4336
metricsStorage = FeatureStorage(writer: spanFileWriter, reader: spanFileReader)

Sources/Exporters/DatadogExporter/Persistence/FileReader.swift

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,16 +17,12 @@ internal final class FileReader {
1717
private let dataFormat: DataFormat
1818
/// Orchestrator producing reference to readable file.
1919
private let orchestrator: FilesOrchestrator
20-
/// Queue used to synchronize files access (read / write).
21-
private let queue: DispatchQueue
22-
2320
/// Files marked as read.
2421
private var filesRead: [ReadableFile] = []
2522

26-
init(dataFormat: DataFormat, orchestrator: FilesOrchestrator, queue: DispatchQueue) {
23+
init(dataFormat: DataFormat, orchestrator: FilesOrchestrator) {
2724
self.dataFormat = dataFormat
2825
self.orchestrator = orchestrator
29-
self.queue = queue
3026
}
3127

3228
// MARK: - Reading batches

Sources/Exporters/DatadogExporter/Persistence/FileWriter.swift

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,17 +13,16 @@ internal final class FileWriter {
1313
/// JSON encoder used to encode data.
1414
private let jsonEncoder: JSONEncoder
1515
/// Queue used to synchronize files access (read / write) and perform decoding on background thread.
16-
// Temporarily internal so tests can wait for the writer to finish before exiting
17-
internal let queue: DispatchQueue
16+
internal let queue = DispatchQueue(label: "com.otel.datadog.filewriter", target: .global(qos: .userInteractive))
1817

19-
init(dataFormat: DataFormat, orchestrator: FilesOrchestrator, queue: DispatchQueue) {
18+
init(dataFormat: DataFormat, orchestrator: FilesOrchestrator) {
2019
self.dataFormat = dataFormat
2120
self.orchestrator = orchestrator
22-
self.queue = queue
2321
self.jsonEncoder = JSONEncoder.default()
2422
}
2523

2624
// MARK: - Writing data
25+
2726
/// Encodes given value to JSON data and writes it to file.
2827
/// Comma is used to separate consecutive values in the file.
2928

Sources/Exporters/DatadogExporter/Spans/SpansExporter.swift

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,9 @@ import OpenTelemetrySdk
88

99
internal class SpansExporter {
1010
let tracesDirectory = "com.otel.datadog.traces/v1"
11-
1211
let configuration: ExporterConfiguration
13-
1412
let tracesStorage: FeatureStorage
15-
let tracesStorageQueue = DispatchQueue(label: "com.otel.datadog.traceswriter", target: .global(qos: .userInteractive))
16-
1713
let tracesUpload: FeatureUpload
18-
let tracesUploadQueue = DispatchQueue(label: "com.otel.datadog.tracesupload", target: .global(qos: .userInteractive))
1914

2015
init(config: ExporterConfiguration) throws {
2116
self.configuration = config
@@ -30,14 +25,12 @@ internal class SpansExporter {
3025

3126
let spanFileWriter = FileWriter(
3227
dataFormat: dataFormat,
33-
orchestrator: filesOrchestrator,
34-
queue: tracesStorageQueue
28+
orchestrator: filesOrchestrator
3529
)
3630

3731
let spanFileReader = FileReader(
3832
dataFormat: dataFormat,
39-
orchestrator: filesOrchestrator,
40-
queue: tracesUploadQueue
33+
orchestrator: filesOrchestrator
4134
)
4235

4336
tracesStorage = FeatureStorage(writer: spanFileWriter, reader: spanFileReader)

Sources/Exporters/DatadogExporter/Upload/DataUploadWorker.swift

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ internal protocol DataUploadWorkerType {
1313

1414
internal class DataUploadWorker: DataUploadWorkerType {
1515
/// Queue to execute uploads.
16-
private let queue: DispatchQueue
16+
internal let queue = DispatchQueue(label: "com.otel.datadog.datauploadworker", target: .global(qos: .utility))
1717
/// File reader providing data to upload.
1818
private let fileReader: FileReader
1919
/// Data uploader sending data to server.
@@ -31,14 +31,12 @@ internal class DataUploadWorker: DataUploadWorkerType {
3131
private var uploadWork: DispatchWorkItem?
3232

3333
init(
34-
queue: DispatchQueue,
3534
fileReader: FileReader,
3635
dataUploader: DataUploaderType,
3736
uploadCondition: @escaping () -> Bool,
3837
delay: Delay,
3938
featureName: String
4039
) {
41-
self.queue = queue
4240
self.fileReader = fileReader
4341
self.uploadCondition = uploadCondition
4442
self.dataUploader = dataUploader

Sources/Exporters/DatadogExporter/Utils/Feature.swift

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,13 @@ internal struct FeatureUpload {
3636
performance: PerformancePreset,
3737
uploadCondition: @escaping () -> Bool
3838
) {
39-
let uploadQueue = DispatchQueue(
40-
label: "com.datadoghq.ios-sdk-\(featureName)-upload",
41-
target: .global(qos: .utility)
42-
)
43-
4439
let dataUploader = DataUploader(
4540
httpClient: HTTPClient(),
4641
requestBuilder: requestBuilder
4742
)
4843

4944
self.init(
5045
uploader: DataUploadWorker(
51-
queue: uploadQueue,
5246
fileReader: storage.reader,
5347
dataUploader: dataUploader,
5448
uploadCondition: uploadCondition,

Sources/Exporters/Persistence/Export/DataExportWorker.swift

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ internal protocol DataExportWorkerProtocol {
1818

1919
internal class DataExportWorker: DataExportWorkerProtocol {
2020
/// Queue to execute exports.
21-
private let queue: DispatchQueue
21+
internal let queue = DispatchQueue(label: "com.otel.datadog.dataExportWorker", target: .global(qos: .utility))
2222
/// File reader providing data to export.
2323
private let fileReader: FileReader
2424
/// Data exporter sending data to server.
@@ -33,13 +33,11 @@ internal class DataExportWorker: DataExportWorkerProtocol {
3333
private var exportWork: DispatchWorkItem?
3434

3535
init(
36-
queue: DispatchQueue,
3736
fileReader: FileReader,
3837
dataExporter: DataExporter,
3938
exportCondition: @escaping () -> Bool,
4039
delay: Delay
4140
) {
42-
self.queue = queue
4341
self.fileReader = fileReader
4442
self.exportCondition = exportCondition
4543
self.dataExporter = dataExporter
@@ -52,7 +50,7 @@ internal class DataExportWorker: DataExportWorkerProtocol {
5250

5351
let isSystemReady = self.exportCondition()
5452
let nextBatch = isSystemReady ? self.fileReader.readNextBatch() : nil
55-
if let batch = nextBatch {
53+
if let batch = nextBatch {
5654
// Export batch
5755
let exportStatus = self.dataExporter.export(data: batch.data)
5856

0 commit comments

Comments
 (0)