Keep machine stats even when a machine is removed from the machines file

This is important for the Hydra provisioner, since it needs to be able
to see whether a disabled machine still has jobs running on it.
This commit is contained in:
Eelco Dolstra 2015-09-02 13:31:47 +02:00
parent 2d116d758a
commit 7e954aff03
3 changed files with 11 additions and 1 deletions

View file

@ -89,6 +89,7 @@ system_time State::doDispatch()
auto machines_(machines.lock());
for (auto & m : *machines_) {
auto info(m.second->state->connectInfo.lock());
if (!m.second->enabled) continue;
if (info->consecutiveFailures && info->disabledUntil > now) {
if (info->disabledUntil < sleepUntil)
sleepUntil = info->disabledUntil;

View file

@ -74,8 +74,14 @@ void State::parseMachines(const std::string & contents)
}
for (auto & m : oldMachines)
if (newMachines.find(m.first) == newMachines.end())
if (newMachines.find(m.first) == newMachines.end()) {
printMsg(lvlInfo, format("removing machine %1%") % m.first);
/* Add a disabled Machine object to make sure stats are
maintained. */
auto machine = std::make_shared<Machine>(*(m.second));
machine->enabled = false;
newMachines[m.first] = machine;
}
auto machines_(machines.lock());
*machines_ = newMachines;
@ -489,6 +495,7 @@ void State::dumpStatus(Connection & conn, bool log)
auto & s(m->state);
nested.attr(m->sshName);
JSONObject nested2(out);
nested2.attr("enabled", m->enabled);
nested2.attr("currentJobs", s->currentJobs);
if (s->currentJobs == 0)
nested2.attr("idleSince", s->idleSince);

View file

@ -201,6 +201,8 @@ struct Machine
{
typedef std::shared_ptr<Machine> ptr;
bool enabled{true};
std::string sshName, sshKey;
std::set<std::string> systemTypes, supportedFeatures, mandatoryFeatures;
unsigned int maxJobs = 1;