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     void setFifo(bool);
00085     bool isFifo();
00089     virtual void suspendCallbacks (CORBA::Boolean doSuspend);
00093     static void archive_callback(ISCallbackInfo * isc);
00094     
00096     IPCServer& getArchiverServer() throw();
00097     
00101     virtual void archiveISName (const char* ioNameIS);
00105     virtual void retrieveISName (const char* ioNameIS);
00109     virtual void retrieveArchName (const char* archivingName);
00113     virtual void retrieve(const char* runNumber, const char* scanNumber, const char* className, const char* specifier); 
00117     virtual CORBA::Short getCompressionLevel ();
00121     virtual void setCompressionLevel (CORBA::Short level);
00125     virtual void setRetrieveIsServer (const char* serverName);
00126     /*
00127       Add an ArchivingCommand to the workergroup.
00128     */
00129     virtual void addCommand(boost::shared_ptr<ArchivingCommand> command) const;
00133     void incrimentNArchived() throw();
00137     void incrimentNRetrieved() throw();
00141     void incrimentNValidated() throw();
00145     void addISTime(double time) throw();
00149     void addFileTime(double time) throw();
00153     Sct::Archive::IOManagerArchive& Archiver::getIOManagerArchive() const;
00157     string internal_getRetrieveIsServer() const throw();
00158 
00160     virtual void setPersistentDirectory(const char* newDirectory);
00161 
00165     char * getRetrieveIsServer() throw();
00166     /* 
00167        save any unsaved data - may be time consuming! 
00168     */
00169     void recover();
00170   private:
00174     ArchivingWorkerGroup* workergroup;
00178     void subscribe(const string& servername, const string& regexp, ISCallbackInfo::Callback callback);
00182     std::auto_ptr<ISInfoReceiver> infoReceiver;
00183     /* counters */
00184     long nArchived;
00185     long nRetrieved;
00186     long nValidated;
00187     double isTimeTaken;
00188     double fileTimeTaken;
00189     mutable boost::recursive_mutex counterMutex; 
00190     double getAverageTime(double time) const throw();
00192     Sct::Archive::IOManagerArchive* m_archive_manager;
00193     std::string m_retrieval_is_server;
00194     bool m_suspend_callback;
00195     ArchiverArguments m_args;
00196 }; // end of definition of class Archiver;
00197  
00198 }// end of namespace SctArchiving
00199 #endif // #ifndef ARCHIVER_H

Generated on Fri Sep 16 18:01:48 2005 for SCT DAQ/DCS Software - C++ by doxygen 1.3.5