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