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 00010 #include "SctFitter/FitStrategy.h" 00011 #include "AnalysisWorkerGroup.h" 00012 #include "AnalysisServiceI.hh" 00013 00014 00015 namespace SctAnalysis { 00016 00017 class AnalysisService : public IPCObject, public virtual AnalysisServiceI_T_AnalysisServiceInterface, boost::noncopyable { 00018 public: 00019 virtual ~AnalysisService() {} 00021 void run(); 00023 static void testDataCallback(ISCallbackInfo * isc); 00025 static void scanResultCallback(ISCallbackInfo * isc); 00027 void setFitStrategy(const string& name) throw(LogicError); 00029 SctFitter::FitStrategy& getFitStrategy() const throw(LogicError); 00031 static AnalysisService& instance(); 00032 00037 static AnalysisService& initialize(const string& fitStrategyName = "RootFitStrategy"); 00038 00043 virtual void purge(AnalysisServiceIStatus* status) throw(); 00048 virtual void analyze(AnalysisServiceIStatus* status, char* testname) throw(); 00054 virtual void analyzeModule(AnalysisServiceIStatus* status, char* testname, 00055 char* modulename) throw(); 00059 virtual char* status(AnalysisServiceIStatus* status) throw(); 00061 virtual ilu_ShortInteger busy (AnalysisServiceIStatus *_status); 00063 virtual ilu_ShortInteger queueLength (AnalysisServiceIStatus *_status); 00064 00065 static IPCServer& getServer() throw(); 00066 00067 protected: 00069 AnalysisWorkerGroup* workergroup; 00070 private: 00071 boost::recursive_mutex m_status_access ; 00072 SctFitter::FitStrategy* fitStrategy; 00073 std::auto_ptr<ISInfoReceiver> infoReceiver; 00074 static AnalysisService* service; 00075 AnalysisService(const string& fitStrategyName ); 00076 }; 00077 } 00078 00079 #endif //#ifndef ANALYSISSERVICE_H