00001 #ifndef __EDG_WORKLOAD_LOGGING_SERVERCONNECTION__
00002 #define __EDG_WORKLOAD_LOGGING_SERVERCONNECTION__
00003
00004 #ident "$Header: /local/reps/lcgware/workload/logging/client/ServerConnection.h,v 1.28 2004/06/14 16:09:39 dhsmith Exp $"
00005
00011 #include <string.h>
00012 #include <list>
00013
00014 #include "edg/workload/common/jobid/JobId.h"
00015 #include "edg/workload/logging/client/Event.h"
00016 #include "edg/workload/logging/client/JobStatus.h"
00017
00018 #include "edg/workload/logging/client/consumer.h"
00019
00020 EWL_BEGIN_NAMESPACE;
00021
00023 class QueryRecord {
00024 public:
00025 friend class ServerConnection;
00026 friend edg_wll_QueryRec *convertQueryVector(const std::vector<QueryRecord> &in);
00027
00028
00029 enum Attr {
00030 UNDEF=0,
00031 JOBID,
00032 OWNER,
00033 STATUS,
00034 LOCATION,
00035 DESTINATION,
00036 DONECODE,
00037 USERTAG,
00038 TIME,
00039 LEVEL,
00040 HOST,
00041 SOURCE,
00042 INSTANCE,
00043 EVENT_TYPE,
00044 CHKPT_TAG,
00045 RESUBMITTED,
00046 PARENT,
00047 EXITCODE,
00048 };
00049
00050 enum Op {
00051 EQUAL=EDG_WLL_QUERY_OP_EQUAL,
00052 LESS=EDG_WLL_QUERY_OP_LESS,
00053 GREATER=EDG_WLL_QUERY_OP_GREATER,
00054 WITHIN=EDG_WLL_QUERY_OP_WITHIN,
00055 UNEQUAL=EDG_WLL_QUERY_OP_UNEQUAL
00056 };
00057
00058 QueryRecord();
00059
00060
00061 QueryRecord(const QueryRecord &);
00062 QueryRecord& operator=(const QueryRecord &);
00063
00064
00065 QueryRecord(const Attr, const Op, const std::string &);
00066 QueryRecord(const Attr, const Op, const int);
00067 QueryRecord(const Attr, const Op, const struct timeval &);
00068 QueryRecord(const Attr, const Op, const edg::workload::common::jobid::JobId&);
00069
00070 QueryRecord(const Attr, const Op, const int, const struct timeval &);
00071
00072
00073 QueryRecord(const Attr, const Op, const std::string &, const std::string &);
00074 QueryRecord(const Attr, const Op, const int, const int);
00075 QueryRecord(const Attr, const Op, const struct timeval &, const struct timeval &);
00076 QueryRecord(const Attr, const Op, const int, const struct timeval &, const struct timeval &);
00077
00078
00079 QueryRecord(const std::string &, const Op, const std::string &);
00080 QueryRecord(const std::string &, const Op, const std::string &, const std::string &);
00081
00082 ~QueryRecord();
00083
00084 protected:
00085
00086
00087 operator edg_wll_QueryRec() const;
00088
00089 private:
00090 Attr attr;
00091 Op oper;
00092 std::string tag_name;
00093 int state;
00094 std::string string_value;
00095 edg::workload::common::jobid::JobId jobid_value;
00096 int int_value;
00097 struct timeval timeval_value;
00098 std::string string_value2;
00099 int int_value2;
00100 struct timeval timeval_value2;
00101 };
00102
00103
00105 enum AggOp { AGG_MIN=1, AGG_MAX, AGG_COUNT };
00106
00107
00114 class ServerConnection {
00115 public:
00116 friend class Job;
00117
00118 ServerConnection(void);
00119
00120
00121
00122
00123 ServerConnection(const std::string &);
00124
00126 void open(const std::string &);
00127
00129 void close(void);
00130
00131
00132
00133
00134
00135
00136 void setQueryServer(const std::string&, int);
00137 void setQueryTimeout(int);
00138
00139 void setX509Proxy(const std::string&);
00140 void setX509Cert(const std::string&, const std::string&);
00141
00142 std::pair<std::string, int> getQueryServer() const;
00143 int getQueryTimeout() const;
00144
00145 std::string getX509Proxy() const;
00146 std::pair<std::string, std::string> getX509Cert() const;
00147
00148
00149
00150 virtual ~ServerConnection();
00151
00152
00153
00154
00156 std::pair<std::vector<QueryRecord::Attr>,
00157 std::vector<std::string> > getIndexedAttrs(void);
00158
00160 std::pair<int,int> getLimits(void) const;
00161
00163 void setQueryJobsLimit(int);
00164 void setQueryEventsLimit(int);
00165
00171 void queryEvents(const std::vector<QueryRecord>& job_cond,
00172 const std::vector<QueryRecord>& event_cond,
00173 std::vector<Event>&) const;
00174
00175 const std::vector<Event> queryEvents(const std::vector<QueryRecord>& job_cond,
00176 const std::vector<QueryRecord>& event_cond) const;
00177
00178 const std::list<Event> queryEventsList(const std::vector<QueryRecord>& job_cond,
00179 const std::vector<QueryRecord>& event_cond) const;
00180
00181
00188 std::string queryEventsAggregate(const std::vector<QueryRecord>& job_cond,
00189 const std::vector<QueryRecord>& event_cond,
00190 enum AggOp const op,
00191 std::string const attr) const;
00192
00193
00200 void queryEvents(const std::vector<std::vector<QueryRecord> >& job_cond,
00201 const std::vector<std::vector<QueryRecord> >& event_cond,
00202 std::vector<Event>&) const;
00203
00204 const std::vector<Event>
00205 queryEvents(const std::vector<std::vector<QueryRecord> >& job_cond,
00206 const std::vector<std::vector<QueryRecord> >& event_cond) const;
00207
00208
00216 void queryJobs(const std::vector<QueryRecord>& query,
00217 std::vector<edg::workload::common::jobid::JobId>& ids) const;
00218
00219 const std::vector<edg::workload::common::jobid::JobId>
00220 queryJobs(const std::vector<QueryRecord>& query) const;
00221
00222
00230 void queryJobs(const std::vector<std::vector<QueryRecord> >& query,
00231 std::vector<edg::workload::common::jobid::JobId>& ids) const;
00232
00233 const std::vector<edg::workload::common::jobid::JobId>
00234 queryJobs(const std::vector<std::vector<QueryRecord> >& query) const;
00235
00243 void queryJobStates(const std::vector<QueryRecord>& query,
00244 int flags,
00245 std::vector<JobStatus> & states) const;
00246 const std::vector<JobStatus> queryJobStates(const std::vector<QueryRecord>& query,
00247 int flags) const;
00248
00249 const std::list<JobStatus> queryJobStatesList(const std::vector<QueryRecord>& query,
00250 int flags) const;
00251
00259 void queryJobStates(const std::vector<std::vector<QueryRecord> >& query,
00260 int flags,
00261 std::vector<JobStatus> & states) const;
00262 const std::vector<JobStatus>
00263 queryJobStates(const std::vector<std::vector<QueryRecord> >& query,
00264 int flags) const;
00265
00269 void userJobStates(std::vector<JobStatus>& stateList) const;
00270 const std::vector<JobStatus> userJobStates() const;
00271
00272
00276 void userJobs(std::vector<edg::workload::common::jobid::JobId> &) const;
00277 const std::vector<edg::workload::common::jobid::JobId> userJobs() const;
00278
00280 void setParam(edg_wll_ContextParam, int);
00281 void setParam(edg_wll_ContextParam, const std::string);
00282 void setParam(edg_wll_ContextParam, const struct timeval &);
00283
00284 int getParamInt(edg_wll_ContextParam) const;
00285 std::string getParamString(edg_wll_ContextParam) const;
00286 struct timeval getParamTime(edg_wll_ContextParam) const;
00287
00288 protected:
00289
00290 edg_wll_Context getContext(void) const;
00291
00292 private:
00293 edg_wll_Context context;
00294 };
00295
00296 EWL_END_NAMESPACE;
00297
00298 #endif