From b907a04a3f1c7a931871623a8522cbf87986ae61 Mon Sep 17 00:00:00 2001 From: Ryan Huffman Date: Wed, 16 Dec 2015 09:08:51 -0800 Subject: [PATCH] Add log directory to AssignmentClientMonitor --- .../src/AssignmentClientMonitor.cpp | 47 ++++++++++++++++++- .../src/AssignmentClientMonitor.h | 5 +- 2 files changed, 49 insertions(+), 3 deletions(-) diff --git a/assignment-client/src/AssignmentClientMonitor.cpp b/assignment-client/src/AssignmentClientMonitor.cpp index 2d27962071..bb70c8464f 100644 --- a/assignment-client/src/AssignmentClientMonitor.cpp +++ b/assignment-client/src/AssignmentClientMonitor.cpp @@ -12,6 +12,9 @@ #include #include +#include +#include + #include #include #include @@ -29,7 +32,7 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen const unsigned int maxAssignmentClientForks, Assignment::Type requestAssignmentType, QString assignmentPool, quint16 listenPort, QUuid walletUUID, QString assignmentServerHostname, - quint16 assignmentServerPort) : + quint16 assignmentServerPort, QDir logDirectory) : _numAssignmentClientForks(numAssignmentClientForks), _minAssignmentClientForks(minAssignmentClientForks), _maxAssignmentClientForks(maxAssignmentClientForks), @@ -37,7 +40,8 @@ AssignmentClientMonitor::AssignmentClientMonitor(const unsigned int numAssignmen _assignmentPool(assignmentPool), _walletUUID(walletUUID), _assignmentServerHostname(assignmentServerHostname), - _assignmentServerPort(assignmentServerPort) + _assignmentServerPort(assignmentServerPort), + _logDirectory(logDirectory) { qDebug() << "_requestAssignmentType =" << _requestAssignmentType; @@ -155,11 +159,50 @@ void AssignmentClientMonitor::spawnChildClient() { _childArguments.append("--" + ASSIGNMENT_CLIENT_MONITOR_PORT_OPTION); _childArguments.append(QString::number(DependencyManager::get()->getLocalSockAddr().getPort())); + // Setup log files + const QString DATETIME_FORMAT = "yyyyMMdd.hh.mm.ss.zzz"; + + if (!_logDirectory.exists()) { + qDebug() << "Log directory (" << _logDirectory.absolutePath() << ") does not exist, creating."; + _logDirectory.mkpath(_logDirectory.absolutePath()); + } + + auto nowString = QDateTime::currentDateTime().toString(DATETIME_FORMAT); + auto stdoutFilenameTemp = QString("ac_stdout_%1.txt").arg(nowString); + auto stderrFilenameTemp = QString("ac_stderr_%1.txt").arg(nowString); + QString stdoutPathTemp = _logDirectory.absoluteFilePath(stdoutFilenameTemp); + QString stderrPathTemp = _logDirectory.absoluteFilePath(stderrFilenameTemp); + + // reset our output and error files + assignmentClient->setStandardOutputFile(stdoutPathTemp); + assignmentClient->setStandardErrorFile(stderrPathTemp); + // make sure that the output from the child process appears in our output assignmentClient->setProcessChannelMode(QProcess::ForwardedChannels); assignmentClient->start(QCoreApplication::applicationFilePath(), _childArguments); + + // Update log path to use PID in filename + auto stdoutFilename = QString("ac_stdout_%1_%2.txt").arg(nowString).arg(assignmentClient->processId()); + auto stderrFilename = QString("ac_stderr_%1_%2.txt").arg(nowString).arg(assignmentClient->processId()); + QString stdoutPath = _logDirectory.absoluteFilePath(stdoutFilename); + QString stderrPath = _logDirectory.absoluteFilePath(stderrFilename); + + qDebug() << "Renaming " << stdoutPathTemp << " to " << stdoutPath; + if (!_logDirectory.rename(stdoutFilenameTemp, stdoutFilename)) { + qDebug() << "Failed to rename " << stdoutFilenameTemp; + stdoutFilename = stdoutFilenameTemp; + } + + qDebug() << "Renaming " << stderrPathTemp << " to " << stderrPath; + if (!QFile::rename(stderrPathTemp, stderrPath)) { + qDebug() << "Failed to rename " << stderrFilenameTemp; + stderrFilename = stderrFilenameTemp; + } + qDebug() << "Child stdout being written to: " << stdoutPathTemp; + qDebug() << "Child stderr being written to: " << stderrPathTemp; + if (assignmentClient->processId() > 0) { // make sure we hear that this process has finished when it does connect(assignmentClient, SIGNAL(finished(int, QProcess::ExitStatus)), this, SLOT(childProcessFinished())); diff --git a/assignment-client/src/AssignmentClientMonitor.h b/assignment-client/src/AssignmentClientMonitor.h index 7ea7c3e274..27ef3e7cab 100644 --- a/assignment-client/src/AssignmentClientMonitor.h +++ b/assignment-client/src/AssignmentClientMonitor.h @@ -16,6 +16,7 @@ #include #include #include +#include #include @@ -29,7 +30,7 @@ public: AssignmentClientMonitor(const unsigned int numAssignmentClientForks, const unsigned int minAssignmentClientForks, const unsigned int maxAssignmentClientForks, Assignment::Type requestAssignmentType, QString assignmentPool, quint16 listenPort, QUuid walletUUID, QString assignmentServerHostname, - quint16 assignmentServerPort); + quint16 assignmentServerPort, QDir logDirectory); ~AssignmentClientMonitor(); void stopChildProcesses(); @@ -47,6 +48,8 @@ private: QTimer _checkSparesTimer; // every few seconds see if it need fewer or more spare children + QDir _logDirectory; + const unsigned int _numAssignmentClientForks; const unsigned int _minAssignmentClientForks; const unsigned int _maxAssignmentClientForks;