ARC SDK
JobControllerPlugin.h
Go to the documentation of this file.
1 // -*- indent-tabs-mode: nil -*-
2 
3 #ifndef __ARC_JOBCONTROLLER_H__
4 #define __ARC_JOBCONTROLLER_H__
5 
10 #include <list>
11 #include <vector>
12 #include <string>
13 
14 #include <arc/URL.h>
15 #include <arc/compute/Job.h>
16 #include <arc/loader/Loader.h>
17 #include <arc/loader/Plugin.h>
18 
19 namespace Arc {
20 
21  class Broker;
22  class Logger;
23  class UserConfig;
24 
30  : public Plugin {
31  protected:
32  JobControllerPlugin(const UserConfig& usercfg, PluginArgument* parg)
33  : Plugin(parg), usercfg(usercfg) {}
34  public:
35  virtual ~JobControllerPlugin() {}
36 
37  virtual void UpdateJobs(std::list<Job*>& jobs, bool isGrouped = false) const;
38  virtual void UpdateJobs(std::list<Job*>& jobs, std::list<std::string>& IDsProcessed, std::list<std::string>& IDsNotProcessed, bool isGrouped = false) const = 0;
39 
40  virtual bool CleanJobs(const std::list<Job*>& jobs, bool isGrouped = false) const;
41  virtual bool CleanJobs(const std::list<Job*>& jobs, std::list<std::string>& IDsProcessed, std::list<std::string>& IDsNotProcessed, bool isGrouped = false) const = 0;
42  virtual bool CancelJobs(const std::list<Job*>& jobs, bool isGrouped = false) const;
43  virtual bool CancelJobs(const std::list<Job*>& jobs, std::list<std::string>& IDsProcessed, std::list<std::string>& IDsNotProcessed, bool isGrouped = false) const = 0;
44  virtual bool RenewJobs(const std::list<Job*>& jobs, bool isGrouped = false) const;
45  virtual bool RenewJobs(const std::list<Job*>& jobs, std::list<std::string>& IDsProcessed, std::list<std::string>& IDsNotProcessed, bool isGrouped = false) const = 0;
46  virtual bool ResumeJobs(const std::list<Job*>& jobs, bool isGrouped = false) const;
47  virtual bool ResumeJobs(const std::list<Job*>& jobs, std::list<std::string>& IDsProcessed, std::list<std::string>& IDsNotProcessed, bool isGrouped = false) const = 0;
48 
49  virtual bool GetJobDescription(const Job& job, std::string& desc_str) const = 0;
50  virtual bool GetURLToJobResource(const Job& job, Job::ResourceType resource, URL& url) const = 0;
51 
52  virtual std::string GetGroupID() const { return ""; }
53 
54  virtual const std::list<std::string>& SupportedInterfaces() const { return supportedInterfaces; };
55 
56  protected:
57  const UserConfig& usercfg;
58  std::list<std::string> supportedInterfaces;
59  static Logger logger;
60  };
61 
70  : public Loader {
71 
72  public:
77 
83 
89  JobControllerPlugin* load(const std::string& name, const UserConfig& uc);
90 
91  JobControllerPlugin* loadByInterfaceName(const std::string& name, const UserConfig& uc);
92 
93  private:
94  void initialiseInterfacePluginMap(const UserConfig& uc);
95 
96  std::multimap<std::string, JobControllerPlugin*> jobcontrollers;
97  static std::map<std::string, std::string> interfacePluginMap;
98  };
99 
104  class JobControllerPluginArgument : public PluginArgument {
105  public:
106  JobControllerPluginArgument(const UserConfig& usercfg) : usercfg(usercfg) {}
108  operator const UserConfig&() { return usercfg; }
109  private:
110  const UserConfig& usercfg;
111  };
112 
113 } // namespace Arc
114 
115 #endif // __ARC_JOBCONTROLLER_H__