Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

ServerConnection.h

Go to the documentation of this file.
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         /* IMPORTANT: must match lbapi.h */
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         /* copy and assignment */
00061         QueryRecord(const QueryRecord &);
00062         QueryRecord& operator=(const QueryRecord &);
00063 
00064         /* constructors for simple attribute queries */
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         /* this one is for attr==TIME and particular state */
00070         QueryRecord(const Attr, const Op, const int, const struct timeval &);
00071         
00072         /* constructors for WITHIN operator */
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         /* convenience for user tags */
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         /* conversion to C API type */
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         /* DEPRECATED: do not use
00121          * connections are now handled automagically inside the implementation
00122          */
00123         ServerConnection(const std::string &);
00124 
00126         void open(const std::string &);
00127 
00129         void close(void);
00130 
00131         /* END DEPRECATED */
00132 
00133         /* set & get parameter methods */
00134 
00135         /* consumer parameter settings */
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         /* end of set & get */
00149 
00150         virtual ~ServerConnection();
00151 
00152 
00153         /* consumer API */
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

Generated on Wed Mar 1 00:38:53 2006 for L&B API CPP by doxygen 1.3.5