57 ISvcLocator* svclocator,IToolSvc*toolSvc,
58 const std::vector<std::string>& initialvp1files,
59 const std::string& initialCruiseMode,
unsigned initialCruiseSeconds,
60 const std::string& singleEventSource,
const std::string& singleEventLocalTmpDir,
61 unsigned localFileCacheLimit,
62 const std::vector<std::string>& availableLocalInputDirectories )
66 m_d->detstore = detstore;
67 m_d->svclocator = svclocator;
68 m_d->toolSvc = toolSvc;
69 m_d->initialCruiseMode = QString(initialCruiseMode.c_str()).simplified();
70 m_d->initialCruiseSeconds = initialCruiseSeconds;
71 m_d->singleEventSource = singleEventSource.c_str();
72 m_d->singleEventLocalTmpDir = singleEventLocalTmpDir.c_str();
73 m_d->localFileCacheLimit = localFileCacheLimit;
75 std::vector<std::string>::const_iterator it, itE = initialvp1files.end();
76 for (it = initialvp1files.begin();it!=itE;++it)
77 m_d->initialvp1files << it->c_str();
79 itE = availableLocalInputDirectories.end();
80 for (it = availableLocalInputDirectories.begin();it!=itE;++it)
81 m_d->availableLocalInputDirectories << it->c_str();
100 if (!
m_d->detstore) {
104 if (!
m_d->svclocator) {
118 if (
m_d->initialCruiseMode!=
"NONE"&&
m_d->initialCruiseMode!=
"EVENT"&&
m_d->initialCruiseMode!=
"TAB"&&
m_d->initialCruiseMode!=
"BOTH") {
119 VP1Msg::message(
"WARNING: unknown initial cruise mode "+
m_d->initialCruiseMode+
" (valid are NONE/EVENT/TAB/BOTH). Assuming NONE.");
120 m_d->initialCruiseMode =
"NONE";
124 if (!
m_d->singleEventSource.isEmpty()&&!
m_d->singleEventLocalTmpDir.isEmpty()) {
125 const bool httpmode =
m_d->singleEventSource.startsWith(
"http://") ||
m_d->singleEventSource.startsWith(
"https://") ;
127 QUrl url(
m_d->singleEventSource);
128 if (!url.isValid()||url.path().isEmpty()) {
130 VP1Msg::message(
"VP1ExecutionScheduler::init ERROR: Source URL ("+
m_d->singleEventSource+
") incorrect format!");
135 if(
m_d->singleEventSource.startsWith(
"https://")
137 && ! (QSslSocket::supportsSsl()) ) {
141 VP1Msg::message(
"VP1ExecutionScheduler::init ERROR: Unable to retrieve events over Https. The platform does not support SSL");
145 QFileInfo fi_s(
m_d->singleEventSource), fi_l(
m_d->singleEventLocalTmpDir);
146 if (!fi_s.exists()||!fi_s.isDir()||!fi_s.isReadable()) {
147 VP1Msg::message(
"ERROR: Source directory ("+
m_d->singleEventSource+
") does not exist, is not readable, or is not a directory!");
150 if (!fi_l.exists()||!fi_l.isDir()||!fi_l.isReadable()||!fi_l.isWritable()) {
151 VP1Msg::message(
"ERROR: Local tmp directory ("+
m_d->singleEventLocalTmpDir+
") does not exist, had incorrect permissions, or is not a directory!");
154 if (fi_l.canonicalFilePath()==fi_s.canonicalFilePath()) {
155 VP1Msg::message(
"ERROR: Local tmp directory ("+
m_d->singleEventLocalTmpDir+
") is the same the source directory ("+
m_d->singleEventSource+
")");
160 if (!
m_d->singleEventSource.isEmpty()||!
m_d->singleEventLocalTmpDir.isEmpty()) {
161 VP1Msg::message(
"ERROR: Only one of SourceDir and LocalCopyDir set. Set either both or none.");
166 if (
m_d->localFileCacheLimit==1||
m_d->localFileCacheLimit==2) {
167 VP1Msg::message(
"WARNING: Too low value of localFileCacheLimit. Setting to 3. (Set to 0 to disable removal of locally cached files.");
168 m_d->localFileCacheLimit=3;
177 return m_d->the_scheduler != 0;
185 assert(!
m_d->the_scheduler&&
"Dont init twice!!");
187 VP1Msg::message(
"===================================================");
189 VP1Msg::message(
"===================================================");
195 m_d->initialvp1files,
196 m_d->initialCruiseMode,
m_d->initialCruiseSeconds,
197 m_d->singleEventSource,
m_d->singleEventLocalTmpDir,
198 m_d->localFileCacheLimit,
199 m_d->availableLocalInputDirectories);
207 assert(
m_d->the_scheduler&&
"Cant cleanup before init");
214 VP1Msg::messageDebug(
"Examining new event ( run# "+QString::number(
run)+
", event# "+QString::number(event)+
" )");
216 bool b =
m_d->the_scheduler->executeNewEvent(
run,event,triggerType,time);
233 return m_d->the_scheduler->nextRequestedEventFile().toStdString();
239 std::vector<std::string> retvector;
240 if(
m_d->the_scheduler) {
241 const QStringList& inplist =
m_d->the_scheduler->userRequestedFiles();
242 for(
int i=0; i<inplist.size(); ++i)
243 retvector.push_back(inplist.at(i).toStdString());
static const Attributes_t empty
The Athena Transient Store API.
static VP1ExecutionScheduler * init(StoreGateSvc *eventStore, StoreGateSvc *detStore, ISvcLocator *svcLocator, IToolSvc *toolSvc, const QStringList &joboptions, QString initialCruiseMode="NONE", unsigned initialCruiseSeconds=10, const QString &singleEventSource="", const QString &singleEventLocalTmpDir="", unsigned localFileCacheLimit=10, const QStringList &availableLocalInputDirectories=QStringList())
static void cleanup(VP1ExecutionScheduler *)
QStringList availableLocalInputDirectories
QString singleEventLocalTmpDir
unsigned localFileCacheLimit
unsigned initialCruiseSeconds
QString initialCruiseMode
QStringList initialvp1files
QString singleEventSource
VP1ExecutionScheduler * the_scheduler
bool argumentsAreValid() const
std::string nextRequestedEventFile() const
std::vector< std::string > userRequestedFiles()
VP1Gui(StoreGateSvc *sg, StoreGateSvc *detstore, ISvcLocator *svclocator, IToolSvc *toolSvc, const std::vector< std::string > &initialvp1files=std::vector< std::string >(), const std::string &initialCruiseMode="NONE", unsigned initialCruiseSeconds=10, const std::string &singleEventSource="", const std::string &singleEventLocalTmpDir="", unsigned localFileCacheLimit=10, const std::vector< std::string > &availableLocalInputDirectories=std::vector< std::string >())
bool hasBeenInitialised()
bool executeNewEvent(const int &run, const uint64_t &event, const unsigned &triggerType=0, const unsigned &time=0)
static void messageDebug(const QString &)
static void message(const QString &, IVP1System *sys=0)