Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions pkg/server/service/event-ingester/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ type Config struct {
Authorization auth.AuthorizationConfig `yaml:"authorization"`
// ClientNameSalt is the salt to use for computing client names
ClientNameSalt string `yaml:"clientNameSalt"`
// DebugUsers is a list of usernames for which to enable debug logging.
DebugUsers []string `yaml:"debugUsers"`
}

func (c *Config) Validate() error {
Expand Down
35 changes: 34 additions & 1 deletion pkg/server/service/event-ingester/handler.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ package eventingester

import (
"context"
"crypto/sha256"
"encoding/hex"
"errors"
"fmt"
"net"
Expand Down Expand Up @@ -30,12 +32,18 @@ type Handler struct {
geoipProvider geoip.Provider
cache store.Cache
clientNameSalt string
debugUsers map[string]struct{}
metrics *Metrics

eventRouter *eventHandler.EventRouter
}

func NewHandler(log logrus.FieldLogger, clockDrift *time.Duration, geoipProvider geoip.Provider, cache store.Cache, clientNameSalt string) *Handler {
func NewHandler(log logrus.FieldLogger, clockDrift *time.Duration, geoipProvider geoip.Provider, cache store.Cache, clientNameSalt string, debugUsers []string) *Handler {
debugUsersMap := make(map[string]struct{}, len(debugUsers))
for _, u := range debugUsers {
debugUsersMap[u] = struct{}{}
}

return &Handler{
log: log,
clockDrift: clockDrift,
Expand All @@ -44,6 +52,7 @@ func NewHandler(log logrus.FieldLogger, clockDrift *time.Duration, geoipProvider
metrics: NewMetrics("xatu_server_event_ingester"),
eventRouter: eventHandler.NewEventRouter(log, cache, geoipProvider),
clientNameSalt: clientNameSalt,
debugUsers: debugUsersMap,
}
}

Expand Down Expand Up @@ -224,6 +233,21 @@ func (h *Handler) Events(ctx context.Context, events []*xatu.DecoratedEvent, use
if user != nil {
event.Meta.Client.Name = group.ComputeClientName(username, h.clientNameSalt, event.GetMeta().GetClient().GetName())
}

// Debug log for configured debug users
if _, isDebugUser := h.debugUsers[username]; isDebugUser {
fields := logrus.Fields{
"client_id": event.GetMeta().GetClient().GetId(),
"client_name": event.GetMeta().GetClient().GetName(),
"group": group.Name(),
"user": username,
}
if ipAddress != "" {
fields["hashed_ip"] = hashIP(ipAddress, h.clientNameSalt)
}

h.log.WithFields(fields).Debug("Debug user request")
}
}

if user != nil {
Expand Down Expand Up @@ -253,6 +277,15 @@ func (h *Handler) Events(ctx context.Context, events []*xatu.DecoratedEvent, use
return filteredEvents, nil
}

// hashIP computes a SHA256 hash of the IP address and returns the first 16 hex characters.
func hashIP(ip, salt string) string {
hash := sha256.New()
hash.Write([]byte(ip))
hash.Write([]byte(salt))

return hex.EncodeToString(hash.Sum(nil))[:16]
}

func (h *Handler) filterEvents(ctx context.Context, events []*xatu.DecoratedEvent, user *auth.User, group *auth.Group) ([]*xatu.DecoratedEvent, error) {
_, span := observability.Tracer().Start(ctx,
"EventIngester.filterEvents",
Expand Down
2 changes: 1 addition & 1 deletion pkg/server/service/event-ingester/ingester.go
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ func NewIngester(ctx context.Context, log logrus.FieldLogger, conf *Config, cloc
log: log,
config: conf,
auth: a,
handler: NewHandler(log, clockDrift, geoipProvider, cache, conf.ClientNameSalt),
handler: NewHandler(log, clockDrift, geoipProvider, cache, conf.ClientNameSalt, conf.DebugUsers),
healthServer: healthServer,
}

Expand Down
Loading