Skip to content

Commit 2ff6eb0

Browse files
authored
Remove --event-type and introduce --event-types (#4)
* Remove --event-type and introduce --event-types * README.md fixes for --event-types
1 parent 1617ce1 commit 2ff6eb0

File tree

4 files changed

+25
-9
lines changed

4 files changed

+25
-9
lines changed

README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ The following command-line arguments are supported:
1717
* `--api-key` (`string`) — enables sending events via the Datadog API using the specified API key
1818
* `--api-site` (`string`) — specifies the [Datadog site](https://docs.datadoghq.com/getting_started/site/) to use when sending events via the Datadog API (defaults to `datadoghq.com`)
1919
* `--dogstatsd-addr` — enables sending events via the DogStatsD protocol to the specified address (for example, `--dogstatsd-addr=127.0.0.1:8125`)
20-
* `--event-type` (`string`) — event type to process (for example `build`, `task` or `audit_event`) (defaults to `audit_event`)
20+
* `--event-types` (`string`) — comma-separated list of the event types to limit processing to (for example, `--event-types=audit_event` or `--event-types=build,task`)
2121
* `--http-addr` (`string`) — address on which the HTTP server will listen on (defaults to `:8080`)
2222
* `--http-path` (`string`) — HTTP path on which the webhook events will be expected (defaults to `/`)
2323
* `--secret-token` (`string`) — if specified, this value will be used as a HMAC SHA-256 secret to verify the webhook events

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ require (
1414
require (
1515
github.com/DataDog/zstd v1.5.2 // indirect
1616
github.com/Microsoft/go-winio v0.6.1 // indirect
17+
github.com/deckarep/golang-set/v2 v2.3.1 // indirect
1718
github.com/golang/protobuf v1.5.2 // indirect
1819
github.com/inconshreveable/mousetrap v1.1.0 // indirect
1920
github.com/labstack/gommon v0.4.0 // indirect

go.sum

+2
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t
1414
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1515
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
1616
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
17+
github.com/deckarep/golang-set/v2 v2.3.1 h1:vjmkvJt/IV27WXPyYQpAh4bRyWJc5Y435D17XQ9QU5A=
18+
github.com/deckarep/golang-set/v2 v2.3.1/go.mod h1:VAky9rY/yGXJOLEDv3OMci+7wtDpOF4IN+y82NBOac4=
1719
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
1820
github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs=
1921
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=

internal/command/datadog/datadog.go

+21-8
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,19 @@ import (
99
"fmt"
1010
"github.com/brpaz/echozap"
1111
"github.com/cirruslabs/cirrus-webhooks-server/internal/datadogsender"
12+
mapset "github.com/deckarep/golang-set/v2"
1213
"github.com/labstack/echo/v4"
1314
"github.com/spf13/cobra"
1415
"go.uber.org/zap"
1516
"io"
1617
"net/http"
18+
"strings"
1719
"time"
1820
)
1921

2022
var httpAddr string
2123
var httpPath string
22-
var eventType string
24+
var eventTypes []string
2325
var secretToken string
2426
var dogstatsdAddr string
2527
var apiKey string
@@ -59,8 +61,9 @@ func NewCommand() *cobra.Command {
5961
"address on which the HTTP server will listen on")
6062
cmd.PersistentFlags().StringVar(&httpPath, "http-path", "/",
6163
"HTTP path on which the webhook events will be expected")
62-
cmd.PersistentFlags().StringVar(&eventType, "event-type", "audit_event",
63-
"event type to process (for example \"build\", \"task\" or \"audit_event\")")
64+
cmd.PersistentFlags().StringSliceVar(&eventTypes, "event-types", []string{},
65+
"comma-separated list of the event types to limit processing to "+
66+
"(for example, --event-types=audit_event or --event-types=build,task")
6467
cmd.PersistentFlags().StringVar(&secretToken, "secret-token", "",
6568
"if specified, this value will be used as a HMAC SHA-256 secret to verify the webhook events")
6669
cmd.PersistentFlags().StringVar(&dogstatsdAddr, "dogstatsd-addr", "",
@@ -78,6 +81,7 @@ func runDatadog(cmd *cobra.Command, args []string) error {
7881
// Initialize the logger
7982
logger := zap.Must(zap.NewProduction()).Sugar()
8083

84+
// Initialize a Datadog sender
8185
var sender datadogsender.Sender
8286
var err error
8387

@@ -95,13 +99,16 @@ func runDatadog(cmd *cobra.Command, args []string) error {
9599
return err
96100
}
97101

102+
// Convert event types to a set for faster lookup
103+
eventTypesSet := mapset.NewSet[string](eventTypes...)
104+
98105
// Configure HTTP server
99106
e := echo.New()
100107

101108
e.Use(echozap.ZapLogger(logger.Desugar()))
102109

103110
e.POST(httpPath, func(ctx echo.Context) error {
104-
return processWebhookEvent(ctx, logger, sender)
111+
return processWebhookEvent(ctx, logger, sender, eventTypesSet)
105112
})
106113

107114
server := &http.Server{
@@ -130,12 +137,18 @@ func runDatadog(cmd *cobra.Command, args []string) error {
130137
return <-httpServerErrCh
131138
}
132139

133-
func processWebhookEvent(ctx echo.Context, logger *zap.SugaredLogger, sender datadogsender.Sender) error {
140+
func processWebhookEvent(
141+
ctx echo.Context,
142+
logger *zap.SugaredLogger,
143+
sender datadogsender.Sender,
144+
eventTypesSet mapset.Set[string],
145+
) error {
134146
// Make sure this is an event we're looking for
135147
presentedEventType := ctx.Request().Header.Get("X-Cirrus-Event")
136-
if presentedEventType != eventType {
137-
logger.Debugf("skipping event of type %q because we only process events of type %q",
138-
presentedEventType, eventType)
148+
149+
if eventTypesSet.Cardinality() != 0 && !eventTypesSet.Contains(presentedEventType) {
150+
logger.Debugf("skipping event of type %q because we only process events of types %s",
151+
presentedEventType, strings.Join(eventTypesSet.ToSlice(), ", "))
139152

140153
return nil
141154
}

0 commit comments

Comments
 (0)