// ---------------------------------------------------------------------- // File: CommentLog.cc // Author: Andreas-Joachim Peters - CERN // ---------------------------------------------------------------------- /************************************************************************ * EOS - the CERN Disk Storage System * * Copyright (C) 2011 CERN/Switzerland * * * * This program is free software: you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation, either version 3 of the License, or * * (at your option) any later version. * * * * This program is distributed in the hope that it will be useful, * * but WITHOUT ANY WARRANTY; without even the implied warranty of * * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * * GNU General Public License for more details. * * * * You should have received a copy of the GNU General Public License * * along with this program. If not, see .* ************************************************************************/ /*----------------------------------------------------------------------------*/ #include "common/CommentLog.hh" #include "common/Timing.hh" #include #include #include #include #include /*----------------------------------------------------------------------------*/ EOSCOMMONNAMESPACE_BEGIN; /*----------------------------------------------------------------------------*/ /** * Open/Create the comment log file * * @param file path to the comment log file */ /*----------------------------------------------------------------------------*/ CommentLog::CommentLog (const char* file) { mName = file; mFd = ::open(file, O_CREAT | O_RDWR | O_APPEND, 0644); } /*----------------------------------------------------------------------------*/ /** * Destructor * */ /*----------------------------------------------------------------------------*/ CommentLog::~CommentLog () { if (mFd > 0) { ::close(mFd); } } /*----------------------------------------------------------------------------*/ /** * Check if the comment log file is valid (opened) * * * @return true if valid - false if error */ /*----------------------------------------------------------------------------*/ bool CommentLog::IsValid () { return (mFd > 0); } /*----------------------------------------------------------------------------*/ /** * Add a comment log line to the log file * * @param t timestamp to be displayed * @param cmd command to be displayed * @param subcmd subcommand to be displayed * @param args used for cmd/subcmd to be displayed * @param comment to be displayed * @param stdErr error returned to the shell for this command to be displayed * @param retc return code returned to the shell for this command to be displayed * * @return true if successful - false if error */ /*----------------------------------------------------------------------------*/ bool CommentLog::Add (time_t t, const char* cmd, const char* subcmd, const char* args, const char* comment, const char* stdErr, int retc) { XrdOucString out = ""; out += "# ==============================================================\n"; out += "# "; out += eos::common::Timing::ltime(t).c_str(); out += " "; out += comment; out += "\n"; out += "# --------------------------------------------------------------\n"; char st[16]; snprintf(st, sizeof (st) - 1, "%u", (unsigned int) t); out += " time="; out += st; out += " cmd=\""; out += cmd; out += "\" subcmd=\""; out += subcmd; out += "\" retc="; out += retc; out += " comment=", out += comment; out += "\n"; out += "# ..............................................................\n"; out += "# args: "; out += args; out += "\n"; XrdOucString sErr = stdErr; if (sErr.length()) { while (sErr.replace("\n", "__#n#__")) { } while (sErr.replace("__#n#__", "\n# ")) { } sErr.insert("# ", 0); if (sErr.endswith("#")) { sErr.erase(sErr.length() - 1); } out += "# >STDERR\n"; out += sErr; } if (!out.endswith("\n")) { out += "\n"; } if ((::write(mFd, out.c_str(), out.length())) < 0) { return false; } else { return true; } } /*----------------------------------------------------------------------------*/ EOSCOMMONNAMESPACE_END;