fhq-server  v0.2.33
Documentation for fhq-server. FreeHackQuest is an open source platform for competitions of computer security.
jobs_pool.h
Go to the documentation of this file.
1 #ifndef JOBS_POOL_H
2 #define JOBS_POOL_H
3 
4 #include <string>
5 #include <mutex>
6 #include <deque>
7 #include <thread>
8 #include <vector>
9 
10 class JobAsync {
11  public:
12  JobAsync(const std::string &sName);
13  const std::string &name();
14  virtual bool run(const std::string &sWorkerId) = 0;
15 
16  private:
17  std::string m_sName;
18 };
19 
20 // ---------------------------------------------------------------------
21 
22 class JobSchedule {
23  public:
24  // TODO
25 };
26 
27 // ---------------------------------------------------------------------
28 
30  public:
31  JobAsync *pop();
32  void push(JobAsync *pJobAsync);
33  void cleanup();
34  bool isEmpty();
35 
36  private:
37  std::string TAG;
38 
39  std::mutex m_mtxJobsAsyncDeque;
40  std::deque<JobAsync *> m_dequeJobsAsync;
41 };
42 
43 // ---------------------------------------------------------------------
44 
46  public:
47 
48  JobsThreadWorker(const std::string &sName, JobAsyncDeque *pDeque);
49 
50  void start();
51  void stop();
52  bool isBuzy();
53  void run();
54  private:
55  std::string TAG;
56  std::string m_sName;
58  bool m_bBuzy;
59  bool m_bStop;
60  pthread_t m_threadWorker;
61 };
62 
63 // ---------------------------------------------------------------------
64 
66 extern std::vector<JobsThreadWorker *> *g_vJobsFastWorkers;
67 extern int g_nMaxJobFastWorker;
68 
69 extern JobAsyncDeque *g_pJobsLongPool; // TODO
70 extern JobAsyncDeque *g_pJobsDelay; // TODO
71 extern JobAsyncDeque *g_pJobsCron; // TODO
72 // TODO control thread will be add delay and cron jobs to long
73 
74 // TODO statistics
75 // TODO max thread different workers
76 
77 class JobsPool {
78  public:
79  static void initGlobalVariables();
80 
81  static void addJobSlow(JobAsync *pJobAsync);
82  static void addJobFast(JobAsync *pJobAsync);
83  static void addJobDelay(int nMilliseconds, JobAsync *pJobAsync);
84  static void addJobCron(JobSchedule *pJobSchedule,JobAsync *pJobAsync);
85 
86  static void stop();
87  static void start();
88  static void waitForDone();
89  static void cleanup();
90 };
91 
92 // ---------------------------------------------------------------------
93 
94 #endif // JOBS_POOL_H
JobAsyncDeque * g_pJobsLongPool
std::vector< JobsThreadWorker * > * g_vJobsFastWorkers
Definition: jobs_pool.cpp:126
virtual bool run(const std::string &sWorkerId)=0
Definition: jobs_pool.h:29
JobAsyncDeque * g_pJobsCron
std::string TAG
Definition: jobs_pool.h:55
bool m_bBuzy
Definition: jobs_pool.h:58
Definition: jobs_pool.h:77
int g_nMaxJobFastWorker
Definition: jobs_pool.cpp:127
std::mutex m_mtxJobsAsyncDeque
Definition: jobs_pool.h:39
JobAsync(const std::string &sName)
Definition: jobs_pool.cpp:6
Definition: jobs_pool.h:45
std::string m_sName
Definition: jobs_pool.h:17
Definition: jobs_pool.h:22
bool m_bStop
Definition: jobs_pool.h:59
std::string TAG
Definition: jobs_pool.h:37
JobAsyncDeque * m_pDeque
Definition: jobs_pool.h:57
std::deque< JobAsync * > m_dequeJobsAsync
Definition: jobs_pool.h:40
pthread_t m_threadWorker
Definition: jobs_pool.h:60
const std::string & name()
Definition: jobs_pool.cpp:12
JobAsyncDeque * g_pJobsFastPool
Definition: jobs_pool.cpp:125
Definition: jobs_pool.h:10
JobAsyncDeque * g_pJobsDelay
std::string m_sName
Definition: jobs_pool.h:56