@@ -33,6 +33,7 @@ import (
3333 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/controller/direct"
3434 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/controller/direct/directbase"
3535 "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/controller/direct/registry"
36+ "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/structuredreporting"
3637)
3738
3839const ctrlName = "logmetric-controller"
@@ -249,18 +250,23 @@ func (a *logMetricAdapter) Update(ctx context.Context, updateOp *directbase.Upda
249250 latest := a .actual
250251
251252 if a .hasChanges (ctx , u ) {
253+ report := & structuredreporting.Diff {Object : updateOp .GetUnstructured ()}
254+
252255 update := new (api.LogMetric )
253256 * update = * a .actual
254257
255258 if direct .ValueOf (a .desired .Spec .Description ) != a .actual .Description {
259+ report .AddField ("description" , a .actual .Description , direct .ValueOf (a .desired .Spec .Description ))
256260 update .Description = direct .ValueOf (a .desired .Spec .Description )
257261 }
258262 if direct .ValueOf (a .desired .Spec .Disabled ) != a .actual .Disabled {
263+ report .AddField ("disabled" , a .actual .Disabled , direct .ValueOf (a .desired .Spec .Disabled ))
259264 update .Disabled = direct .ValueOf (a .desired .Spec .Disabled )
260265 }
261266 if a .desired .Spec .Filter != a .actual .Filter {
262267 // todo acpana: revisit UX, err out if filter of desired is empty
263268 if a .desired .Spec .Filter != "" {
269+ report .AddField ("filter" , a .actual .Filter , a .desired .Spec .Filter )
264270 update .Filter = a .desired .Spec .Filter
265271 } else {
266272 // filter is a REQUIRED field
@@ -270,24 +276,31 @@ func (a *logMetricAdapter) Update(ctx context.Context, updateOp *directbase.Upda
270276
271277 desired := convertKCCtoAPI (& a .desired .Spec )
272278 if ! compareMetricDescriptors (desired .MetricDescriptor , a .actual .MetricDescriptor ) {
279+ report .AddField ("metric_descriptor" , a .actual .MetricDescriptor , desired .MetricDescriptor )
273280 update .MetricDescriptor = desired .MetricDescriptor
274281 }
275282
276283 if ! reflect .DeepEqual (a .desired .Spec .LabelExtractors , a .actual .LabelExtractors ) {
284+ report .AddField ("label_extractors" , a .actual .LabelExtractors , a .desired .Spec .LabelExtractors )
277285 update .LabelExtractors = a .desired .Spec .LabelExtractors
278286 }
279287
280288 if ! compareBucketOptions (a .desired .Spec .BucketOptions , a .actual .BucketOptions ) {
289+ report .AddField ("bucket_options" , a .actual .BucketOptions , a .desired .Spec .BucketOptions )
281290 update .BucketOptions = convertKCCtoAPIForBucketOptions (a .desired .Spec .BucketOptions )
282291 }
283292
284293 if direct .ValueOf (a .desired .Spec .ValueExtractor ) != a .actual .ValueExtractor {
294+ report .AddField ("value_extractor" , a .actual .ValueExtractor , direct .ValueOf (a .desired .Spec .ValueExtractor ))
285295 update .ValueExtractor = direct .ValueOf (a .desired .Spec .ValueExtractor )
286296 }
287297 if a .desired .Spec .LoggingLogBucketRef != nil && a .desired .Spec .LoggingLogBucketRef .External != a .actual .BucketName {
298+ report .AddField ("bucket_name" , a .actual .BucketName , a .desired .Spec .LoggingLogBucketRef .External )
288299 update .BucketName = a .desired .Spec .LoggingLogBucketRef .External
289300 }
290301
302+ structuredreporting .ReportDiff (ctx , report )
303+
291304 diffs , err := ListFieldDiffs (a .actual , update )
292305 if err != nil {
293306 // Don't return an error as we're only logging
0 commit comments