discovery.go 920 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. package discovery
  2. import (
  3. "log"
  4. "github.com/fsnotify/fsnotify"
  5. )
  6. type Discovery struct {
  7. watchDir string
  8. dirWatcher *fsnotify.Watcher
  9. }
  10. func New(watchDir string) (*Discovery, error) {
  11. return &Discovery{
  12. watchDir: watchDir,
  13. }, nil
  14. }
  15. func (d *Discovery) Start() error {
  16. var err error
  17. d.dirWatcher, err = fsnotify.NewWatcher()
  18. if err != nil {
  19. return err
  20. }
  21. go func() {
  22. for {
  23. select {
  24. case event, ok := <-d.dirWatcher.Events:
  25. if !ok {
  26. return
  27. }
  28. log.Println("event:", event)
  29. if event.Has(fsnotify.Create) {
  30. log.Println("created file:", event.Name)
  31. }
  32. if event.Has(fsnotify.Remove) {
  33. log.Println("removed file:", event.Name)
  34. }
  35. case err, ok := <-d.dirWatcher.Errors:
  36. if !ok {
  37. return
  38. }
  39. log.Println("error:", err)
  40. }
  41. }
  42. }()
  43. return d.dirWatcher.Add(d.watchDir)
  44. }
  45. func (d *Discovery) Close() error {
  46. return d.dirWatcher.Close()
  47. }