Archiver.h

00001 #ifndef ARCHIVER_H
00002 #define ARCHIVER_H
00003 
00004 #include <is/info.h>
00005 #include <is/inforeceiver.h>
00006 #include <ipc/object.h>
00007 #include <ipc/server.h>
00008 
00009 #include <string>
00010 #include <memory>
00011 #include <sys/types.h>
00012 #include <unistd.h>
00013 
00014 #include <boost/thread.hpp>
00015 #include "ArchivingServiceInterface.hh"
00016 #include "ArchiverArguments.h"
00017 #include "Sct/Exception.h"
00018 #include "Sct/ConfigurationException.h"
00019 #include "Sct/LogicErrors.h"
00020 #include "Sct/IoExceptions.h"
00021 #include "Sct/Archive/IOManagerArchive.h"
00022 
00023 using namespace Sct;
00024 namespace SctArchiving {
00025   class ArchivingCommand;
00026   class ArchivingWorkerGroup;
00035   class Archiver: public IPCNamedObject<POA_ArchivingServiceI::ArchivingServiceInterface, ipc::multi_thread>, private boost::noncopyable{
00036   private:
00038     Archiver(ArchiverArguments args);
00039   protected:
00041     ~Archiver() throw();
00042   private:
00043     static Archiver* archiver; 
00044     
00045   public:
00046     void shutdown() {};
00051     static Archiver& instance();
00052     
00057     static Archiver& initialize(ArchiverArguments args);
00061     void go(unsigned nWorker) throw(IsException);
00065     const char* getStatus() const throw();
00070     virtual char* status();
00074     virtual CORBA::Short busy();
00078     virtual CORBA::Short queueLength();
00082     void setFifo(bool);
00086     bool isFifo();
00090     virtual void suspendCallbacks (CORBA::Boolean doSuspend);
00094     static void archive_callback(ISCallbackInfo * isc);
00095     
00097     IPCServer& getArchiverServer() throw();
00098     
00102     virtual void archiveISName (const char* ioNameIS);
00106     virtual void retrieveISName (const char* ioNameIS);
00110     virtual void retrieveArchName (const char* archivingName);
00114     virtual void retrieve(const char* runNumber, const char* scanNumber, const char* className, const char* specifier); 
00118     virtual CORBA::Short getCompressionLevel ();
00122     virtual void setCompressionLevel (CORBA::Short level);
00126     virtual void setRetrieveIsServer (const char* serverName);
00127     /*
00128       Add an ArchivingCommand to the workergroup.
00129     */
00130     virtual void addCommand(boost::shared_ptr<ArchivingCommand> command) const;
00134     void incrimentNArchived() throw();
00138     void incrimentNRetrieved() throw();
00142     void incrimentNValidated() throw();
00146     void addISTime(double time) throw();
00150     void addFileTime(double time) throw();
00154     Sct::Archive::IOManagerArchive& Archiver::getIOManagerArchive() const;
00158     string internal_getRetrieveIsServer() const throw();
00159 
00161     virtual void setPersistentDirectory(const char* newDirectory);
00162 
00166     char * getRetrieveIsServer() throw();
00167     /* 
00168        save any unsaved data - may be time consuming! 
00169     */
00170     void recover();
00171   private:
00175     ArchivingWorkerGroup* workergroup;
00179     void subscribe(const string& servername, const string& regexp, ISCallbackInfo::Callback callback);
00183     std::auto_ptr<ISInfoReceiver> infoReceiver;
00184     /* counters */
00185     long nArchived;
00186     long nRetrieved;
00187     long nValidated;
00188     double isTimeTaken;
00189     double fileTimeTaken;
00190     mutable boost::recursive_mutex counterMutex; 
00191     double getAverageTime(double time) const throw();
00193     Sct::Archive::IOManagerArchive* m_archive_manager;
00194     std::string m_retrieval_is_server;
00195     bool m_suspend_callback;
00196     ArchiverArguments m_args;
00197 }; // end of definition of class Archiver;
00198  
00199 }// end of namespace SctArchiving
00200 #endif // #ifndef ARCHIVER_H

Generated on Mon Feb 6 14:01:16 2006 for SCT DAQ/DCS Software - C++ by  doxygen 1.4.6