package api import ( auditV1 "dev.azure.com/schwarzit/schwarzit.stackit-core-platform/audit-go.git/gen/go/audit/v1" "encoding/json" "google.golang.org/protobuf/encoding/protojson" "log/slog" "time" ) // LogEvent logs an event to the terminal func LogEvent( event *CloudEvent, auditEvent *auditV1.AuditLogEntry, routableIdentifier *RoutableIdentifier, visibility auditV1.Visibility, ) error { // Convert to json auditEventJson, err := protojson.Marshal(auditEvent) if err != nil { return err } auditEventMap := make(map[string]interface{}) err = json.Unmarshal(auditEventJson, &auditEventMap) if err != nil { return err } objectIdentifierJson, err := protojson.Marshal(routableIdentifier.ToObjectIdentifier()) if err != nil { return err } objectIdentifierMap := make(map[string]interface{}) err = json.Unmarshal(objectIdentifierJson, &objectIdentifierMap) if err != nil { return err } cloudEvent := cloudEvent{ SpecVersion: event.SpecVersion, Source: event.Source, Id: event.Id, Time: event.Time, DataContentType: event.DataContentType, DataType: event.DataType, Subject: event.Subject, Data: routableEvent{ OperationName: auditEvent.ProtoPayload.OperationName, Visibility: visibility.String(), ResourceReference: objectIdentifierMap, Data: auditEventMap, }, TraceParent: event.TraceParent, TraceState: event.TraceState, } cloudEventJson, err := json.Marshal(cloudEvent) if err != nil { return err } slog.Info(string(cloudEventJson)) return nil } type cloudEvent struct { SpecVersion string Source string Id string Time time.Time DataContentType string DataType string Subject string Data routableEvent TraceParent *string TraceState *string } type routableEvent struct { OperationName string Visibility string ResourceReference map[string]interface{} Data map[string]interface{} }