diff --git a/proof/proof/src/TProof.cxx b/proof/proof/src/TProof.cxx index 2c24527056c9edaf2bd39c24480215c69f1fd8c8..63463bf92810386906c6499e3ce21d1d230b8266 100644 --- a/proof/proof/src/TProof.cxx +++ b/proof/proof/src/TProof.cxx @@ -11761,17 +11761,22 @@ void TProof::SaveWorkerInfo() // Loop over the list of workers (active is any worker not flagged as bad) TIter nxa(fSlaves); TSlave *wrk = 0; + TString logfile; + Ssiz_t dash; while ((wrk = (TSlave *) nxa())) { Int_t status = (fBadSlaves && fBadSlaves->FindObject(wrk)) ? 0 : 1; + logfile = wrk->GetWorkDir(); + dash = logfile.Last('-'); + if (dash != -1) logfile = logfile(0, dash); // Write out record for this worker fprintf(fwrk,"%s@%s:%d %d %s %s.log\n", wrk->GetUser(), wrk->GetName(), wrk->GetPort(), status, - wrk->GetOrdinal(), wrk->GetWorkDir()); + wrk->GetOrdinal(), logfile.Data()); // Additional line, if required if (addlogext.Length() > 0) { fprintf(fwrk,"%s@%s:%d %d %s %s.%s\n", wrk->GetUser(), wrk->GetName(), wrk->GetPort(), status, - wrk->GetOrdinal(), wrk->GetWorkDir(), addlogext.Data()); + wrk->GetOrdinal(), logfile.Data(), addlogext.Data()); } } @@ -11779,11 +11784,13 @@ void TProof::SaveWorkerInfo() // the overall list) TIter nxb(fBadSlaves); while ((wrk = (TSlave *) nxb())) { + dash = logfile.Last('-'); + if (dash != -1) logfile = logfile(0, dash); if (!fSlaves->FindObject(wrk)) { // Write out record for this worker fprintf(fwrk,"%s@%s:%d 0 %s %s.log\n", wrk->GetUser(), wrk->GetName(), wrk->GetPort(), - wrk->GetOrdinal(), wrk->GetWorkDir()); + wrk->GetOrdinal(), logfile.Data()); } } diff --git a/proof/proofd/inc/XrdProofdProofServMgr.h b/proof/proofd/inc/XrdProofdProofServMgr.h index bf8a745bdd7d5a68ec4c99ae1e4cb162ec05e04a..4c5fc7b7570070bd6b8fc0d059bb90395809e135 100644 --- a/proof/proofd/inc/XrdProofdProofServMgr.h +++ b/proof/proofd/inc/XrdProofdProofServMgr.h @@ -268,6 +268,8 @@ public: int CleanupProofServ(bool all = 0, const char *usr = 0); + void GetLogFile(XrdProofdProtocol *p, XrdProofdProofServ *xps, + XrdOucString &sessiondir, XrdOucString &logfile); void GetTagDirs(int opt, XrdProofdProtocol *p, XrdProofdProofServ *xps, XrdOucString &sesstag, XrdOucString &topsesstag, XrdOucString &sessiondir, XrdOucString &sesswrkdir); diff --git a/proof/proofd/src/XrdProofdProofServMgr.cxx b/proof/proofd/src/XrdProofdProofServMgr.cxx index 20c0ad1620aaedd19cc7adc30aae7c55be37d4c2..c48a1e464bc5120775326b27269fe653e865dbc2 100644 --- a/proof/proofd/src/XrdProofdProofServMgr.cxx +++ b/proof/proofd/src/XrdProofdProofServMgr.cxx @@ -1830,10 +1830,12 @@ int XrdProofdProofServMgr::CreateFork(XrdProofdProtocol *p) TRACEP(p, FORK,"Forking external proofsrv"); if (!(pid = fMgr->Sched()->Fork("proofsrv"))) { - // Finalize unique tag and relevant dirs for this session and create log file path + // Finalize unique tag and relevant dirs for this session GetTagDirs((int)getpid(), p, xps, in.fSessionTag, in.fTopSessionTag, in.fSessionDir, in.fWrkDir); - XPDFORM(in.fLogFile, "%s.log", in.fWrkDir.c_str()); + + // Create log file path + GetLogFile(p, xps, in.fSessionDir, in.fLogFile); // Log to the session log file from now on if (fLogger) fLogger->Bind(in.fLogFile.c_str()); @@ -3327,6 +3329,34 @@ int XrdProofdProofServMgr::SetProofServEnv(XrdProofdManager *mgr, XrdROOT *r) return -1; } +//______________________________________________________________________________ +void XrdProofdProofServMgr::GetLogFile(XrdProofdProtocol *p, XrdProofdProofServ *xps, + XrdOucString &sessiondir, XrdOucString &logfile) +{ + XrdOucString host = fMgr->Host(); + int datime = (int)time(0); + XrdOucString ord = xps->Ordinal(); + XrdOucString role; + + // Shorten host name + if (host.find(".") != STR_NPOS) + host.erase(host.find(".")); + + if (p->ConnType() == kXPD_MasterWorker) role = "worker"; + else role = "master"; + + // Log file name format: + // <sessiondir>/[master|worker]-<ordinal>-<host>-<datetime>.log + // No PID is contained + XPDFORM(logfile, "%s/%s-%s-%s-%d.log", + sessiondir.c_str(), + role.c_str(), + ord.c_str(), + host.c_str(), + datime + ); +} + //______________________________________________________________________________ void XrdProofdProofServMgr::GetTagDirs(int pid, XrdProofdProtocol *p, XrdProofdProofServ *xps,