124
124
// Analyze job.ID.local and store relevant information
126
126
fname_src = user.ControlDir() + "/job." + desc.get_id() + sfx_local;
127
std::ifstream i_src(fname_src.c_str());
129
if(i_src.fail()) goto error;
130
if(o_dst.fail()) goto error;
131
if(i_src.eof()) break;
133
std::string key = config_read_line(i_src,value,'=');
134
if(key=="subject") { o_dst<<"usersn="<<value<<std::endl; }
135
else if(key=="headnode") { o_dst<<"headnode="<<value<<std::endl; }
136
else if(key=="lrms") { o_dst<<"lrms="<<value<<std::endl; }
137
else if(key=="queue") { o_dst<<"queue="<<value<<std::endl; }
138
else if(key=="localid") { o_dst<<"localjobid="<<value<<std::endl; }
139
else if(key=="jobname") { o_dst<<"jobname="<<value<<std::endl; }
140
else if(key=="globalid") { o_dst<<"globalid="<<value<<std::endl; }
141
else if(key=="projectname") { o_dst<<"projectname="<<value<<std::endl; }
142
else if(key=="clientname") { o_dst<<"clienthost="<<value<<std::endl; }
127
JobLocalDescription local;
128
if(!local.read(fname_src)) goto error;
129
if(!local.DN.empty()) { o_dst<<"usersn="<<local.DN<<std::endl; }
130
if(!local.headnode.empty()) { o_dst<<"headnode="<<local.headnode<<std::endl; }
131
if(!local.lrms.empty()) { o_dst<<"lrms="<<local.lrms<<std::endl; }
132
if(!local.queue.empty()) { o_dst<<"queue="<<local.queue<<std::endl; }
133
if(!local.localid.empty()) { o_dst<<"localid="<<local.localid<<std::endl; }
134
if(!local.jobname.empty()) { o_dst<<"jobname="<<local.jobname<<std::endl; }
135
if(!local.globalid.empty()) { o_dst<<"globalid="<<local.globalid<<std::endl; }
136
for(std::list<std::string>::const_iterator projectname = local.projectnames.begin();
137
projectname != local.projectnames.end(); ++projectname) {
138
o_dst<<"projectname="<<*projectname<<std::endl;
140
if(!local.clientname.empty()) { o_dst<<"clienthost="<<local.clientname<<std::endl; }
146
143
// Copy public part of user certificate chain incl. proxy
216
213
int nodecount = 0;
217
214
float cputime = 0;
219
if(i_src.fail()) goto error;
216
// if(i_src.fail()) goto error; - it is better to provide something than nothing
220
217
if(o_dst.fail()) goto error;
221
if(i_src.eof()) break;
218
// if(i_src.eof()) break; - config_read_line handles that
222
219
std::string value;
223
220
std::string key = config_read_line(i_src,value,'=');
221
if(key.empty()) break; // only case config_read_line returns "" is then can't read anymore
224
222
if(key=="nodename") {
225
223
if(nodecount) nodenames+=":"; nodenames+=value;