...

Source file src/edge-infra.dev/pkg/sds/lib/fswatcher/fswatcher.go

Documentation: edge-infra.dev/pkg/sds/lib/fswatcher

     1  package watch
     2  
     3  import (
     4  	"os"
     5  	"os/signal"
     6  	"path/filepath"
     7  
     8  	syscall "golang.org/x/sys/unix"
     9  
    10  	"github.com/fsnotify/fsnotify"
    11  )
    12  
    13  func CreateWatchers(filePath string) (chan os.Signal, *fsnotify.Watcher, error) {
    14  	osWatcher := newSignalWatcher(syscall.SIGHUP, syscall.SIGINT, syscall.SIGTERM, syscall.SIGQUIT)
    15  
    16  	filesystemWatcher, err := NewFilesystemWatcher(filePath)
    17  	if err != nil {
    18  		return nil, nil, err
    19  	}
    20  
    21  	return osWatcher, filesystemWatcher, nil
    22  }
    23  
    24  func NewFilesystemWatcher(filePath string) (*fsnotify.Watcher, error) {
    25  	watcher, err := fsnotify.NewWatcher()
    26  	if err != nil {
    27  		return nil, err
    28  	}
    29  
    30  	var files []string
    31  	err = filepath.Walk(filePath, func(path string, info os.FileInfo, err error) error {
    32  		if info.IsDir() {
    33  			files = append(files, path)
    34  		}
    35  		return err
    36  	})
    37  	if err != nil {
    38  		return nil, err
    39  	}
    40  
    41  	for _, file := range files {
    42  		err = watcher.Add(file)
    43  		if err != nil {
    44  			watcher.Close()
    45  			return nil, err
    46  		}
    47  	}
    48  
    49  	return watcher, nil
    50  }
    51  
    52  func newSignalWatcher(signals ...os.Signal) chan os.Signal {
    53  	signalChan := make(chan os.Signal, 1)
    54  	signal.Notify(signalChan, signals...)
    55  	return signalChan
    56  }
    57  
    58  func NewConfigWatcher(filePath string) (*fsnotify.Watcher, error) {
    59  	watcher, err := fsnotify.NewWatcher()
    60  	if err != nil {
    61  		return nil, err
    62  	}
    63  
    64  	err = watcher.Add(filePath)
    65  	if err != nil {
    66  		watcher.Close()
    67  		return nil, err
    68  	}
    69  	return watcher, nil
    70  }
    71  

View as plain text