28 #include "gapi_job_operations.h"
35 ClassImp(TAlienMasterJob);
40 void TAlienMasterJob::Browse(TBrowser* b)
43 b->Add(GetJobStatus());
51 TGridJobStatus *TAlienMasterJob::GetJobStatus()
const
56 GAPI_JOBARRAY* gjobarray = gapi_queryjobs(
"-",
"%",
"-",
"-", jobID.Data(),
62 if (gjobarray->size() == 0) {
67 TAlienMasterJobStatus *status =
new TAlienMasterJobStatus(fJobID);
69 TAlienJob masterJob(fJobID);
70 status->fMasterJob =
dynamic_cast<TAlienJobStatus*
>(masterJob.GetJobStatus());
72 std::vector<GAPI_JOB>::const_iterator jobIter = gjobarray->begin();
73 for (; jobIter != gjobarray->end(); ++jobIter) {
75 GAPI_JOB gjob = *jobIter;
76 TAlienJobStatus* jobStatus =
new TAlienJobStatus();
79 std::map<std::string, std::string>::const_iterator iter = gjob.gapi_jobmap.begin();
80 for (; iter != gjob.gapi_jobmap.end(); ++iter) {
81 jobStatus->fStatus.Add(
new TObjString(iter->first.c_str()),
new TObjString(iter->second.c_str()));
82 if (strcmp(iter->first.c_str(),
"queueId") == 0)
83 jID =
new TObjString(iter->second.c_str());
87 status->fJobs.Add(jID, jobStatus);
97 void TAlienMasterJob::Print(Option_t* options)
const
99 std::cout <<
" ------------------------------------------------ " << std::endl;
100 std::cout <<
" Master Job ID : " << fJobID << std::endl;
101 std::cout <<
" ------------------------------------------------ " << std::endl;
102 TAlienMasterJobStatus* status = (TAlienMasterJobStatus*)(GetJobStatus());
104 Error(
"Print",
"Cannot get the information for this masterjob");
108 std::cout <<
" N of Subjobs : " << status->GetNSubJobs() << std::endl;
109 std::cout <<
" % finished : " << status->PercentFinished()*100 << std::endl;
110 std::cout <<
" ------------------------------------------------ " << std::endl;
111 TIterator* iter = status->GetJobs()->MakeIterator();
114 while ((obj = (TObjString*)iter->Next()) != 0) {
115 TAlienJobStatus* substatus = (TAlienJobStatus*)status->GetJobs()->GetValue(obj->GetName());
116 printf(
" SubJob: [%-7s] %-10s %20s@%s RunTime: %s\n",substatus->GetKey(
"queueId"),substatus->GetKey(
"status"),substatus->GetKey(
"node"),substatus->GetKey(
"site"),substatus->GetKey(
"runtime"));
118 std::cout <<
" ------------------------------------------------ " << std::endl;
120 if ( strchr(options,
'l') ) {
121 while ((obj = (TObjString*)iter->Next()) != 0) {
122 TAlienJobStatus* substatus = (TAlienJobStatus*)status->GetJobs()->GetValue(obj->GetName());
124 const char* outputdir = substatus->GetJdlKey(
"OutputDir");
130 sandbox = TString(
"/proc/") + TString(substatus->GetKey(
"user")) + TString(
"/") + TString(substatus->GetKey(
"queueId")) + TString(
"/job-output");
133 printf(
" Sandbox [%-7s] %s \n", substatus->GetKey(
"queueId"),sandbox.Data());
134 std::cout <<
" ================================================ " << std::endl;
136 if (!gGrid->Cd(sandbox)) {
140 TGridResult* dirlist = gGrid->Ls(sandbox);
141 dirlist->Sort(kTRUE);
143 while (dirlist->GetFileName(i)) {
144 printf(
"%-24s ",dirlist->GetFileName(i++));
153 std::cout <<
" ----------LITE_JOB_OPERATIONS-------------------------------------- " << std::endl;
159 Bool_t TAlienMasterJob::Merge()
166 Bool_t TAlienMasterJob::Merge(
const char* inputname,
const char* mergeoutput)
170 TAlienMasterJobStatus* status = (TAlienMasterJobStatus*)(GetJobStatus());
171 TIterator* iter = status->GetJobs()->MakeIterator();
174 while ((obj = (TObjString*)iter->Next()) != 0) {
175 TAlienJobStatus* substatus = (TAlienJobStatus*)status->GetJobs()->GetValue(obj->GetName());
177 const char* outputdir = substatus->GetJdlKey(
"OutputDir");
178 printf(
" Sandbox [%-7s] %s \n", substatus->GetKey(
"queueId"),sandbox.Data());
179 std::cout <<
" ================================================ " << std::endl;
183 sandbox = TString(
"/proc/") + TString(substatus->GetKey(
"user")) + TString(
"/") + TString(substatus->GetKey(
"queueId")) + TString(
"/job-output");
185 merger.AddFile(TString(
"alien://")+sandbox+ TString(
"/") + TString(inputname));
189 merger.OutputFile(mergeoutput);
192 return merger.Merge();