diff --git a/Makefile b/Makefile index efbb126..3c0461a 100644 --- a/Makefile +++ b/Makefile @@ -47,30 +47,30 @@ build: docker run -it \ --rm \ -v $(PROJECT_DIR):/go/src/github.com/dominicbreuker/pspy \ - -w "/go/src/github.com/dominicbreuker" \ + -w "/go/src/github.com/dominicbreuker/pspy" \ --env CGO_ENABLED=0 \ --env GOOS=linux \ --env GOARCH=386 \ - $(BUILD_IMAGE) /bin/sh -c "go build -a -ldflags '-s -w -X main.version=${VERSION} -X main.commit=${BUILD_SHA} -extldflags \"-static\"' -o pspy/bin/pspy32 pspy/main.go" + $(BUILD_IMAGE) /bin/sh -c "go build -a -ldflags '-s -w -X main.version=${VERSION} -X main.commit=${BUILD_SHA} -extldflags \"-static\"' -o bin/pspy32 main.go" docker run -it \ --rm \ -v $(PROJECT_DIR):/go/src/github.com/dominicbreuker/pspy \ - -w "/go/src/github.com/dominicbreuker" \ + -w "/go/src/github.com/dominicbreuker/pspy" \ --env CGO_ENABLED=0 \ --env GOOS=linux \ --env GOARCH=amd64 \ - $(BUILD_IMAGE) /bin/sh -c "go build -a -ldflags '-s -w -X main.version=${VERSION} -X main.commit=${BUILD_SHA} -extldflags \"-static\"' -o pspy/bin/pspy64 pspy/main.go" + $(BUILD_IMAGE) /bin/sh -c "go build -a -ldflags '-s -w -X main.version=${VERSION} -X main.commit=${BUILD_SHA} -extldflags \"-static\"' -o bin/pspy64 main.go" docker run -it \ --rm \ -v $(PROJECT_DIR):/go/src/github.com/dominicbreuker/pspy \ - -w "/go/src/github.com/dominicbreuker" \ + -w "/go/src/github.com/dominicbreuker/pspy" \ --env GOOS=linux \ --env GOARCH=386 \ - $(BUILD_IMAGE) /bin/sh -c "go build -ldflags '-w -s -X main.version=${VERSION} -X main.commit=${BUILD_SHA}' -o pspy/bin/pspy32s pspy/main.go && upx pspy/bin/pspy32s" + $(BUILD_IMAGE) /bin/sh -c "go build -ldflags '-w -s -X main.version=${VERSION} -X main.commit=${BUILD_SHA}' -o bin/pspy32s main.go && upx bin/pspy32s" docker run -it \ --rm \ -v $(PROJECT_DIR):/go/src/github.com/dominicbreuker/pspy \ - -w "/go/src/github.com/dominicbreuker" \ + -w "/go/src/github.com/dominicbreuker/pspy" \ --env GOOS=linux \ --env GOARCH=amd64 \ - $(BUILD_IMAGE) /bin/sh -c "go build -ldflags '-w -s -X main.version=${VERSION} -X main.commit=${BUILD_SHA}' -o pspy/bin/pspy64s pspy/main.go && upx pspy/bin/pspy64s" + $(BUILD_IMAGE) /bin/sh -c "go build -ldflags '-w -s -X main.version=${VERSION} -X main.commit=${BUILD_SHA}' -o bin/pspy64s main.go && upx bin/pspy64s" diff --git a/docker/Dockerfile.build b/docker/Dockerfile.build index df74075..12f5a2b 100644 --- a/docker/Dockerfile.build +++ b/docker/Dockerfile.build @@ -1,3 +1,3 @@ -FROM golang:1.18-bullseye +FROM golang:1.19-bullseye RUN apt-get update && apt-get install -y upx && rm -rf /var/lib/apt/lists/* diff --git a/docker/Dockerfile.development b/docker/Dockerfile.development index 7d3284c..bfc7744 100644 --- a/docker/Dockerfile.development +++ b/docker/Dockerfile.development @@ -1,4 +1,4 @@ -FROM golang:1.18-bullseye +FROM golang:1.19-bullseye RUN apt-get update && apt-get -y install cron python3 sudo procps diff --git a/docker/Dockerfile.testing b/docker/Dockerfile.testing index f708bb0..9064633 100644 --- a/docker/Dockerfile.testing +++ b/docker/Dockerfile.testing @@ -1,4 +1,4 @@ -FROM golang:1.18-bullseye +FROM golang:1.19-bullseye RUN apt-get update && apt-get -y install cron python3 sudo procps @@ -8,7 +8,8 @@ RUN apt-get update && apt-get -y install cron python3 sudo procps COPY main.go /go/src/github.com/dominicbreuker/pspy/main.go COPY cmd /go/src/github.com/dominicbreuker/pspy/cmd COPY internal /go/src/github.com/dominicbreuker/pspy/internal -COPY vendor /go/src/github.com/dominicbreuker/pspy/vendor +COPY go.mod /go/src/github.com/dominicbreuker/pspy/go.mod +COPY go.sum /go/src/github.com/dominicbreuker/pspy/go.sum COPY .git /go/src/github.com/dominicbreuker/pspy/.git # run tests diff --git a/internal/fswatcher/fswatcher.go b/internal/fswatcher/fswatcher.go index ea68457..b234e8b 100644 --- a/internal/fswatcher/fswatcher.go +++ b/internal/fswatcher/fswatcher.go @@ -25,6 +25,7 @@ type FSWatcher struct { w Walker maxWatchers int eventSize int + drain bool } func NewFSWatcher() *FSWatcher { @@ -33,9 +34,14 @@ func NewFSWatcher() *FSWatcher { w: walker.NewWalker(), maxWatchers: inotify.MaxWatchers, eventSize: inotify.EventSize, + drain: true, } } +func (fs *FSWatcher) Enable() { + fs.drain = false +} + func (fs *FSWatcher) Close() { fs.i.Close() } @@ -116,6 +122,10 @@ func (fs *FSWatcher) observe(triggerCh chan struct{}, dataCh chan []byte, errCh for { n, err := fs.i.Read(buf) + if fs.drain { + continue + } + triggerCh <- struct{}{} if err != nil { errCh <- fmt.Errorf("reading inotify buffer: %v", err) diff --git a/internal/pspy/pspy.go b/internal/pspy/pspy.go index 233ec58..e92f56a 100644 --- a/internal/pspy/pspy.go +++ b/internal/pspy/pspy.go @@ -24,6 +24,7 @@ type Logger interface { type FSWatcher interface { Init(rdirs, dirs []string) (chan error, chan struct{}) Run() (chan struct{}, chan string, chan error) + Enable() } type PSScanner interface { @@ -110,7 +111,7 @@ func startFSW(fsw FSWatcher, logger Logger, drainFor time.Duration, sigCh <-chan // ignore all file system events created on startup logger.Infof("Draining file system events due to startup...") - ok = drainEventsFor(triggerCh, fsEventCh, drainFor, sigCh) + ok = drainEventsFor(triggerCh, fsEventCh, drainFor, sigCh, fsw) logger.Infof("done") return } @@ -137,14 +138,13 @@ func logErrors(errCh chan error, logger Logger) { } } -func drainEventsFor(triggerCh chan struct{}, eventCh chan string, d time.Duration, sigCh <-chan os.Signal) bool { +func drainEventsFor(triggerCh chan struct{}, eventCh chan string, d time.Duration, sigCh <-chan os.Signal, fsw FSWatcher) bool { for { select { case <-sigCh: return false - case <-triggerCh: - case <-eventCh: case <-time.After(d): + fsw.Enable() return true } } diff --git a/internal/pspy/pspy_test.go b/internal/pspy/pspy_test.go index 94a187e..0c5a7b5 100644 --- a/internal/pspy/pspy_test.go +++ b/internal/pspy/pspy_test.go @@ -68,8 +68,6 @@ func TestStartFSW(t *testing.T) { sigCh := make(chan os.Signal) go func() { - fsw.runTriggerCh <- struct{}{} // trigger sent while draining - fsw.runEventCh <- "event sent while draining" fsw.runErrCh <- errors.New("error sent while draining") <-time.After(drainFor) // ensure draining is over fsw.runTriggerCh <- struct{}{} @@ -294,6 +292,10 @@ func (fsw *mockFSWatcher) Run() (chan struct{}, chan string, chan error) { return fsw.runTriggerCh, fsw.runEventCh, fsw.runErrCh } +func (fsw *mockFSWatcher) Enable() { + return +} + // PSScanner type mockPSScanner struct {