CernVM-FS  2.12.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
file_watcher.h
Go to the documentation of this file.
1 
5 #ifndef CVMFS_FILE_WATCHER_H_
6 #define CVMFS_FILE_WATCHER_H_
7 
8 #include <pthread.h>
9 
10 #include <map>
11 #include <string>
12 
13 namespace file_watcher {
14 
15 enum Event {
23 };
24 
25 class EventHandler {
26  public:
27  EventHandler();
28  virtual ~EventHandler();
29 
45  virtual bool Handle(const std::string& file_path,
46  Event event,
47  bool* clear_handler) = 0;
48 };
49 
50 struct WatchRecord {
52 
53  WatchRecord(const std::string& path,
55  : file_path_(path),
56  handler_(h) {}
57 
58  std::string file_path_;
60 };
61 
62 class FileWatcher {
63  public:
64  typedef std::map<std::string, EventHandler*> HandlerMap;
65 
66  FileWatcher();
67  virtual ~FileWatcher();
68  static FileWatcher *Create();
69 
70  void RegisterHandler(const std::string& file_path,
71  EventHandler* handler);
72 
73  bool Spawn();
74 
75  void Stop();
76 
77  protected:
78  // Delays controlling the backoff throttle when registering new watches
79  static const unsigned kInitialDelay;
80  static const unsigned kMaxDelay;
81  static const unsigned kResetDelay;
82 
83  void RegisterFilter(const std::string& file_path,
84  EventHandler* handler);
85 
86  virtual bool RunEventLoop(const HandlerMap& handler_map,
87  int read_pipe, int write_pipe) = 0;
88 
89  virtual int TryRegisterFilter(const std::string& file_path) = 0;
90 
91  std::map<int, WatchRecord> watch_records_;
92 
93  private:
94  static void* BackgroundThread(void* d);
95 
97 
100 
101  pthread_t thread_;
102 
103  bool started_;
104 };
105 
106 } // namespace file_watcher
107 
108 #endif // CVMFS_FILE_WATCHER_H_
void RegisterFilter(const std::string &file_path, EventHandler *handler)
static const unsigned kMaxDelay
Definition: file_watcher.h:80
static FileWatcher * Create()
Definition: file_watcher.cc:44
static void * BackgroundThread(void *d)
static const unsigned kResetDelay
Definition: file_watcher.h:81
virtual bool RunEventLoop(const HandlerMap &handler_map, int read_pipe, int write_pipe)=0
WatchRecord(const std::string &path, file_watcher::EventHandler *h)
Definition: file_watcher.h:53
file_watcher::EventHandler * handler_
Definition: file_watcher.h:59
static const unsigned kInitialDelay
Definition: file_watcher.h:79
virtual bool Handle(const std::string &file_path, Event event, bool *clear_handler)=0
std::map< std::string, EventHandler * > HandlerMap
Definition: file_watcher.h:64
void RegisterHandler(const std::string &file_path, EventHandler *handler)
Definition: file_watcher.cc:56
std::map< int, WatchRecord > watch_records_
Definition: file_watcher.h:91
virtual int TryRegisterFilter(const std::string &file_path)=0