in hello.go [42:84]
func handleReceivedEvent(ctx context.Context, event cloudevents.Event) {
type LoggedEvent struct {
Severity string `json:"severity"`
EventType string `json:"eventType"`
Message string `json:"message"`
Event cloudevents.Event `json:"event"`
}
type PubSubMessage struct {
Data string `json:"data"`
}
type PubSubEvent struct {
Message PubSubMessage `json:"message"`
}
dataMessage := event.Data()
// In case of PubSub event, decode its payload to be printed in the message as-is.
if event.Type() == "google.cloud.pubsub.topic.v1.messagePublished" {
obj := &PubSubEvent{}
if err := event.DataAs(obj); err != nil {
fmt.Printf("Unable to decode PubSub data: %s\n", err.Error())
}
decodedMessage, decodingError := base64.StdEncoding.DecodeString(obj.Message.Data)
if decodingError != nil {
fmt.Printf("Unable to decode PubSub message: %s\n", decodingError.Error())
} else {
dataMessage = decodedMessage
}
}
loggedEvent := LoggedEvent{
Severity: "INFO",
EventType: event.Type(),
Message: fmt.Sprintf("Received event of type %s. Event data: %s", event.Type(), dataMessage),
Event: event, // Always log full event data
}
jsonLog, err := json.Marshal(loggedEvent)
if err != nil {
fmt.Printf("Unable to log event to JSON: %s\n", err.Error())
} else {
fmt.Printf("%s\n", jsonLog)
}
}