@@ -2,7 +2,6 @@ package transformer
22
33import (
44 "fmt"
5- "reflect"
65
76 "github.com/google/uuid"
87 "github.com/samber/lo"
@@ -15,6 +14,8 @@ import (
1514 ptrans "github.com/rudderlabs/rudder-server/processor/transformer"
1615 "github.com/rudderlabs/rudder-server/utils/misc"
1716 "github.com/rudderlabs/rudder-server/utils/types"
17+
18+ "github.com/google/go-cmp/cmp"
1819)
1920
2021func (t * Transformer ) CompareAndLog (
@@ -36,7 +37,7 @@ func (t *Transformer) CompareAndLog(
3637
3738 t .stats .comparisionTime .RecordDuration ()()
3839
39- differingEvents := t .differingEvents (events , pResponse , wResponse , eventsByMessageID )
40+ differingEvents , sampleDiff := t .differingEvents (events , pResponse , wResponse , eventsByMessageID )
4041 if len (differingEvents ) == 0 {
4142 return
4243 }
@@ -47,7 +48,7 @@ func (t *Transformer) CompareAndLog(
4748 Metadata : * metadata ,
4849 })
4950 })
50- if err := t .writeLogEntries ( logEntries ); err != nil {
51+ if err := t .write ( append ([] string { sampleDiff }, logEntries ... ) ); err != nil {
5152 t .logger .Warnn ("Error logging events" , obskit .Error (err ))
5253 return
5354 }
@@ -60,45 +61,50 @@ func (t *Transformer) differingEvents(
6061 eventsToTransform []ptrans.TransformerEvent ,
6162 pResponse , wResponse ptrans.Response ,
6263 eventsByMessageID map [string ]types.SingularEventWithReceivedAt ,
63- ) []types.SingularEventT {
64+ ) ( []types.SingularEventT , string ) {
6465 // If the event counts differ, return all events in the transformation
6566 if len (pResponse .Events ) != len (wResponse .Events ) || len (pResponse .FailedEvents ) != len (wResponse .FailedEvents ) {
6667 events := lo .Map (eventsToTransform , func (e ptrans.TransformerEvent , _ int ) types.SingularEventT {
6768 return eventsByMessageID [e .Metadata .MessageID ].SingularEvent
6869 })
6970 t .stats .mismatchedEvents .Observe (float64 (len (events )))
70- return events
71+ return events , ""
7172 }
7273
7374 var (
7475 differedSampleEvents []types.SingularEventT
7576 differedEventsCount int
77+ sampleDiff string
7678 )
7779
7880 for i := range pResponse .Events {
79- if reflect .DeepEqual (pResponse .Events [i ], wResponse .Events [i ]) {
81+ diff := cmp .Diff (wResponse .Events [i ], pResponse .Events [i ])
82+ if len (diff ) == 0 {
8083 continue
8184 }
85+
8286 if differedEventsCount == 0 {
8387 // Collect the mismatched messages and break (sample only)
8488 differedSampleEvents = append (differedSampleEvents , lo .Map (pResponse .Events [i ].Metadata .GetMessagesIDs (), func (msgID string , _ int ) types.SingularEventT {
8589 return eventsByMessageID [msgID ].SingularEvent
8690 })... )
91+ sampleDiff = diff
8792 }
8893 differedEventsCount ++
8994 }
95+ t .stats .matchedEvents .Observe (float64 (len (pResponse .Events ) - differedEventsCount ))
9096 t .stats .mismatchedEvents .Observe (float64 (differedEventsCount ))
91- return differedSampleEvents
97+ return differedSampleEvents , sampleDiff
9298}
9399
94- func (t * Transformer ) writeLogEntries ( entries []string ) error {
100+ func (t * Transformer ) write ( data []string ) error {
95101 writer , err := misc .CreateGZ (t .loggedFileName )
96102 if err != nil {
97103 return fmt .Errorf ("creating buffered writer: %w" , err )
98104 }
99105 defer func () { _ = writer .Close () }()
100106
101- for _ , entry := range entries {
107+ for _ , entry := range data {
102108 if _ , err := writer .Write ([]byte (entry + "\n " )); err != nil {
103109 return fmt .Errorf ("writing log entry: %w" , err )
104110 }
@@ -107,5 +113,5 @@ func (t *Transformer) writeLogEntries(entries []string) error {
107113}
108114
109115func generateLogFileName () string {
110- return fmt .Sprintf ("warehouse_transformations_debug_%s.log" , uuid .NewString ())
116+ return fmt .Sprintf ("warehouse_transformations_debug_%s.log.gz " , uuid .NewString ())
111117}
0 commit comments