CernVM-FS  2.10.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 
69  void RegisterHandler(const std::string& file_path,
70  EventHandler* handler);
71 
72  bool Spawn();
73 
74  void Stop();
75 
76  protected:
77  // Delays controlling the backoff throttle when registering new watches
78  static const unsigned kInitialDelay;
79  static const unsigned kMaxDelay;
80  static const unsigned kResetDelay;
81 
82  void RegisterFilter(const std::string& file_path,
83  EventHandler* handler);
84 
85  virtual bool RunEventLoop(const HandlerMap& handler_map,
86  int read_pipe, int write_pipe) = 0;
87 
88  virtual int TryRegisterFilter(const std::string& file_path) = 0;
89 
90  std::map<int, WatchRecord> watch_records_;
91 
92  private:
93  static void* BackgroundThread(void* d);
94 
96 
99 
100  pthread_t thread_;
101 
102  bool started_;
103 };
104 
105 } // namespace file_watcher
106 
107 #endif // CVMFS_FILE_WATCHER_H_
void RegisterFilter(const std::string &file_path, EventHandler *handler)
Definition: file_watcher.cc:91
static const unsigned kMaxDelay
Definition: file_watcher.h:79
static void * BackgroundThread(void *d)
Definition: file_watcher.cc:79
static const unsigned kResetDelay
Definition: file_watcher.h:80
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:78
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:35
std::map< int, WatchRecord > watch_records_
Definition: file_watcher.h:90
virtual int TryRegisterFilter(const std::string &file_path)=0