Files
sablier/pkg/provider/docker/events.go
Alexis Couvreur fad97d7901 fix(provider): add debug logging (#653)
* fix(provider): add debug logging

Add a bunch of debug logging calls

* return a swarm service pointer

* revert to service list with status true

* change trace to debug

* --no-verify
2025-07-30 22:44:20 -04:00

51 lines
1.1 KiB
Go

package docker
import (
"context"
"errors"
"io"
"log/slog"
"strings"
"github.com/docker/docker/api/types/events"
"github.com/docker/docker/api/types/filters"
)
func (p *Provider) NotifyInstanceStopped(ctx context.Context, instance chan<- string) {
msgs, errs := p.Client.Events(ctx, events.ListOptions{
Filters: filters.NewArgs(
filters.Arg("scope", "local"),
filters.Arg("type", string(events.ContainerEventType)),
filters.Arg("event", "die"),
),
})
for {
select {
case msg, ok := <-msgs:
if !ok {
p.l.ErrorContext(ctx, "event stream closed")
close(instance)
return
}
// Send the container that has died to the channel
p.l.DebugContext(ctx, "event received", "event", msg)
instance <- strings.TrimPrefix(msg.Actor.Attributes["name"], "/")
case err, ok := <-errs:
if !ok {
p.l.ErrorContext(ctx, "event stream closed")
close(instance)
return
}
if errors.Is(err, io.EOF) {
p.l.ErrorContext(ctx, "event stream closed")
close(instance)
return
}
p.l.ErrorContext(ctx, "event stream error", slog.Any("error", err))
case <-ctx.Done():
close(instance)
return
}
}
}