@@ -94,38 +94,28 @@ public async Task Apply(SyncPlan plan, Cancel ctx = default)
9494 var addCount = plan . AddRequests . Count ;
9595 var updateCount = plan . UpdateRequests . Count ;
9696 var deleteCount = plan . DeleteRequests . Count ;
97+ var skipCount = plan . SkipRequests . Count ;
9798 var totalFiles = addCount + updateCount + deleteCount ;
9899
99100 // Add aggregate metrics to span
100101 _ = applyActivity ? . SetTag ( "docs.sync.files.added" , addCount ) ;
101102 _ = applyActivity ? . SetTag ( "docs.sync.files.updated" , updateCount ) ;
102103 _ = applyActivity ? . SetTag ( "docs.sync.files.deleted" , deleteCount ) ;
104+ _ = applyActivity ? . SetTag ( "docs.sync.files.skipped" , skipCount ) ;
103105 _ = applyActivity ? . SetTag ( "docs.sync.files.total" , totalFiles ) ;
104106
105- // Record deployment-level metrics
107+ // Record deployment-level metrics (always emit, even if 0)
106108 FilesPerDeploymentHistogram . Record ( totalFiles ) ;
107109
108- if ( addCount > 0 )
109- {
110- FilesPerDeploymentHistogram . Record ( addCount ,
111- [ new ( "operation" , "add" ) ] ) ;
112- }
113-
114- if ( updateCount > 0 )
115- {
116- FilesPerDeploymentHistogram . Record ( updateCount ,
117- [ new ( "operation" , "update" ) ] ) ;
118- }
119-
120- if ( deleteCount > 0 )
121- {
122- FilesPerDeploymentHistogram . Record ( deleteCount ,
123- [ new ( "operation" , "delete" ) ] ) ;
124- }
110+ // Always record per-operation counts (even if 0) so metrics show consistent data
111+ FilesPerDeploymentHistogram . Record ( addCount , [ new ( "operation" , "add" ) ] ) ;
112+ FilesPerDeploymentHistogram . Record ( updateCount , [ new ( "operation" , "update" ) ] ) ;
113+ FilesPerDeploymentHistogram . Record ( deleteCount , [ new ( "operation" , "delete" ) ] ) ;
114+ FilesPerDeploymentHistogram . Record ( skipCount , [ new ( "operation" , "skip" ) ] ) ;
125115
126116 _logger . LogInformation (
127- "Deployment sync: {TotalFiles} files ({AddCount} added, {UpdateCount} updated, {DeleteCount} deleted) in {Environment}" ,
128- totalFiles , addCount , updateCount , deleteCount , context . Environment . Name ) ;
117+ "Deployment sync: {TotalFiles} files ({AddCount} added, {UpdateCount} updated, {DeleteCount} deleted, {SkipCount} skipped ) in {Environment}" ,
118+ totalFiles , addCount , updateCount , deleteCount , skipCount , context . Environment . Name ) ;
129119
130120 await Upload ( plan , ctx ) ;
131121 await Delete ( plan , ctx ) ;
@@ -138,11 +128,13 @@ public async Task Apply(SyncPlan plan, Cancel ctx = default)
138128 private async Task Upload ( SyncPlan plan , Cancel ctx )
139129 {
140130 var uploadRequests = plan . AddRequests . Cast < UploadRequest > ( ) . Concat ( plan . UpdateRequests ) . ToList ( ) ;
131+
132+ // Always create activity span (even if 0 files) for consistent tracing
133+ using var uploadActivity = ApplyStrategyActivitySource . StartActivity ( "upload files" , ActivityKind . Client ) ;
134+ _ = uploadActivity ? . SetTag ( "docs.sync.upload.count" , uploadRequests . Count ) ;
135+
141136 if ( uploadRequests . Count > 0 )
142137 {
143- using var uploadActivity = ApplyStrategyActivitySource . StartActivity ( "upload files" , ActivityKind . Client ) ;
144- _ = uploadActivity ? . SetTag ( "docs.sync.upload.count" , uploadRequests . Count ) ;
145-
146138 var addCount = plan . AddRequests . Count ;
147139 var updateCount = plan . UpdateRequests . Count ;
148140
@@ -216,11 +208,13 @@ private async Task Delete(SyncPlan plan, Cancel ctx)
216208 {
217209 var deleteCount = 0 ;
218210 var deleteRequests = plan . DeleteRequests . ToList ( ) ;
211+
212+ // Always create activity span (even if 0 files) for consistent tracing
213+ using var deleteActivity = ApplyStrategyActivitySource . StartActivity ( "delete files" , ActivityKind . Client ) ;
214+ _ = deleteActivity ? . SetTag ( "docs.sync.delete.count" , deleteRequests . Count ) ;
215+
219216 if ( deleteRequests . Count > 0 )
220217 {
221- using var deleteActivity = ApplyStrategyActivitySource . StartActivity ( "delete files" , ActivityKind . Client ) ;
222- _ = deleteActivity ? . SetTag ( "docs.sync.delete.count" , deleteRequests . Count ) ;
223-
224218 _logger . LogInformation ( "Starting to delete {Count} files from S3 bucket {BucketName}" , deleteRequests . Count , bucketName ) ;
225219
226220 // Emit file-level metrics (low cardinality) and logs for each file
0 commit comments