00001 #ifndef ANALYSISSERVICE_H 00002 #define ANALYSISSERVICE_H 00003 #include <is/isinfo.h> 00004 #include <ipc/object.h> 00005 #include <ipc/server.h> 00006 00007 #include <string> 00008 #include <boost/utility.hpp> 00009 #include <boost/thread.hpp> 00010 00011 #include "SctFitter/FitStrategy.h" 00012 #include "AnalysisServiceI.hh" 00013 00014 namespace SctAnalysis { 00015 class DcsInterface; 00016 class AnalysisWorkerGroup; 00017 00018 class AnalysisService : public IPCObject, public virtual AnalysisServiceI_T_AnalysisServiceInterface, boost::noncopyable { 00019 public: 00020 virtual ~AnalysisService() {} 00022 void run(); 00024 static void testDataCallback(ISCallbackInfo * isc); 00026 static void scanResultCallback(ISCallbackInfo * isc); 00028 void setFitStrategy(const string& name) throw(LogicError); 00030 SctFitter::FitStrategy& getFitStrategy() const throw(LogicError); 00032 static AnalysisService& instance(); 00033 00038 static AnalysisService& initialize(const string& fitStrategyName = "RootFitStrategy"); 00039 00044 virtual void purge(AnalysisServiceIStatus* status) throw(); 00049 virtual void analyze(AnalysisServiceIStatus* status, char* testname) throw(); 00055 virtual void analyzeModule(AnalysisServiceIStatus* status, char* testname, 00056 char* modulename) throw(); 00060 virtual char* status(AnalysisServiceIStatus* status) throw(); 00062 virtual ilu_ShortInteger busy (AnalysisServiceIStatus *_status); 00064 virtual ilu_ShortInteger queueLength (AnalysisServiceIStatus *_status); 00066 DcsInterface& getDcsInterface(); 00067 00068 static IPCServer& getServer() throw(); 00069 00070 protected: 00072 AnalysisWorkerGroup* workergroup; 00073 DcsInterface* dcsinterface; 00074 private: 00075 boost::recursive_mutex m_status_access ; 00076 SctFitter::FitStrategy* fitStrategy; 00077 std::auto_ptr<ISInfoReceiver> infoReceiver; 00078 static AnalysisService* service; 00079 AnalysisService(const string& fitStrategyName ); 00080 }; 00081 } 00082 00083 #endif //#ifndef ANALYSISSERVICE_H