mirror of
https://github.com/cloudflare/cloudflared.git
synced 2025-07-27 16:19:57 +00:00
AUTH-2587 add config watcher and reload logic for access client forwarder
This commit is contained in:
58
watcher/file.go
Normal file
58
watcher/file.go
Normal file
@@ -0,0 +1,58 @@
|
||||
package watcher
|
||||
|
||||
import (
|
||||
"github.com/fsnotify/fsnotify"
|
||||
)
|
||||
|
||||
// File is a file watcher that notifies when a file has been changed
|
||||
type File struct {
|
||||
watcher *fsnotify.Watcher
|
||||
shutdown chan struct{}
|
||||
}
|
||||
|
||||
// NewFile is a standard constructor
|
||||
func NewFile() (*File, error) {
|
||||
watcher, err := fsnotify.NewWatcher()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
f := &File{
|
||||
watcher: watcher,
|
||||
shutdown: make(chan struct{}),
|
||||
}
|
||||
return f, nil
|
||||
}
|
||||
|
||||
// Add adds a file to start watching
|
||||
func (f *File) Add(filepath string) error {
|
||||
return f.watcher.Add(filepath)
|
||||
}
|
||||
|
||||
// Shutdown stop the file watching run loop
|
||||
func (f *File) Shutdown() {
|
||||
f.shutdown <- struct{}{}
|
||||
}
|
||||
|
||||
// Start is a runloop to watch for files changes from the file paths added from Add()
|
||||
func (f *File) Start(notifier Notification) {
|
||||
for {
|
||||
select {
|
||||
case event, ok := <-f.watcher.Events:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
if event.Op&fsnotify.Write == fsnotify.Write {
|
||||
notifier.WatcherItemDidChange(event.Name)
|
||||
}
|
||||
case err, ok := <-f.watcher.Errors:
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
notifier.WatcherDidError(err)
|
||||
|
||||
case <-f.shutdown:
|
||||
f.watcher.Close()
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user