Refactor the watcher a bit
This commit is contained in:
@@ -31,18 +31,14 @@ func main() {
|
|||||||
}
|
}
|
||||||
logger.Info("Crontab file resolved as: %s", crontabFile)
|
logger.Info("Crontab file resolved as: %s", crontabFile)
|
||||||
|
|
||||||
watcher, err := fsnotify.NewWatcher()
|
events, err := watchCrontabFile(crontabFile)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to create watcher: %v", err)
|
logger.Error("Failed to watch crontab file: %v", err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
for event := range events {
|
||||||
err = watcher.Add(crontabFile)
|
logger.Info("Crontab file updated: %s", event.Name)
|
||||||
if err != nil {
|
|
||||||
logger.Error("Failed to add crontab file to watcher: %v", err)
|
|
||||||
return
|
|
||||||
}
|
}
|
||||||
logger.Info("Watching crontab file: %s", crontabFile)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func resolveCrontabPath() (string, error) {
|
func resolveCrontabPath() (string, error) {
|
||||||
@@ -79,3 +75,37 @@ func ensureExists(path string) error {
|
|||||||
defer file.Close()
|
defer file.Close()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func watchCrontabFile(path string) (<-chan fsnotify.Event, error) {
|
||||||
|
watcher, err := fsnotify.NewWatcher()
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to create watcher: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = watcher.Add(path)
|
||||||
|
if err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to add crontab file to watcher: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
filteredChan := make(chan fsnotify.Event)
|
||||||
|
go func() {
|
||||||
|
defer close(filteredChan)
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case event, ok := <-watcher.Events:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if event.Op&fsnotify.Write == fsnotify.Write {
|
||||||
|
filteredChan <- event
|
||||||
|
}
|
||||||
|
case err, ok := <-watcher.Errors:
|
||||||
|
if !ok {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
logger.Error("Error watching crontab file: %v", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
return filteredChan, nil
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user