Skip to content

Instantly share code, notes, and snippets.

@salrashid123
Last active May 1, 2020 12:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save salrashid123/f78ff7612dd10f4701702b07a688eb72 to your computer and use it in GitHub Desktop.
Save salrashid123/f78ff7612dd10f4701702b07a688eb72 to your computer and use it in GitHub Desktop.
CloudEvents event parsing for gcp (https://cloudevents.github.io/sdk-go/)
package main
import (
"context"
"encoding/base64"
"encoding/json"
"fmt"
cloudevents "github.com/cloudevents/sdk-go/v2"
logging "google.golang.org/api/logging/v2"
pubsub "google.golang.org/api/pubsub/v1"
// https://godoc.org/google.golang.org/api/servicecontrol/v1#AuditLog
svc "google.golang.org/api/servicecontrol/v1"
)
const (
pubSubEventType = "com.google.cloud.pubsub.topic.publish"
auditLogEventType = "com.google.cloud.auditlog.event"
)
type wrappedPubSub struct {
Subscription string `json:"subscription"`
Message pubsub.PubsubMessage `json:"message"`
}
func Receive(ctx context.Context, event cloudevents.Event) error {
fmt.Printf("EventID: >> : %s\n", event.ID())
switch event.Type() {
case pubSubEventType:
pubsubData := &wrappedPubSub{}
if err := event.DataAs(pubsubData); err != nil {
return fmt.Errorf("Got Data Error: %s\n", err)
}
decoded, err := base64.StdEncoding.DecodeString(pubsubData.Message.Data)
if err != nil {
return fmt.Errorf("Unable to decode pubsub message: %v\n", err)
}
fmt.Printf("Pubsub Message %s\n", decoded)
case auditLogEventType:
loggingData := &logging.LogEntry{}
if err := event.DataAs(loggingData); err != nil {
fmt.Printf("DataAs Error %v", err)
return fmt.Errorf("Got Data Error %v", err)
}
audit := &svc.AuditLog{}
err := json.Unmarshal(loggingData.ProtoPayload, audit)
if err != nil {
return fmt.Errorf("Got Data Error %v", err)
}
fmt.Printf("ResourceName: %v\n", audit.ResourceName)
default:
return fmt.Errorf("Unknown Event type")
}
return nil
}
func main() {
c, err := cloudevents.NewDefaultClient()
if err != nil {
fmt.Printf("failed to create client, %v", err)
}
err = c.StartReceiver(context.Background(), Receive)
if err != nil {
fmt.Printf("failed to StartReceiver, %v", err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment