Update to ARC 4.1.0
[gp-arc-client-c.git] / ext / utils.h
1 #include <unistd.h>
2 #include <string>
3 #include <list>
4 #include <arc/Logger.h>
5 #include <arc/UserConfig.h>
6 #include <arc/OptionParser.h>
7 #include <arc/compute/Endpoint.h>
8 #include <arc/compute/Job.h>
9 #include <arc/compute/JobInformationStorage.h>
10
11 #ifdef TEST
12 #define RUNMAIN(X) test_##X##_main
13 #else
14 #define RUNMAIN(X) X(int argc, char **argv); \
15   int main(int argc, char **argv) { _exit(X(argc,argv)); return 0; } \
16   int X
17 #endif
18
19 /// Returns the URLs of computing elements selected by alias, group name, URL or the default ones
20 /**
21   This helper method gets a list of string representing computing elements. Each item of the list
22   is either an alias of service configured in the UserConfig, a name of a group configured in the
23   UserConfig, or a URL of service not configured in the UserConfig. If the list is empty, the
24   default services will be selected from the UserConfig. The method returns the URLs of the
25   selected services.
26   
27   This is meant to be used by the command line programs where the user is specifying
28   a list of computing elements by alias, group name (which has to be looked up in the UserConfig),
29   or by URL.
30   \param[in] usercfg is the UserConfig object containing information about configured services
31   \param[in] computingelements is a list of strings containing aliases, group names, or URLs of computing elements
32   \return a list of URL strings, the endpoints of the selected services, or the default ones if none was selected
33 */
34 std::list<std::string> getSelectedURLsFromUserConfigAndCommandLine(Arc::UserConfig usercfg, std::list<std::string> computingelements);
35
36 /// Combine the list of rejected discovery URLs from the UserConfig with the ones specified in a list
37 /**
38   Helper method for the command line programs to combine the list of rejected discovery URLs
39   specified by the user at the command line with the ones configured in the UserConfig.
40   
41   The rejected discovery URLs supposed to cause the service discovery not to discovery computing elements
42   whose URL matches any of these strings.
43   
44   \param[in] usercfg is the UserConfig object containing information about configured services
45   \param[in] rejectdiscovery is a list of strings, which will be also added
46     to the resulting list besides the ones from the UserConfig
47   \return a list of strings which are the rejected URLs from the UserConfig and
48     the ones given as the second argument combined
49 */
50 std::list<std::string> getRejectDiscoveryURLsFromUserConfigAndCommandLine(Arc::UserConfig usercfg, std::list<std::string> rejectdiscovery);
51
52 /// Combine the list of rejected management URLs from the UserConfig with the ones specified in a list
53 /**
54   Helper method for the command line programs to combine the list of rejected management URLs
55   specified by the user at the command line with the ones configured in the UserConfig.
56   
57   The rejected management URLs supposed to cause the job management commands not to manage
58   jobs which reside on computing elements whose URL matches any of the items in the list
59   
60   \param[in] usercfg is the UserConfig object containing information about configured services
61   \param[in] rejectmanagement is a list of strings, which will be also added
62     to the resulting list besides the ones from the UserConfig
63   \return a list of strings which are the rejected URLs from the UserConfig and
64     the ones given as the second argument combined
65 */
66 std::list<std::string> getRejectManagementURLsFromUserConfigAndCommandLine(Arc::UserConfig usercfg, std::list<std::string> rejectmanagement);
67
68 /// Looks up or creates Endpoints from strings specified at the command line using the information from the UserConfig
69 /**
70   This helper method gets a list of strings representing service registries and computing element,
71   along with a requested submisison interface, looks up all the services from the UserConfig,
72   and return the Endpoints found there, or create new Endpoints for services not found in the Userconfig.
73   If there are no registries or computing elements given, then the default services will be returned.
74   
75   This is meant to be used by the command line programs where the user is specifying service registries
76   and/or computing elements with several strings, which could refer to services configured in the
77   UserConfig (aliases or groups), or they can be URLs refering to services which are not configured in
78   the UserConfig. This method looks up the aliases and group names, and if a string is not an alias or
79   a group name, then it's assumed to be a URL.
80   
81   \param[in] usercfg is the UserConfig object containing information about configured services
82   \param[in] registries is a list of strings containing aliases, group names, or URLs of service registries
83   \param[in] computingelements is a list of strings containing aliases, group names, or URLs of computing elements
84   \return a list of Endpoint objects containing the services corresponding the given strings or the default services.
85 */
86 std::list<Arc::Endpoint> getServicesFromUserConfigAndCommandLine(Arc::UserConfig usercfg, std::list<std::string> registries, std::list<std::string> computingelements, std::string requestedSubmissionInterfaceName = "", std::string infointerface = "");
87
88 void showplugins(const std::string& program, const std::list<std::string>& types, Arc::Logger& logger, const std::string& chosenBroker = "");
89
90 bool checkproxy(const Arc::UserConfig& uc);
91
92 void splitendpoints(std::list<std::string>& selected, std::list<std::string>& rejected);
93
94 /**
95  * Creates a new JobInformationStorage object. Caller has responsibility of
96  * deleting returned object.
97  */
98 Arc::JobInformationStorage* createJobInformationStorage(const Arc::UserConfig& uc);
99
100 class ClientOptions : public Arc::OptionParser {
101 public:
102   enum Client_t {
103     CO_SUB, CO_MIGRATE, CO_RESUB, CO_TEST,
104     CO_CAT, CO_CLEAN, CO_GET, CO_KILL, CO_RENEW, CO_RESUME, CO_STAT,
105     CO_SYNC,
106     CO_INFO,
107     CO_ACL
108  };
109
110   ClientOptions(Client_t c,
111                 const std::string& arguments = "",
112                 const std::string& summary = "",
113                 const std::string& description = "");
114
115   bool dryrun;
116   bool dumpdescription;
117   bool show_credentials;
118   bool show_plugins;
119   bool showversion;
120   bool all;
121   bool forcemigration;
122   bool keep;
123   bool forcesync;
124   bool truncate;
125   bool longlist;
126   bool printids;
127   bool same;
128   bool notsame;
129   bool forceclean;
130   bool show_stdout;
131   bool show_stderr;
132   bool show_joblog;
133   bool usejobname;
134   bool forcedownload;
135   bool list_configured_services;
136   bool direct_submission;
137   bool show_unavailable;
138
139   int testjobid;
140   int runtime;
141   int timeout;
142
143   std::string joblist;
144   std::string jobidoutfile;
145   std::string conffile;
146   std::string debug;
147   std::string broker;
148   std::string sort;
149   std::string rsort;
150   std::string downloaddir;
151   std::string requestedSubmissionInterfaceName;
152   std::string infointerface;
153
154   std::list<std::string> clusters;
155   std::list<std::string> qlusters;
156   std::list<std::string> indexurls;
157   std::list<std::string> jobdescriptionstrings;
158   std::list<std::string> jobdescriptionfiles;
159   std::list<std::string> jobidinfiles;
160   std::list<std::string> status;
161
162   std::list<std::string> rejectdiscovery;
163   std::list<std::string> rejectmanagement;
164 };