salsa  0.3.0
 All Classes Functions Variables Enumerations Pages
NodeManager.hh
1 #pragma once
2 #include <Consumer.hh>
3 #include <Feeder.hh>
4 #include <Job.hh>
5 #include <Object.hh>
6 #include <Publisher.hh>
7 #include <Socket.hh>
8 #include <TaskPool.hh>
9 #include <Worker.hh>
10 namespace Salsa {
19 
20 class NodeManager : public Object {
21 public:
22  NodeManager();
23  virtual ~NodeManager();
24 
25  void print(std::string opt = "") const;
26 
27  // TODO Annotate add ops
28  void addConsumer(std::string uuid, std::shared_ptr<Socket> s);
29  void addFeeder(std::string uuid, std::shared_ptr<Socket> s);
30  void addWorker(std::string uuid, std::shared_ptr<Socket> s);
31  void addTask(TaskInfo * taskInfo, std::string cuuid, std::string fuuid,
32  Salsa::Job::QueueType t = Salsa::Job::pending);
33 
34  // TODO Yet again...
35  virtual Socket * onEnter(std::string self, std::string fromType, Message * msg, std::vector<std::string> & out);
36  virtual Socket * onExit(std::string self, Message * msg, std::vector<std::string> & out);
37  virtual Socket * onWhisper(std::string self, Message * msg, std::vector<std::string> & out);
38 
39  // TODO Return ops
40  std::shared_ptr<Feeder> feeder(std::string uuid) const;
41  std::shared_ptr<Consumer> consumer(std::string uuid) const;
42  std::shared_ptr<Worker> worker(std::string uuid) const;
43  Job * job(std::string uuid);
44 
46  TaskPool * taskPool();
47 
48  // TODO Annotate
49  virtual void addTaskSlot();
50  bool hasJobs() const;
51 
52  int32_t nSlots(double mult = 1.0) const;
53  void jobs(std::string clientUUID, std::vector<std::string> & jobs) const; // TODO ehm, what?
54 
55  // TODO Task ops
56  TaskInfo * getNextTask();
57  void resultTask(TaskInfo * task);
58  void noMoreTasks(std::string jobUUID);
59  bool haveMoreTasks();
60  bool haveMoreTasks(std::string jobUUID);
61 
63  virtual void runTask(TaskState * ts, std::string wk, std::string upstream) = 0;
64 
65  // TODO Terminate ops
66  virtual void terminateJob(std::string uuid);
67  virtual void terminateJobAll(); // TODO Why not terminateAllJobs() ? Seems more readable to me
68 
69  virtual bool handleTaskPool(void * p);
70  virtual bool sendWhisper(Socket * s, std::string to, std::vector<std::string> & v);
71 
72  // TODO annotate ops
73  virtual void publisher(Publisher * p);
74  virtual Publisher * publisher() const;
75  virtual void publish(std::string id) const; // TODO what does this do again? const and no return...
76 
77 protected:
78  std::map<std::string, Job *> mJobs{};
79  std::vector<std::string> mActiveJobs{};
80  std::map<std::string, std::shared_ptr<Worker>> mWorkers{};
81  std::map<std::string, std::shared_ptr<Consumer>> mConsumers{};
82  std::map<std::string, std::shared_ptr<Feeder>> mFeeders{};
83  TaskPool * mpTaskPool = nullptr;
84  Publisher * mpPublisher = nullptr;
85 };
86 } // namespace Salsa
std::vector< std::string > mActiveJobs
List of active jobs.
Definition: NodeManager.hh:79
std::shared_ptr< Worker > worker(std::string uuid) const
Definition: NodeManager.cc:405
Base Message class.
Definition: Message.hh:15
std::shared_ptr< Feeder > feeder(std::string uuid) const
Definition: NodeManager.cc:381
Base salsa TaskState class.
Definition: TaskState.hh:16
virtual Socket * onExit(std::string self, Message *msg, std::vector< std::string > &out)
Definition: NodeManager.cc:141
virtual void terminateJob(std::string uuid)
Definition: NodeManager.cc:337
std::map< std::string, std::shared_ptr< Consumer > > mConsumers
List of Consumers.
Definition: NodeManager.hh:81
virtual void addTaskSlot()
Definition: NodeManager.cc:431
void noMoreTasks(std::string jobUUID)
Definition: NodeManager.cc:490
NodeManager class.
Definition: NodeManager.hh:20
Job class.
Definition: Job.hh:16
void resultTask(TaskInfo *task)
Definition: NodeManager.cc:278
void addFeeder(std::string uuid, std::shared_ptr< Socket > s)
Definition: NodeManager.cc:60
Base Publisher class.
Definition: Publisher.hh:14
Job * job(std::string uuid)
Definition: NodeManager.cc:418
virtual Publisher * publisher() const
Definition: NodeManager.cc:549
std::map< std::string, Job * > mJobs
List of jobs.
Definition: NodeManager.hh:78
void jobs(std::string clientUUID, std::vector< std::string > &jobs) const
Definition: NodeManager.cc:465
virtual void runTask(TaskState *ts, std::string wk, std::string upstream)=0
Run task interface.
TaskInfo * getNextTask()
Definition: NodeManager.cc:252
virtual void publish(std::string id) const
Definition: NodeManager.cc:557
virtual Socket * onWhisper(std::string self, Message *msg, std::vector< std::string > &out)
Definition: NodeManager.cc:179
std::map< std::string, std::shared_ptr< Worker > > mWorkers
List of Workers.
Definition: NodeManager.hh:80
virtual ~NodeManager()
Definition: NodeManager.cc:12
std::shared_ptr< Consumer > consumer(std::string uuid) const
Definition: NodeManager.cc:393
QueueType
Queue types.
Definition: Job.hh:19
Base Socket class.
Definition: Socket.hh:15
void addTask(TaskInfo *taskInfo, std::string cuuid, std::string fuuid, Salsa::Job::QueueType t=Salsa::Job::pending)
Definition: NodeManager.cc:220
void addConsumer(std::string uuid, std::shared_ptr< Socket > s)
Definition: NodeManager.cc:53
TaskPool * mpTaskPool
Task pool.
Definition: NodeManager.hh:83
int32_t nSlots(double mult=1.0) const
Definition: NodeManager.cc:477
virtual bool sendWhisper(Socket *s, std::string to, std::vector< std::string > &v)
Definition: NodeManager.cc:211
Publisher * mpPublisher
Publisher.
Definition: NodeManager.hh:84
void addWorker(std::string uuid, std::shared_ptr< Socket > s)
Definition: NodeManager.cc:67
virtual bool handleTaskPool(void *p)
Definition: NodeManager.cc:441
TaskPool * taskPool()
Get NM&#39;s task pool.
Definition: NodeManager.cc:449
Base Salsa Object class.
Definition: Object.hh:15
void print(std::string opt="") const
Definition: NodeManager.cc:30
virtual void terminateJobAll()
Definition: NodeManager.cc:364
std::map< std::string, std::shared_ptr< Feeder > > mFeeders
List of Feeders.
Definition: NodeManager.hh:82
virtual Socket * onEnter(std::string self, std::string fromType, Message *msg, std::vector< std::string > &out)
Definition: NodeManager.cc:76
Base salsa TaskPool class.
Definition: TaskPool.hh:18
bool hasJobs() const
Definition: NodeManager.cc:457