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 "ArchivingServiceInterface.hh"
00015 #include "ArchiverArguments.h"
00016 #include "Sct/Exception.h"
00017 #include "Sct/ConfigurationException.h"
00018 #include "Sct/LogicErrors.h"
00019 #include "Sct/IoExceptions.h"
00020 #include "Sct/Archive/IOManagerArchive.h"
00021 
00022 using namespace Sct;
00023 namespace SctArchiving {
00024   class ArchivingCommand;
00025   class ArchivingWorkerGroup;
00034   class Archiver: public IPCNamedObject<POA_ArchivingServiceI::ArchivingServiceInterface, ipc::multi_thread>, private boost::noncopyable{
00035   private:
00037     Archiver(ArchiverArguments args);
00038   protected:
00040     ~Archiver() throw();
00041   private:
00042     static Archiver* archiver; 
00043     
00044   public:
00045     void shutdown() {};
00050     static Archiver& instance();
00051     
00056     static Archiver& initialize(ArchiverArguments args);
00060     void go(unsigned nWorker) throw(IsException);
00064     const char* getStatus() const throw();
00069     virtual char* status();
00073     virtual CORBA::Short busy();
00077     virtual CORBA::Short queueLength();
00081     virtual void suspendCallbacks (CORBA::Boolean doSuspend);
00085     static void archive_callback(ISCallbackInfo * isc);
00086     
00088     IPCServer& getArchiverServer() throw();
00089     
00093     virtual void archiveISName (const char* ioNameIS);
00097     virtual void retrieveISName (const char* ioNameIS);
00101     virtual void retrieveArchName (const char* archivingName);
00105     virtual void retrieve(const char* runNumber, const char* scanNumber, const char* className, const char* specifier); 
00109     virtual CORBA::Short getCompressionLevel ();
00113     virtual void setCompressionLevel (CORBA::Short level);
00117     virtual void setRetrieveIsServer (const char* serverName);
00118     /*
00119       Add an ArchivingCommand to the workergroup.
00120     */
00121     virtual void addCommand(boost::shared_ptr<ArchivingCommand> command) const;
00125     void incrimentNArchived() throw();
00129     void incrimentNRetrieved() throw();
00133     void incrimentNValidated() throw();
00137     void addISTime(double time) throw();
00141     void addFileTime(double time) throw();
00145     Sct::Archive::IOManagerArchive& Archiver::getIOManagerArchive() const;
00149     string internal_getRetrieveIsServer() const throw();
00150 
00152     virtual void setPersistentDirectory(const char* newDirectory);
00153 
00157     char * getRetrieveIsServer() throw();
00158     /* 
00159        save any unsaved data - may be time consuming! 
00160     */
00161     void recover();
00162   private:
00166     ArchivingWorkerGroup* workergroup;
00170     void subscribe(const string& servername, const string& regexp, ISCallbackInfo::Callback callback);
00174     std::auto_ptr<ISInfoReceiver> infoReceiver;
00175     /* counters */
00176     long nArchived;
00177     long nRetrieved;
00178     long nValidated;
00179     double isTimeTaken;
00180     double fileTimeTaken;
00181     mutable boost::recursive_mutex counterMutex; 
00182     double getAverageTime(double time) const throw();
00184     Sct::Archive::IOManagerArchive* m_archive_manager;
00185     std::string m_retrieval_is_server;
00186     bool m_suspend_callback;
00187     ArchiverArguments m_args;
00188 }; // end of definition of class Archiver;
00189  
00190 }// end of namespace SctArchiving
00191 #endif // #ifndef ARCHIVER_H

Generated on Thu Feb 10 02:40:06 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5