0
Fork 0
mirror of https://github.com/caddyserver/caddy.git synced 2025-01-27 23:03:37 -05:00

events: Tune logging and context cancellation

This commit is contained in:
Matthew Holt 2022-08-31 18:48:46 -06:00
parent d4d8bbcfc6
commit 3cd7437b3d
No known key found for this signature in database
GPG key ID: 2A349DD577D586A5

View file

@ -202,11 +202,11 @@ func (app *App) On(eventName string, handler Handler) error {
// the metadata data. Events are emitted and propagated synchronously. The returned Event // the metadata data. Events are emitted and propagated synchronously. The returned Event
// value will have any additional information from the invoked handlers. // value will have any additional information from the invoked handlers.
func (app *App) Emit(ctx caddy.Context, eventName string, data map[string]any) Event { func (app *App) Emit(ctx caddy.Context, eventName string, data map[string]any) Event {
logger := app.logger.With(zap.String("name", eventName))
id, err := uuid.NewRandom() id, err := uuid.NewRandom()
if err != nil { if err != nil {
app.logger.Error("failed generating new event ID", logger.Error("failed generating new event ID", zap.Error(err))
zap.Error(err),
zap.String("event", eventName))
} }
eventName = strings.ToLower(eventName) eventName = strings.ToLower(eventName)
@ -219,6 +219,10 @@ func (app *App) Emit(ctx caddy.Context, eventName string, data map[string]any) E
data: data, data: data,
} }
logger = logger.With(
zap.String("id", e.id.String()),
zap.String("origin", e.origin.CaddyModule().String()))
// add event info to replacer, make sure it's in the context // add event info to replacer, make sure it's in the context
repl, ok := ctx.Context.Value(caddy.ReplacerCtxKey).(*caddy.Replacer) repl, ok := ctx.Context.Value(caddy.ReplacerCtxKey).(*caddy.Replacer)
if !ok { if !ok {
@ -253,12 +257,7 @@ func (app *App) Emit(ctx caddy.Context, eventName string, data map[string]any) E
return nil, false return nil, false
}) })
app.logger.Debug("event", logger.Debug("event", zap.Any("data", e.data))
zap.String("name", e.name),
zap.String("id", e.id.String()),
zap.String("origin", e.origin.CaddyModule().String()),
zap.Any("data", e.data),
)
// invoke handlers bound to the event by name and also all events; this for loop // invoke handlers bound to the event by name and also all events; this for loop
// iterates twice at most: once for the event name, once for "" (all events) // iterates twice at most: once for the event name, once for "" (all events)
@ -272,10 +271,17 @@ func (app *App) Emit(ctx caddy.Context, eventName string, data map[string]any) E
} }
for _, handler := range app.subscriptions[eventName][moduleID] { for _, handler := range app.subscriptions[eventName][moduleID] {
select {
case <-ctx.Done():
logger.Error("context canceled; event handling stopped")
return e
default:
}
if err := handler.Handle(ctx, e); err != nil { if err := handler.Handle(ctx, e); err != nil {
aborted := errors.Is(err, ErrAborted) aborted := errors.Is(err, ErrAborted)
app.logger.Error("handler error", logger.Error("handler error",
zap.Error(err), zap.Error(err),
zap.Bool("aborted", aborted)) zap.Bool("aborted", aborted))