hydra-queue-runner: More stats

This commit is contained in:
Eelco Dolstra 2015-06-22 15:34:33 +02:00
parent 62b53a0a47
commit 41ba7418e2

View file

@ -248,6 +248,8 @@ private:
counter nrStepsBuilding{0}; counter nrStepsBuilding{0};
counter nrRetries{0}; counter nrRetries{0};
counter maxNrRetries{0}; counter maxNrRetries{0};
counter totalStepTime{0}; // total time for steps, including closure copying
counter totalStepBuildTime{0}; // total build time for steps
counter nrQueueWakeups{0}; counter nrQueueWakeups{0};
counter nrDispatcherWakeups{0}; counter nrDispatcherWakeups{0};
@ -1040,7 +1042,7 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
possibility, we retry this step (putting it back in possibility, we retry this step (putting it back in
the runnable queue). If there are really no strong the runnable queue). If there are really no strong
pointers to the step, it will be deleted. */ pointers to the step, it will be deleted. */
printMsg(lvlInfo, format("cancelling build step %1%") % step->drvPath); printMsg(lvlInfo, format("maybe cancelling build step %1%") % step->drvPath);
return true; return true;
} }
@ -1059,7 +1061,7 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
BuildResult res; BuildResult res;
int stepNr = 0; int stepNr = 0;
result.startTime = time(0); time_t stepStartTime = result.startTime = time(0);
/* If any of the outputs have previously failed, then don't bother /* If any of the outputs have previously failed, then don't bother
building again. */ building again. */
@ -1091,7 +1093,8 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
if (result.status == RemoteResult::rrSuccess) res = getBuildResult(store, step->drv); if (result.status == RemoteResult::rrSuccess) res = getBuildResult(store, step->drv);
} }
if (!result.stopTime) result.stopTime = time(0); time_t stepStopTime = time(0);
if (!result.stopTime) result.stopTime = stepStopTime;
/* Asynchronously compress the log. */ /* Asynchronously compress the log. */
if (result.logFile != "") { if (result.logFile != "") {
@ -1151,7 +1154,6 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
meantime or be added afterwards. */ meantime or be added afterwards. */
if (direct.empty()) { if (direct.empty()) {
printMsg(lvlDebug, format("finishing build step %1%") % step->drvPath); printMsg(lvlDebug, format("finishing build step %1%") % step->drvPath);
nrStepsDone++;
steps_->erase(step->drvPath); steps_->erase(step->drvPath);
} }
} }
@ -1222,7 +1224,6 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
if (indirect.empty()) { if (indirect.empty()) {
for (auto & s : steps) { for (auto & s : steps) {
printMsg(lvlDebug, format("finishing build step %1%") % step->drvPath); printMsg(lvlDebug, format("finishing build step %1%") % step->drvPath);
nrStepsDone++;
steps_->erase(s->drvPath); steps_->erase(s->drvPath);
} }
break; break;
@ -1298,6 +1299,10 @@ bool State::doBuildStep(std::shared_ptr<StoreAPI> store, Step::ptr step,
} }
nrStepsDone++;
totalStepTime += stepStopTime - stepStartTime;
totalStepBuildTime += result.stopTime - result.startTime;
return false; return false;
} }
@ -1444,6 +1449,12 @@ void State::dumpStatus(Connection & conn, bool log)
root.attr("nrStepsDone", nrStepsDone); root.attr("nrStepsDone", nrStepsDone);
root.attr("nrRetries", nrRetries); root.attr("nrRetries", nrRetries);
root.attr("maxNrRetries", maxNrRetries); root.attr("maxNrRetries", maxNrRetries);
root.attr("totalStepTime", totalStepTime);
root.attr("totalStepBuildTime", totalStepBuildTime);
if (nrStepsDone) {
root.attr("avgStepTime"); out << (float) totalStepTime / nrStepsDone;
root.attr("avgStepBuildTime"); out << (float) totalStepBuildTime / nrStepsDone;
}
root.attr("nrQueueWakeups", nrQueueWakeups); root.attr("nrQueueWakeups", nrQueueWakeups);
root.attr("nrDispatcherWakeups", nrDispatcherWakeups); root.attr("nrDispatcherWakeups", nrDispatcherWakeups);
root.attr("nrDbConnections", dbPool.count()); root.attr("nrDbConnections", dbPool.count());