Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Data Structures | File List | Namespace Members | Data Fields | Related Pages

Archiver.h

00001 #ifndef ARCHIVER_H
00002 #define ARCHIVER_H
00003 
00004 #include <is/isinfo.h>
00005 #include <ipc/object.h>
00006 #include <ipc/server.h>
00007 
00008 #include <string>
00009 #include <memory>
00010 #include <sys/types.h>
00011 #include <unistd.h>
00012 
00013 #include <boost/thread.hpp>
00014 #include "ArchivingServiceI.hh"
00015 #include "Sct/Exception.h"
00016 #include "Sct/ConfigurationException.h"
00017 #include "Sct/LogicErrors.h"
00018 #include "Sct/IoExceptions.h"
00019 #include "Sct/Archive/IOManagerArchive.h"
00020 
00021 using namespace Sct;
00022 namespace SctArchiving {
00023   class ArchivingCommand;
00024   class ArchivingWorkerGroup;
00030   class Archiver: public IPCObject, public virtual ArchivingServiceI_T_ArchivingServiceInterface, private boost::noncopyable{
00031   private:
00033     Archiver() throw(ConfigurationException);
00035     ~Archiver() throw();
00036     static Archiver* archiver; 
00037     
00038   public:
00043     static Archiver& instance();
00044     
00049     static Archiver& initialize() throw(ConfigurationException);
00050     
00054     void go(unsigned nWorker) throw(IsException);
00058     const char* getStatus() const throw();
00063     virtual char* status(ArchivingServiceIStatus* status);
00065     virtual ilu_ShortInteger busy(ArchivingServiceIStatus *_status);
00067     virtual ilu_ShortInteger queueLength(ArchivingServiceIStatus *_status);
00069     virtual void suspendCallbacks (ArchivingServiceIStatus *_status, ilu_Boolean doSuspend);
00073     static void archive_callback(ISCallbackInfo * isc);
00074     
00076     IPCServer& getArchiverServer() throw();
00077     
00079     virtual void archiveISName (ArchivingServiceIStatus *status, char* ioNameIS);
00081     virtual void retrieveISName (ArchivingServiceIStatus *status, char* ioNameIS);
00083     virtual void retrieveArchName (ArchivingServiceIStatus *status, char* archivingName);
00085     virtual void retrieve(ArchivingServiceIStatus *_status, char* runNumber, char* scanNumber, char* className, char* specifier); 
00087     virtual ilu_ShortInteger getCompressionLevel (ArchivingServiceIStatus *_status);
00089     virtual void setCompressionLevel (ArchivingServiceIStatus *_status, ilu_ShortInteger level);
00091     virtual void setRetrieveIsServer (ArchivingServiceIStatus *_status, ilu_T_CString serverName);
00092     /*
00093       Add an ArchivingCommand to the workergroup.
00094     */
00095     virtual void addCommand(boost::shared_ptr<ArchivingCommand> command) const;
00099     void incrimentNArchived() throw();
00103     void incrimentNRetrieved() throw();
00107     void incrimentNValidated() throw();
00111     void addISTime(double time) throw();
00115     void addFileTime(double time) throw();
00119     Sct::Archive::IOManagerArchive& Archiver::getIOManagerArchive() const;
00121     string getRetrieveIsServer() const throw();
00122   private:
00124     ArchivingWorkerGroup* workergroup;
00126     void subscribe(const string& servername, const string& regexp, ISCallbackInfo::Callback callback);
00128     std::auto_ptr<ISInfoReceiver> infoReceiver;
00129     /* counters */
00130     long nArchived;
00131     long nRetrieved;
00132     long nValidated;
00133     double isTimeTaken;
00134     double fileTimeTaken;
00135     boost::mutex counterMutex; 
00136     double getAverageTime(double time) const throw();
00138     Sct::Archive::IOManagerArchive* m_archive_manager;
00139 
00140     std::string m_retrieval_is_server;
00141     bool m_suspend_callback;
00142 }; // end of definition of class Archiver;
00143  
00144 }// end of namespace SctArchiving
00145 #endif // #ifndef ARCHIVER_H

Generated on Thu Jul 15 09:50:42 2004 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5