func()

in tools/health-monitor/monitor/file_cache/cache_monitor.go [107:181]


func (fc *FileCache) cacheWatcher() error {
	fc.cacheObj.fileCreatedMap = make(map[string]int64)
	fc.cacheObj.fileRemovedMap = make(map[string]int64)

	w := watcher.New()

	// ignore hidden files
	w.IgnoreHiddenFiles(true)

	go func() {
		for {
			select {

			case event := <-w.Event:
				err := hmcommon.CheckProcessStatus(hmcommon.Pid)
				if err != nil {
					log.Err("cache_monitor::cacheWatcher : [%v]", err)
					return
				}

				if strings.ToUpper(event.Op.String()) == create {
					fc.createEvent(&event)

				} else if strings.ToUpper(event.Op.String()) == remove {
					fc.removeEvent(&event)

				} else if strings.ToUpper(event.Op.String()) == chmod {
					fc.chmodEvent(&event)

				} else if strings.ToUpper(event.Op.String()) == write {
					fc.writeEvent(&event)

				} else if strings.ToUpper(event.Op.String()) == rename {
					fc.renameEvent(&event)

				} else if strings.ToUpper(event.Op.String()) == move {
					fc.moveEvent(&event)

				}

			case err := <-w.Error:
				log.Err("cache_monitor::cache_watcher : [%v]", err)
				return

			case <-w.Closed:
				return
			}
		}
	}()

	// watch file cache directory for changes
	if err := w.Add(fc.tmpPath); err != nil {
		log.Err("cache_monitor::cacheWatcher : [%v]", err)
		return err
	}

	// set recursive watcher on file cache directory
	if err := w.AddRecursive(fc.tmpPath); err != nil {
		log.Err("cache_monitor::cacheWatcher : [%v]", err)
		return err
	}

	// list of all of the files and folders currently being watched
	for path := range w.WatchedFiles() {
		log.Debug("cache_monitor::cacheWatcher : Watching %v", path)
	}

	// Start the watching process - it'll check for changes every 100ms
	if err := w.Start(time.Millisecond * 100); err != nil {
		log.Err("cache_monitor::cacheWatcher : [%v]", err)
		return err
	}

	return nil
}