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 
59  virtual void SetUserConfig(const UserConfig& uc) { usercfg = &uc; }
60 
61  protected:
68  std::list<std::string> supportedInterfaces;
69  static Logger logger;
70  };
71 
80  : public Loader {
81 
82  public:
87 
93 
99  JobControllerPlugin* load(const std::string& name, const UserConfig& uc);
100 
101  JobControllerPlugin* loadByInterfaceName(const std::string& name, const UserConfig& uc);
102 
103  private:
104  void initialiseInterfacePluginMap(const UserConfig& uc);
105 
106  std::multimap<std::string, JobControllerPlugin*> jobcontrollers;
107  static std::map<std::string, std::string> interfacePluginMap;
108  };
109 
114  class JobControllerPluginArgument : public PluginArgument {
115  public:
116  JobControllerPluginArgument(const UserConfig& usercfg) : usercfg(usercfg) {}
118  operator const UserConfig&() { return usercfg; }
119  private:
120  const UserConfig& usercfg;
121  };
122 
123 } // namespace Arc
124 
125 #endif // __ARC_JOBCONTROLLER_H__
Arc namespace contains all core ARC classes.
Definition: ArcConfig.h:11
User configuration class
Definition: UserConfig.h:196
virtual void SetUserConfig(const UserConfig &uc)
Definition: JobControllerPlugin.h:59
const UserConfig * usercfg
Definition: JobControllerPlugin.h:67
A logger class.
Definition: Logger.h:493
Job.
Definition: Job.h:33
Definition: JobControllerPlugin.h:114
Definition: JobControllerPlugin.h:79
JobControllerPlugin * load(const std::string &name, const UserConfig &uc)
Class to represent general URLs.
Definition: URL.h:88
Definition: JobControllerPlugin.h:29