From a7dc0bffe3ebe363c6082fe063f10d776b7f61ea Mon Sep 17 00:00:00 2001 From: Jan Calanog Date: Fri, 14 Nov 2025 13:03:06 +0100 Subject: [PATCH] Fix metrics and traces for DocsSync --- .../Synchronization/AwsS3SyncApplyStrategy.cs | 46 ++++++++----------- 1 file changed, 20 insertions(+), 26 deletions(-) diff --git a/src/services/Elastic.Documentation.Assembler/Deploying/Synchronization/AwsS3SyncApplyStrategy.cs b/src/services/Elastic.Documentation.Assembler/Deploying/Synchronization/AwsS3SyncApplyStrategy.cs index 298c9fb82..2b334c385 100644 --- a/src/services/Elastic.Documentation.Assembler/Deploying/Synchronization/AwsS3SyncApplyStrategy.cs +++ b/src/services/Elastic.Documentation.Assembler/Deploying/Synchronization/AwsS3SyncApplyStrategy.cs @@ -94,38 +94,28 @@ public async Task Apply(SyncPlan plan, Cancel ctx = default) var addCount = plan.AddRequests.Count; var updateCount = plan.UpdateRequests.Count; var deleteCount = plan.DeleteRequests.Count; + var skipCount = plan.SkipRequests.Count; var totalFiles = addCount + updateCount + deleteCount; // Add aggregate metrics to span _ = applyActivity?.SetTag("docs.sync.files.added", addCount); _ = applyActivity?.SetTag("docs.sync.files.updated", updateCount); _ = applyActivity?.SetTag("docs.sync.files.deleted", deleteCount); + _ = applyActivity?.SetTag("docs.sync.files.skipped", skipCount); _ = applyActivity?.SetTag("docs.sync.files.total", totalFiles); - // Record deployment-level metrics + // Record deployment-level metrics (always emit, even if 0) FilesPerDeploymentHistogram.Record(totalFiles); - if (addCount > 0) - { - FilesPerDeploymentHistogram.Record(addCount, - [new("operation", "add")]); - } - - if (updateCount > 0) - { - FilesPerDeploymentHistogram.Record(updateCount, - [new("operation", "update")]); - } - - if (deleteCount > 0) - { - FilesPerDeploymentHistogram.Record(deleteCount, - [new("operation", "delete")]); - } + // Always record per-operation counts (even if 0) so metrics show consistent data + FilesPerDeploymentHistogram.Record(addCount, [new("operation", "add")]); + FilesPerDeploymentHistogram.Record(updateCount, [new("operation", "update")]); + FilesPerDeploymentHistogram.Record(deleteCount, [new("operation", "delete")]); + FilesPerDeploymentHistogram.Record(skipCount, [new("operation", "skip")]); _logger.LogInformation( - "Deployment sync: {TotalFiles} files ({AddCount} added, {UpdateCount} updated, {DeleteCount} deleted) in {Environment}", - totalFiles, addCount, updateCount, deleteCount, context.Environment.Name); + "Deployment sync: {TotalFiles} files ({AddCount} added, {UpdateCount} updated, {DeleteCount} deleted, {SkipCount} skipped) in {Environment}", + totalFiles, addCount, updateCount, deleteCount, skipCount, context.Environment.Name); await Upload(plan, ctx); await Delete(plan, ctx); @@ -138,11 +128,13 @@ public async Task Apply(SyncPlan plan, Cancel ctx = default) private async Task Upload(SyncPlan plan, Cancel ctx) { var uploadRequests = plan.AddRequests.Cast().Concat(plan.UpdateRequests).ToList(); + + // Always create activity span (even if 0 files) for consistent tracing + using var uploadActivity = ApplyStrategyActivitySource.StartActivity("upload files", ActivityKind.Client); + _ = uploadActivity?.SetTag("docs.sync.upload.count", uploadRequests.Count); + if (uploadRequests.Count > 0) { - using var uploadActivity = ApplyStrategyActivitySource.StartActivity("upload files", ActivityKind.Client); - _ = uploadActivity?.SetTag("docs.sync.upload.count", uploadRequests.Count); - var addCount = plan.AddRequests.Count; var updateCount = plan.UpdateRequests.Count; @@ -216,11 +208,13 @@ private async Task Delete(SyncPlan plan, Cancel ctx) { var deleteCount = 0; var deleteRequests = plan.DeleteRequests.ToList(); + + // Always create activity span (even if 0 files) for consistent tracing + using var deleteActivity = ApplyStrategyActivitySource.StartActivity("delete files", ActivityKind.Client); + _ = deleteActivity?.SetTag("docs.sync.delete.count", deleteRequests.Count); + if (deleteRequests.Count > 0) { - using var deleteActivity = ApplyStrategyActivitySource.StartActivity("delete files", ActivityKind.Client); - _ = deleteActivity?.SetTag("docs.sync.delete.count", deleteRequests.Count); - _logger.LogInformation("Starting to delete {Count} files from S3 bucket {BucketName}", deleteRequests.Count, bucketName); // Emit file-level metrics (low cardinality) and logs for each file