Add status dump facility

[?]
Jun 15, 2015, 4:20 PM
RQUAATWBGEP3YT4F555XLJYRRRGHDTEILHFORES7AM2XAOVMVJSAC

Dependencies

  • [2] IWB3F4Z6 Fail builds with previously failed steps early
  • [*] 24BMQDZA Start of single-process hydra-queue-runner
  • [*] 5AIYUMTB Basic remote building
  • [*] NJJ7H64S Very basic multi-threaded queue runner
  • [*] ATJ54SPX Use PostgreSQL notifications for queue events
  • [*] C6HOMHZW Don't try to handle SIGINT

Change contents

  • edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 204
    [5.7253]
    [5.7253]
    /* Various stats. */
    std::atomic<int> nrQueueWakeups;
  • edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 262
    [2.65]
    [6.1377]
    void dumpStatus();
  • edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 271
    [4.7503]
    [5.7737]
    nrQueueWakeups = 0;
  • edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 430
    [7.737]
    [7.737]
    receiver dumpStatus(*conn, "dump_status");
  • edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 442
    [7.948]
    [6.1560]
    nrQueueWakeups++;
  • edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 454
    [6.1749]
    [6.1749]
    if (dumpStatus.get())
    State::dumpStatus();
  • edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 1111
    [6.3180]
    [6.3180]
    void State::dumpStatus()
    {
    {
    auto builds_(builds.lock());
    printMsg(lvlError, format("%1% queued builds") % builds_->size());
    }
    {
    auto steps_(steps.lock());
    for (auto i = steps_->begin(); i != steps_->end(); )
    if (i->second.lock()) ++i; else i = steps_->erase(i);
    printMsg(lvlError, format("%1% pending/active build steps") % steps_->size());
    }
    {
    auto runnable_(runnable.lock());
    for (auto i = runnable_->begin(); i != runnable_->end(); )
    if (i->lock()) ++i; else i = runnable_->erase(i);
    printMsg(lvlError, format("%1% runnable build steps") % runnable_->size());
    }
    printMsg(lvlError, format("%1% times woken up to check the queue") % nrQueueWakeups);
    {
    auto machines_(machines.lock());
    for (auto & m : *machines_) {
    auto currentJobs_(m->currentJobs.lock());
    printMsg(lvlError, format("machine %1%: %2%/%3% active")
    % m->sshName % *currentJobs_ % m->maxJobs);
    }
    }
    }
  • edit in src/hydra-queue-runner/hydra-queue-runner.cc at line 1163
    [6.3512]
    [8.132]
    parseCmdLine(argc, argv, [&](Strings::iterator & arg, const Strings::iterator & end) {
    return false;
    });