Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 19 additions & 7 deletions Datadog/Datadog.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1095,8 +1095,6 @@
D22743E729DEB953001A7EF9 /* UIApplicationSwizzlerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61410166251A661D00E3C2D9 /* UIApplicationSwizzlerTests.swift */; };
D22743EB29DEC9E6001A7EF9 /* Casting+RUM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61411B0F24EC15AC0012EAB2 /* Casting+RUM.swift */; };
D22743EC29DEC9E6001A7EF9 /* Casting+RUM.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61411B0F24EC15AC0012EAB2 /* Casting+RUM.swift */; };
D22789362D64A0D7007E9DB0 /* UploadQualityMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22789352D64A0D3007E9DB0 /* UploadQualityMetric.swift */; };
D22789372D64A0D7007E9DB0 /* UploadQualityMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22789352D64A0D3007E9DB0 /* UploadQualityMetric.swift */; };
D227A0A42C7622EA00C83324 /* BenchmarkProfiler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D227A0A32C7622EA00C83324 /* BenchmarkProfiler.swift */; };
D227A0A52C7622EA00C83324 /* BenchmarkProfiler.swift in Sources */ = {isa = PBXBuildFile; fileRef = D227A0A32C7622EA00C83324 /* BenchmarkProfiler.swift */; };
D22F06D729DAFD500026CC3C /* FixedWidthInteger+Convenience.swift in Sources */ = {isa = PBXBuildFile; fileRef = D22F06D529DAFD500026CC3C /* FixedWidthInteger+Convenience.swift */; };
Expand Down Expand Up @@ -1150,6 +1148,8 @@
D23354FD2A42E32000AFCAE2 /* InternalExtended.swift in Sources */ = {isa = PBXBuildFile; fileRef = D23354FB2A42E32000AFCAE2 /* InternalExtended.swift */; };
D234613128B7713000055D4C /* FeatureContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D234613028B7712F00055D4C /* FeatureContextTests.swift */; };
D234613228B7713000055D4C /* FeatureContextTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D234613028B7712F00055D4C /* FeatureContextTests.swift */; };
D2393EF82DB2555F006B3C75 /* UploadCycleMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2393EF72DB2555F006B3C75 /* UploadCycleMetric.swift */; };
D2393EF92DB2555F006B3C75 /* UploadCycleMetric.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2393EF72DB2555F006B3C75 /* UploadCycleMetric.swift */; };
D23F8E5229DDCD28001CFAE8 /* UIViewControllerHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61F3CDA2251118FB00C816E5 /* UIViewControllerHandler.swift */; };
D23F8E5329DDCD28001CFAE8 /* RUMCommand.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61C3E63A24BF1A4B008053F2 /* RUMCommand.swift */; };
D23F8E5429DDCD28001CFAE8 /* ValuePublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = 611529A425E3DD51004F740E /* ValuePublisher.swift */; };
Expand Down Expand Up @@ -1447,6 +1447,10 @@
D29A9FDB29DDC6D1005C54A4 /* RUMEventFileOutputTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61FF282F24BC5E2D000B3D9B /* RUMEventFileOutputTests.swift */; };
D29CDD3228211A2200F7DAA5 /* TLVBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29CDD3128211A2200F7DAA5 /* TLVBlock.swift */; };
D29CDD3328211A2200F7DAA5 /* TLVBlock.swift in Sources */ = {isa = PBXBuildFile; fileRef = D29CDD3128211A2200F7DAA5 /* TLVBlock.swift */; };
D2A133912DAFA8B200D84D3C /* MetricTelemetryAggregator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A133902DAFA8B200D84D3C /* MetricTelemetryAggregator.swift */; };
D2A133922DAFA8B200D84D3C /* MetricTelemetryAggregator.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A133902DAFA8B200D84D3C /* MetricTelemetryAggregator.swift */; };
D2A133942DB1074000D84D3C /* MetricTelemetryAggregatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A133932DB1074000D84D3C /* MetricTelemetryAggregatorTests.swift */; };
D2A133952DB1074000D84D3C /* MetricTelemetryAggregatorTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A133932DB1074000D84D3C /* MetricTelemetryAggregatorTests.swift */; };
D2A1EE23287740B500D28DFB /* ApplicationStatePublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A1EE22287740B500D28DFB /* ApplicationStatePublisher.swift */; };
D2A1EE24287740B500D28DFB /* ApplicationStatePublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A1EE22287740B500D28DFB /* ApplicationStatePublisher.swift */; };
D2A1EE32287DA51900D28DFB /* UserInfoPublisher.swift in Sources */ = {isa = PBXBuildFile; fileRef = D2A1EE31287DA51900D28DFB /* UserInfoPublisher.swift */; };
Expand Down Expand Up @@ -3117,7 +3121,6 @@
D21C26ED28AFB65B005DD405 /* ErrorMessageReceiverTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorMessageReceiverTests.swift; sourceTree = "<group>"; };
D22442C42CA301DA002E71E4 /* UIColor+SessionReplay.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIColor+SessionReplay.swift"; sourceTree = "<group>"; };
D224430C29E95D6600274EC7 /* CrashReportReceiverTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CrashReportReceiverTests.swift; sourceTree = "<group>"; };
D22789352D64A0D3007E9DB0 /* UploadQualityMetric.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadQualityMetric.swift; sourceTree = "<group>"; };
D227A0A32C7622EA00C83324 /* BenchmarkProfiler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BenchmarkProfiler.swift; sourceTree = "<group>"; };
D22C1F5B271484B400922024 /* LogEventMapper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LogEventMapper.swift; sourceTree = "<group>"; };
D22F06D529DAFD500026CC3C /* FixedWidthInteger+Convenience.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = "FixedWidthInteger+Convenience.swift"; sourceTree = "<group>"; };
Expand Down Expand Up @@ -3162,6 +3165,7 @@
D23354FB2A42E32000AFCAE2 /* InternalExtended.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalExtended.swift; sourceTree = "<group>"; };
D234613028B7712F00055D4C /* FeatureContextTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FeatureContextTests.swift; sourceTree = "<group>"; };
D236BE2729520FED00676E67 /* CrashReportReceiver.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CrashReportReceiver.swift; sourceTree = "<group>"; };
D2393EF72DB2555F006B3C75 /* UploadCycleMetric.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UploadCycleMetric.swift; sourceTree = "<group>"; };
D23F8E9929DDCD28001CFAE8 /* DatadogRUM.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = DatadogRUM.framework; sourceTree = BUILT_PRODUCTS_DIR; };
D23F8ECD29DDCD38001CFAE8 /* DatadogRUMTests tvOS.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "DatadogRUMTests tvOS.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
D240684D27CE6C9E00C04F44 /* Example tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Example tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -3236,6 +3240,8 @@
D29A9FCB29DDBCC5005C54A4 /* DDTAssertValidRUMUUID.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DDTAssertValidRUMUUID.swift; sourceTree = "<group>"; };
D29CDD3128211A2200F7DAA5 /* TLVBlock.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TLVBlock.swift; sourceTree = "<group>"; };
D29D5A4C273BF8B400A687C1 /* SwiftUIActionModifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SwiftUIActionModifier.swift; sourceTree = "<group>"; };
D2A133902DAFA8B200D84D3C /* MetricTelemetryAggregator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricTelemetryAggregator.swift; sourceTree = "<group>"; };
D2A133932DB1074000D84D3C /* MetricTelemetryAggregatorTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MetricTelemetryAggregatorTests.swift; sourceTree = "<group>"; };
D2A1EE22287740B500D28DFB /* ApplicationStatePublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ApplicationStatePublisher.swift; sourceTree = "<group>"; };
D2A1EE31287DA51900D28DFB /* UserInfoPublisher.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UserInfoPublisher.swift; sourceTree = "<group>"; };
D2A1EE34287EB8DB00D28DFB /* ServerOffsetPublisherTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ServerOffsetPublisherTests.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -5395,8 +5401,9 @@
6174D6082BFDDD1E00EC7469 /* SDKMetrics */ = {
isa = PBXGroup;
children = (
D2E6E8FA2D8039B200FF1398 /* BenchmarkURLSessionTaskDelegate.swift */,
614396712A67D74F00197326 /* BatchMetrics.swift */,
D2393EF72DB2555F006B3C75 /* UploadCycleMetric.swift */,
D2E6E8FA2D8039B200FF1398 /* BenchmarkURLSessionTaskDelegate.swift */,
);
path = SDKMetrics;
sourceTree = "<group>";
Expand All @@ -5414,7 +5421,6 @@
children = (
6174D60B2BFDDEDF00EC7469 /* SDKMetricFields.swift */,
A7FA98CD2BA1A6930018D6B5 /* MethodCalledMetric.swift */,
D22789352D64A0D3007E9DB0 /* UploadQualityMetric.swift */,
);
path = SDKMetrics;
sourceTree = "<group>";
Expand All @@ -5427,6 +5433,7 @@
615E2B8D2D39444300D85243 /* ViewEndedController.swift */,
615E2B942D425F5600D85243 /* ViewEndedMetric.swift */,
11030D752D96EC5300732D5F /* ViewHitchesMetric.swift */,
D2A133902DAFA8B200D84D3C /* MetricTelemetryAggregator.swift */,
);
path = SDKMetrics;
sourceTree = "<group>";
Expand All @@ -5436,6 +5443,7 @@
children = (
6174D6192BFE449300EC7469 /* SessionEndedMetricTests.swift */,
61DCC8462C05CD0000CB59E5 /* SessionEndedMetricControllerTests.swift */,
D2A133932DB1074000D84D3C /* MetricTelemetryAggregatorTests.swift */,
);
path = SDKMetrics;
sourceTree = "<group>";
Expand Down Expand Up @@ -8439,6 +8447,7 @@
617699182A860D9D0030022B /* HTTPClient.swift in Sources */,
D21C26C528A3B49C005DD405 /* FeatureStorage.swift in Sources */,
61133BD42423979B00786299 /* FileReader.swift in Sources */,
D2393EF82DB2555F006B3C75 /* UploadCycleMetric.swift in Sources */,
D29294E0291D5ED100F8EFF9 /* ApplicationVersionPublisher.swift in Sources */,
61D3E0D9277B23F1008BE766 /* KronosNTPProtocol.swift in Sources */,
61D3E0DA277B23F1008BE766 /* KronosTimeFreeze.swift in Sources */,
Expand Down Expand Up @@ -8942,7 +8951,6 @@
D2EBEE1F29BA160F00B15732 /* HTTPHeadersReader.swift in Sources */,
D24EC3D92DD1F117007A7E8F /* SessionReplayCoreContext.swift in Sources */,
E2AA55E72C32C6D9002FEF28 /* ApplicationNotifications.swift in Sources */,
D22789372D64A0D7007E9DB0 /* UploadQualityMetric.swift in Sources */,
D263BCAF29DAFFEB00FA0E21 /* PerformancePresetOverride.swift in Sources */,
D23039E7298D5236001A1FA3 /* NetworkConnectionInfo.swift in Sources */,
D23039E9298D5236001A1FA3 /* TrackingConsent.swift in Sources */,
Expand Down Expand Up @@ -9073,6 +9081,7 @@
D23F8E5929DDCD28001CFAE8 /* WebViewEventReceiver.swift in Sources */,
265496D32D81C5B10094B6E2 /* RUMAccount.swift in Sources */,
D253EE972B988CA90010B589 /* ViewCache.swift in Sources */,
D2A133922DAFA8B200D84D3C /* MetricTelemetryAggregator.swift in Sources */,
D23F8E5A29DDCD28001CFAE8 /* RUMResourceScope.swift in Sources */,
D23F8E5C29DDCD28001CFAE8 /* RUMApplicationScope.swift in Sources */,
3CFF4F982C09E64C006F191D /* WatchdogTerminationMonitor.swift in Sources */,
Expand Down Expand Up @@ -9212,6 +9221,7 @@
D23F8EB329DDCD38001CFAE8 /* ErrorMessageReceiverTests.swift in Sources */,
61C713C12A3C9DAD00FA735A /* RequestBuilderTests.swift in Sources */,
D23F8EB429DDCD38001CFAE8 /* RUMApplicationScopeTests.swift in Sources */,
D2A133942DB1074000D84D3C /* MetricTelemetryAggregatorTests.swift in Sources */,
6105C5152D0C584F00C4C5EE /* INVMetricTests.swift in Sources */,
D23F8EB629DDCD38001CFAE8 /* RUMViewsHandlerTests.swift in Sources */,
61C713CB2A3DC22700FA735A /* RUMTests.swift in Sources */,
Expand Down Expand Up @@ -9520,6 +9530,7 @@
D29A9F6229DD85BB005C54A4 /* WebViewEventReceiver.swift in Sources */,
265496D42D81C5B10094B6E2 /* RUMAccount.swift in Sources */,
D253EE962B988CA90010B589 /* ViewCache.swift in Sources */,
D2A133912DAFA8B200D84D3C /* MetricTelemetryAggregator.swift in Sources */,
D29A9F8429DD85BB005C54A4 /* RUMResourceScope.swift in Sources */,
D29A9F7329DD85BB005C54A4 /* RUMApplicationScope.swift in Sources */,
3CFF4F972C09E64C006F191D /* WatchdogTerminationMonitor.swift in Sources */,
Expand Down Expand Up @@ -9659,6 +9670,7 @@
D29A9FBB29DDB483005C54A4 /* ErrorMessageReceiverTests.swift in Sources */,
61C713C02A3C9DAD00FA735A /* RequestBuilderTests.swift in Sources */,
D29A9F9F29DDB483005C54A4 /* RUMApplicationScopeTests.swift in Sources */,
D2A133952DB1074000D84D3C /* MetricTelemetryAggregatorTests.swift in Sources */,
6105C5142D0C584F00C4C5EE /* INVMetricTests.swift in Sources */,
D29A9FAA29DDB483005C54A4 /* RUMViewsHandlerTests.swift in Sources */,
61C713CA2A3DC22700FA735A /* RUMTests.swift in Sources */,
Expand Down Expand Up @@ -9820,6 +9832,7 @@
617699192A860D9D0030022B /* HTTPClient.swift in Sources */,
D2FB1255292E0E99005B13F8 /* TrackingConsentPublisher.swift in Sources */,
D26C49C0288982DA00802B2D /* FeatureUpload.swift in Sources */,
D2393EF92DB2555F006B3C75 /* UploadCycleMetric.swift in Sources */,
D2CB6E8127C50EAE00A62B57 /* DataUploader.swift in Sources */,
D2CB6E8827C50EAE00A62B57 /* FileReader.swift in Sources */,
D2CB6E8D27C50EAE00A62B57 /* KronosNTPProtocol.swift in Sources */,
Expand Down Expand Up @@ -10053,7 +10066,6 @@
D2EBEE2D29BA161100B15732 /* HTTPHeadersReader.swift in Sources */,
D24EC3DA2DD1F117007A7E8F /* SessionReplayCoreContext.swift in Sources */,
E2AA55E82C32C6D9002FEF28 /* ApplicationNotifications.swift in Sources */,
D22789362D64A0D7007E9DB0 /* UploadQualityMetric.swift in Sources */,
D263BCB029DAFFEB00FA0E21 /* PerformancePresetOverride.swift in Sources */,
D2DA2359298D57AA00C6C7E6 /* NetworkConnectionInfo.swift in Sources */,
D2DA235A298D57AA00C6C7E6 /* TrackingConsent.swift in Sources */,
Expand Down
3 changes: 3 additions & 0 deletions DatadogCore/Sources/Core/DatadogCore.swift
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,9 @@ internal final class DatadogCore {
/// - encryption: The on-disk data encryption.
/// - contextProvider: The core context provider.
/// - applicationVersion: The application version.
/// - maxBatchesPerUpload: Number of batch to process during an upload cycle.
/// - backgroundTasksEnabled: Enables upload background task.
/// - isRunFromExtension: Set `true` when the SDK is initialised from an extension.
init(
directory: CoreDirectory,
dateProvider: DateProvider,
Expand Down
5 changes: 2 additions & 3 deletions DatadogCore/Sources/Core/MessageBus.swift
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,8 @@ internal final class MessageBus {
/// - fallback: The fallback closure to call when the message could not be
/// processed by any Features on the bus.
func send(message: FeatureMessage, else fallback: @escaping () -> Void = {}) {
if // Configuration Telemetry Message
case .telemetry(let telemetry) = message,
case .configuration(let configuration) = telemetry {
if case .telemetry(.configuration(let configuration) ) = message {
// Configuration Telemetry Message
return save(configuration: configuration)
}

Expand Down
48 changes: 35 additions & 13 deletions DatadogCore/Sources/Core/Storage/FilesOrchestrator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,10 +60,6 @@ internal class FilesOrchestrator: FilesOrchestratorType {
/// An extra information to include in metrics or `nil` if metrics should not be reported for this orchestrator.
let metricsData: MetricsData?

/// Tracks number of pending batches in the track's directory
@ReadWriteLock
private var pendingBatches: Int = 0

var trackName: String {
metricsData?.trackName ?? "Unknown"
}
Expand Down Expand Up @@ -133,9 +129,8 @@ internal class FilesOrchestrator: FilesOrchestratorType {
lastWritableFileObjectsCount = 1
lastWritableFileApproximatedSize = writeSize
lastWritableFileLastWriteDate = dateProvider.now

// Increment pending batches for telemetry
_pendingBatches.mutate { $0 += 1 }
// Increment pending batches in telemetry
incrementPendingBatches()
return newFile
}

Expand Down Expand Up @@ -193,7 +188,7 @@ internal class FilesOrchestrator: FilesOrchestratorType {
let files = try directory.files()

// Reset pending batches for telemetry
pendingBatches = files.count
recordPendingBatches(count: files.count)

let filesFromOldest = try files
.compactMap { try deleteFileIfItsObsolete(file: $0, fileCreationDate: fileCreationDateFrom(fileName: $0.name)) }
Expand Down Expand Up @@ -228,7 +223,7 @@ internal class FilesOrchestrator: FilesOrchestratorType {
#endif
try readableFile.delete()
// Decrement pending batches at each batch deletion
_pendingBatches.mutate { $0 -= 1 }
incrementPendingBatches(by: -1)
sendBatchDeletedMetric(batchFile: readableFile, deletionReason: deletionReason)
} catch {
telemetry.error("Failed to delete file", error: error)
Expand Down Expand Up @@ -259,7 +254,7 @@ internal class FilesOrchestrator: FilesOrchestratorType {
let fileWithSize = filesWithSizeSortedByCreationDate.removeFirst()
try fileWithSize.file.delete()
// Decrement pending batches at each batch deletion
_pendingBatches.mutate { $0 -= 1 }
incrementPendingBatches(by: -1)
sendBatchDeletedMetric(batchFile: fileWithSize.file, deletionReason: .purged)
sizeFreed += fileWithSize.size
}
Expand All @@ -272,7 +267,7 @@ internal class FilesOrchestrator: FilesOrchestratorType {
if fileAge > performance.maxFileAgeForRead {
try file.delete()
// Decrement pending batches at each batch deletion
_pendingBatches.mutate { $0 -= 1 }
incrementPendingBatches(by: -1)
sendBatchDeletedMetric(batchFile: file, deletionReason: .obsolete)
return nil
} else {
Expand Down Expand Up @@ -309,13 +304,40 @@ internal class FilesOrchestrator: FilesOrchestratorType {
BatchDeletedMetric.batchAgeKey: batchAge.toMilliseconds,
BatchDeletedMetric.batchRemovalReasonKey: deletionReason.toString(),
BatchDeletedMetric.inBackgroundKey: false,
BatchDeletedMetric.backgroundTasksEnabled: metricsData.backgroundTasksEnabled,
BatchDeletedMetric.pendingBatches: pendingBatches
BatchDeletedMetric.backgroundTasksEnabled: metricsData.backgroundTasksEnabled
],
sampleRate: BatchDeletedMetric.sampleRate
)
}

private func incrementPendingBatches(by increment: Double = 1) {
guard let metricsData = metricsData else {
return
}

telemetry.increment(
metric: PendingBatchMetric.typeValue,
by: increment,
cardinalities: [
BatchMetric.trackKey: .string(metricsData.trackName)
]
)
}

private func recordPendingBatches(count: Int) {
guard let metricsData = metricsData else {
return
}

telemetry.record(
metric: PendingBatchMetric.typeValue,
value: count,
cardinalities: [
BatchMetric.trackKey: .string(metricsData.trackName)
]
)
}

/// Sends "Batch Closed" telemetry log.
/// - Parameters:
/// - fileName: The name of the batch that was closed.
Expand Down
Loading