summaryrefslogtreecommitdiff
path: root/src/monitor.hh
diff options
context:
space:
mode:
authorJoel Klinghed <the_jk@yahoo.com>2017-09-26 20:09:31 +0200
committerJoel Klinghed <the_jk@yahoo.com>2017-09-26 20:09:31 +0200
commitc85b624d28564a6f785b25000e2b7825592a919d (patch)
tree647b756c824b470b35f1371eb869e9534ed6c1bb /src/monitor.hh
Initial commit
Diffstat (limited to 'src/monitor.hh')
-rw-r--r--src/monitor.hh62
1 files changed, 62 insertions, 0 deletions
diff --git a/src/monitor.hh b/src/monitor.hh
new file mode 100644
index 0000000..99e172b
--- /dev/null
+++ b/src/monitor.hh
@@ -0,0 +1,62 @@
+#ifndef MONITOR_HH
+#define MONITOR_HH
+
+#include <memory>
+#include <string>
+
+class Looper;
+
+class Monitor {
+public:
+ enum State {
+ SEARCHING,
+ CONNECTED,
+ };
+
+ struct Machine {
+ std::string name;
+ unsigned max_jobs;
+
+ Machine()
+ : max_jobs(0) {
+ }
+ };
+
+ class Observer {
+ public:
+ virtual ~Observer() {}
+ virtual void state(Monitor* monitor, State state) = 0;
+ virtual void added_machine(Monitor* monitor, uint32_t id) = 0;
+ virtual void updated_machine(Monitor* monitor, uint32_t id) = 0;
+ virtual void removed_machine(Monitor* monitor, uint32_t id) = 0;
+ virtual void added_job(Monitor* monitor, uint32_t source_id,
+ uint32_t target_id) = 0;
+ virtual void removed_job(Monitor* monitor, uint32_t source_id,
+ uint32_t target_id) = 0;
+
+ protected:
+ Observer() {}
+ };
+
+ virtual ~Monitor() {}
+
+ static Monitor* create(std::shared_ptr<Looper> const& looper);
+
+ virtual void connect(std::string const& netname = std::string(),
+ std::string const& scheduler = std::string(),
+ uint16_t port = 0) = 0;
+ virtual void disconnect() = 0;
+ virtual size_t machines() const = 0;
+ virtual uint32_t id(size_t index) const = 0;
+ virtual Machine machine_at(size_t index) const = 0;
+ virtual Machine machine(uint32_t id) const = 0;
+
+ virtual void add_observer(Observer* observer) = 0;
+
+protected:
+ Monitor() {}
+ Monitor(Monitor const&) = delete;
+ Monitor& operator=(Monitor const&) = delete;
+};
+
+#endif // MONITOR_HH