diff --git a/CMakeLists.txt b/CMakeLists.txt index 2cea7d2..5939058 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -110,6 +110,8 @@ set( set(XDG_APPS_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/applications) set(ICON_INSTALL_DIR ${CMAKE_INSTALL_DATADIR}/icons) +option(ICEMON_DEVELOPER_BUILD "Enable Icemon developer mode" OFF) + configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/config-icemon.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-icemon.h diff --git a/config-icemon.h.cmake b/config-icemon.h.cmake index 1e7ad22..8527258 100644 --- a/config-icemon.h.cmake +++ b/config-icemon.h.cmake @@ -1,4 +1,6 @@ #define ICEMON_VERSION_STRING "@ICEMON_VERSION_STRING@" +#cmakedefine01 ICEMON_DEVELOPER_BUILD + #cmakedefine01 ICECC_HAVE_LOGGING_H #cmakedefine01 ICECC_TEST_USE_OLD_MSG_API diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index cfe3ec5..a124961 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -14,13 +14,13 @@ set_package_properties(pandoc PROPERTIES ) if (pandoc_FOUND) - add_custom_target(manpage) add_custom_command( - TARGET manpage + OUTPUT icemon.1 COMMAND ${pandoc_EXECUTABLE} -s -t man ${CMAKE_CURRENT_SOURCE_DIR}/icemon.md - -o ${CMAKE_CURRENT_BINARY_DIR}/icemon.1 + -o icemon.1 MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/icemon.md - BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/icemon.1) + ) + add_custom_target(manpage ALL DEPENDS icemon.1) install( FILES ${CMAKE_CURRENT_BINARY_DIR}/icemon.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) diff --git a/src/fakemonitor.cc b/src/fakemonitor.cc index cb6bf72..33188b0 100644 --- a/src/fakemonitor.cc +++ b/src/fakemonitor.cc @@ -30,14 +30,13 @@ #include #include -#include - namespace { // counter variable int JOB_ID = 0; -const int MAX_JOB_COUNT = 10; -const int MAX_HOST_COUNT = 40; +const int MAX_HOST_COUNT = 20; +const int MAX_JOB_COUNT = 32; +const int MAX_TOTAL_JOB_COUNT = MAX_HOST_COUNT * MAX_JOB_COUNT / 2; const int MAX_JOB_SIZE = 1024 * 1024 * 24; const QStringList JOB_FILENAMES(QStringList() @@ -54,7 +53,7 @@ const QStringList HOST_NAMES(QStringList() QString randomPlatform() { - static const QStringList hostNames = {QStringLiteral("Linux 2.6"), QStringLiteral("Linux 3.2"), QStringLiteral("Linux 3.6")}; + static const QStringList hostNames = {QStringLiteral("x86_64"), QStringLiteral("arm64")}; return hostNames[QRandomGenerator::global()->generate() % hostNames.size()]; } } @@ -63,11 +62,11 @@ FakeMonitor::FakeMonitor(HostInfoManager *manager, QObject *parent) : Monitor(manager, parent) , m_updateTimer(new QTimer(this)) { - m_updateTimer->setInterval(200); + m_updateTimer->setInterval(500); m_updateTimer->start(); connect(m_updateTimer, &QTimer::timeout, this, &FakeMonitor::update); - setSchedulerState(Online); + setSchedulerState(SchedulerState::Online); for (HostId i = 0; i < MAX_HOST_COUNT; ++i) { createHostInfo(i + 1); @@ -76,43 +75,56 @@ FakeMonitor::FakeMonitor(HostInfoManager *manager, QObject *parent) void FakeMonitor::createHostInfo(HostId id) { + // Set some servers as not accepting remote jobs + const float speed = (QRandomGenerator::global()->generate() % 5) * 100.0; + HostInfo info(id); info.setIp(QStringLiteral("1.0.0.%1").arg(id)); - info.setMaxJobs(5); + info.setMaxJobs(MAX_JOB_COUNT); info.setName(HOST_NAMES[id % HOST_NAMES.length()] + QString::number(id)); info.setColor(info.createColor(info.name())); info.setOffline(false); - info.setNoRemote(false); + info.setNoRemote(qFuzzyIsNull(speed)); info.setPlatform(randomPlatform()); - info.setProtocol(PROTOCOL_VERSION); + info.setProtocol(0); info.setFeatures(id % 2 == 0 ? QStringLiteral("env_xz") : QStringLiteral("env_zstd")); info.setServerLoad(1.0); - info.setServerSpeed(10); + info.setServerSpeed(speed); hostInfoManager()->checkNode(info); } void FakeMonitor::update() { - // create job - const int clientId = (JOB_ID % MAX_HOST_COUNT) + 1; - const QString fileName = JOB_FILENAMES[JOB_ID % JOB_FILENAMES.length()]; - Job job(JOB_ID++, clientId, fileName); - time_t rawtime; - time(&rawtime); - job.startTime = rawtime; - job.state = Job::Compiling; - job.in_compressed = QRandomGenerator::global()->generate() % MAX_JOB_SIZE * 0.75; // random factor - job.in_uncompressed = QRandomGenerator::global()->generate() % MAX_JOB_SIZE; - job.in_compressed = QRandomGenerator::global()->generate() % MAX_JOB_SIZE ; - job.in_uncompressed = QRandomGenerator::global()->generate() % MAX_JOB_SIZE * 0.75; // random factor - job.real_msec = 200; - const int serverId = ((JOB_ID + 1) % MAX_HOST_COUNT) + 1; - job.server = serverId; - emit jobUpdated(job); - m_activeJobs << job; + // create jobs + for (int i = 0; i < 10; ++i) { + const int jobId = JOB_ID++; + + const int clientId = (jobId % MAX_HOST_COUNT) + 1; + const QString fileName = JOB_FILENAMES[jobId % JOB_FILENAMES.length()]; + const auto hostInfo = hostInfoManager()->find(clientId); + assert(hostInfo); + if (qFuzzyIsNull(hostInfo->serverSpeed())) { + continue; + } + + Job job(jobId, clientId, fileName); + time_t rawtime; + time(&rawtime); + job.startTime = rawtime; + job.state = Job::Compiling; + job.in_compressed = QRandomGenerator::global()->generate() % MAX_JOB_SIZE * 0.75; // random factor + job.in_uncompressed = QRandomGenerator::global()->generate() % MAX_JOB_SIZE; + job.in_compressed = QRandomGenerator::global()->generate() % MAX_JOB_SIZE ; + job.in_uncompressed = QRandomGenerator::global()->generate() % MAX_JOB_SIZE * 0.75; // random factor + job.real_msec = 200; + const int serverId = ((jobId + 1) % MAX_HOST_COUNT) + 1; + job.server = serverId; + emit jobUpdated(job); + m_activeJobs << job; + } // clean up old jobs - if (m_activeJobs.size() > MAX_JOB_COUNT) { + if (m_activeJobs.size() > MAX_TOTAL_JOB_COUNT) { Job job = m_activeJobs.first(); m_activeJobs.removeFirst(); job.state = Job::Finished; diff --git a/src/hostinfo.cc b/src/hostinfo.cc index 38f78b0..7bdbf7a 100644 --- a/src/hostinfo.cc +++ b/src/hostinfo.cc @@ -248,13 +248,3 @@ HostInfoManager::HostMap HostInfoManager::hostMap() const { return mHostMap; } - -void HostInfoManager::setSchedulerName(const QString &schedulerName) -{ - mSchedulerName = schedulerName; -} - -void HostInfoManager::setNetworkName(const QString &networkName) -{ - mNetworkName = networkName; -} diff --git a/src/hostinfo.h b/src/hostinfo.h index 98b8bd0..4f49def 100644 --- a/src/hostinfo.h +++ b/src/hostinfo.h @@ -134,18 +134,11 @@ class HostInfoManager QColor hostColor(unsigned int id) const; unsigned int maxJobs(unsigned int id) const; - QString schedulerName() const { return mSchedulerName; } - void setSchedulerName(const QString &schedulerName); - QString networkName() const { return mNetworkName; } - void setNetworkName(const QString &networkName); - signals: void hostMapChanged(); private: HostMap mHostMap; - QString mSchedulerName; - QString mNetworkName; }; #endif diff --git a/src/icecreammonitor.cc b/src/icecreammonitor.cc index 75fa487..5266bed 100644 --- a/src/icecreammonitor.cc +++ b/src/icecreammonitor.cc @@ -80,7 +80,7 @@ void IcecreamMonitor::checkScheduler(bool deleteit) m_fd_type = QSocketNotifier::Exception; delete m_discover; m_discover = nullptr; - setSchedulerState(Offline); + setSchedulerState(SchedulerState::Offline); } else if (m_scheduler) { return; } @@ -90,13 +90,13 @@ void IcecreamMonitor::checkScheduler(bool deleteit) void IcecreamMonitor::registerNotify(int fd, QSocketNotifier::Type type, const char *slot) { if (m_fd_notify) { + // Reuse, but the slot will change. + m_fd_notify->disconnect(this); + if(m_fd_notify->socket() != fd || m_fd_notify->type() != type) { - m_fd_notify->disconnect(this); m_fd_notify->deleteLater(); m_fd_notify = nullptr; } - // Reuse, but the slot will change. - m_fd_notify->disconnect(this); } if (!m_fd_notify) { m_fd_notify = new QSocketNotifier(fd, type, this); @@ -111,12 +111,12 @@ void IcecreamMonitor::slotCheckScheduler() return; } - const string hostname = currentSchedname().isEmpty() ? "" : currentSchedname().data(); + const string hostname = currentSchedname().toStdString(); list names; const uint port = currentSchedport(); if (!currentNetname().isEmpty()) { - names.push_front(currentNetname().data()); + names.push_front(currentNetname().toStdString()); } else { names.push_front("ICECREAM"); } @@ -125,7 +125,7 @@ void IcecreamMonitor::slotCheckScheduler() names.push_front(""); // try $USE_SCHEDULER } for (auto it = names.begin(); it != names.end(); ++it) { - setCurrentNetname(QByteArray::fromStdString(*it)); + setCurrentNetname(QString::fromStdString(*it)); if (!m_discover || ((m_scheduler = m_discover->try_get_scheduler()) == NULL && m_discover->timed_out())) { delete m_discover; @@ -133,8 +133,6 @@ void IcecreamMonitor::slotCheckScheduler() } if (m_scheduler) { - hostInfoManager()->setSchedulerName(QString::fromLatin1(m_discover->schedulerName().data())); - hostInfoManager()->setNetworkName(QString::fromLatin1(m_discover->networkName().data())); m_scheduler->setBulkTransfer(); delete m_discover; m_discover = nullptr; @@ -145,7 +143,7 @@ void IcecreamMonitor::slotCheckScheduler() checkScheduler(true); QTimer::singleShot(0, this, &IcecreamMonitor::slotCheckScheduler); } else { - setSchedulerState(Online); + setSchedulerState(SchedulerState::Online); } return; } @@ -165,7 +163,7 @@ void IcecreamMonitor::slotCheckScheduler() } } - setSchedulerState(Offline); + setSchedulerState(SchedulerState::Offline); } void IcecreamMonitor::msgReceived() @@ -181,7 +179,7 @@ bool IcecreamMonitor::handle_activity() std::unique_ptr m(m_scheduler->get_msg()); if (!m) { checkScheduler(true); - setSchedulerState(Offline); + setSchedulerState(SchedulerState::Offline); return false; } @@ -255,7 +253,7 @@ void IcecreamMonitor::handle_local_done(Msg *_m) return; } - JobList::iterator it = m_rememberedJobs.find(m->job_id); + auto it = m_rememberedJobs.find(m->job_id); if (it == m_rememberedJobs.end()) { // we started in between return; @@ -308,7 +306,7 @@ void IcecreamMonitor::handle_job_begin(Msg *_m) return; } - JobList::iterator it = m_rememberedJobs.find(m->job_id); + auto it = m_rememberedJobs.find(m->job_id); if (it == m_rememberedJobs.end()) { // we started in between return; @@ -334,7 +332,7 @@ void IcecreamMonitor::handle_job_done(Msg *_m) return; } - JobList::iterator it = m_rememberedJobs.find(m->job_id); + auto it = m_rememberedJobs.find(m->job_id); if (it == m_rememberedJobs.end()) { // we started in between return; diff --git a/src/icecreammonitor.h b/src/icecreammonitor.h index c504ea1..6b04314 100644 --- a/src/icecreammonitor.h +++ b/src/icecreammonitor.h @@ -40,7 +40,7 @@ class IcecreamMonitor Q_OBJECT public: - IcecreamMonitor(HostInfoManager *, QObject *parent); + IcecreamMonitor(HostInfoManager *, QObject *parent = nullptr); ~IcecreamMonitor() override; QList jobHistory() const override; diff --git a/src/main.cc b/src/main.cc index 0d90699..895e474 100644 --- a/src/main.cc +++ b/src/main.cc @@ -25,9 +25,14 @@ #include #include +#include "hostinfo.h" #include "mainwindow.h" +#include "fakemonitor.h" +#include "icecreammonitor.h" #include "version.h" +#include "config-icemon.h" + int main(int argc, char **argv) { QApplication app(argc, argv); @@ -51,29 +56,43 @@ int main(int argc, char **argv) QCoreApplication::translate("main", "Icecream scheduler port"), QCoreApplication::translate("main", "port", "scheduler port")); parser.addOption(schedportOption); + +#if ICEMON_DEVELOPER_BUILD QCommandLineOption testmodeOption(QStringLiteral("testmode"), QCoreApplication::translate("main", "Testing mode.")); parser.addOption(testmodeOption); +#endif parser.process(app); - const QByteArray netName = parser.value(netnameOption).toLatin1(); - const QByteArray schedName = parser.value(schednameOption).toLatin1(); + const QString netName = parser.value(netnameOption); + const QString schedName = parser.value(schednameOption); + + HostInfoManager hostInfoManager; + + QScopedPointer monitor; +#if ICEMON_DEVELOPER_BUILD + if (parser.isSet(testmodeOption)) { + monitor.reset(new FakeMonitor(&hostInfoManager)); + } else { + monitor.reset(new IcecreamMonitor(&hostInfoManager)); + } +#else + monitor.reset(new IcecreamMonitor(&hostInfoManager)); +#endif - MainWindow mainWindow; if (!netName.isEmpty()) { - mainWindow.setCurrentNet(netName); + monitor->setCurrentNetname(netName); } if (!schedName.isEmpty()) { - mainWindow.setCurrentSched(schedName); - } - if (!parser.value(schedportOption).isEmpty()) - { - mainWindow.setCurrentPort(parser.value(schedportOption).toUInt()); + monitor->setCurrentSchedname(schedName); } - if (parser.isSet(testmodeOption)) { - mainWindow.setTestModeEnabled(true); + if (!parser.value(schedportOption).isEmpty()) { + monitor->setCurrentSchedport(parser.value(schedportOption).toUInt()); } + + MainWindow mainWindow; + mainWindow.setMonitor(monitor.get()); mainWindow.show(); return app.exec(); diff --git a/src/mainwindow.cc b/src/mainwindow.cc index 1eca307..8726e72 100644 --- a/src/mainwindow.cc +++ b/src/mainwindow.cc @@ -25,8 +25,6 @@ #include "hostinfo.h" #include "version.h" -#include "fakemonitor.h" -#include "icecreammonitor.h" #include "statusview.h" #include "statusviewfactory.h" @@ -150,16 +148,14 @@ MainWindow::MainWindow(QWidget *parent) connect(action, &QAction::triggered, this, &MainWindow::about); action->setMenuRole(QAction::AboutRole); - m_hostInfoManager = new HostInfoManager; - setMonitor(new IcecreamMonitor(m_hostInfoManager, this)); - resize(600, 400); readSettings(); + + updateSchedulerState(); } MainWindow::~MainWindow() { - delete m_hostInfoManager; } void MainWindow::closeEvent(QCloseEvent *e) @@ -249,7 +245,7 @@ void MainWindow::setMonitor(Monitor *monitor) if (m_view) { m_view->setMonitor(m_monitor); } - updateSchedulerState(m_monitor ? m_monitor->schedulerState() : Monitor::Offline); + updateSchedulerState(); } StatusView *MainWindow::view() const @@ -361,13 +357,13 @@ void MainWindow::about() .arg(QLatin1String(Icemon::Version::appShortName)), about); } -void MainWindow::updateSchedulerState(Monitor::SchedulerState state) +void MainWindow::updateSchedulerState() { - if (state == Monitor::Online) { - QString statusText = m_hostInfoManager->schedulerName(); + if (m_monitor && m_monitor->schedulerState() == Monitor::SchedulerState::Online) { + QString statusText = m_monitor->currentSchedname(); - if (!m_hostInfoManager->networkName().isEmpty()) { - statusText.append(QStringLiteral(" @ ")).append(m_hostInfoManager->networkName()); + if (!m_monitor->currentNetname().isEmpty()) { + statusText.append(QStringLiteral(" @ ")).append(m_monitor->currentNetname()); } m_schedStatusWidget->setText(statusText.isEmpty() ? tr("Scheduler is online.") : statusText); @@ -393,7 +389,7 @@ void MainWindow::updateJob(const Job &job) void MainWindow::updateJobStats() { - if (!m_monitor->schedulerState()) { + if (!m_monitor || m_monitor->schedulerState() == Monitor::SchedulerState::Offline) { m_jobStatsWidget->clear(); m_jobStatsWidget->setVisible(false); if (m_systemTrayIcon) @@ -456,35 +452,9 @@ void MainWindow::updateJobStats() } } -void MainWindow::setCurrentNet(const QByteArray &netname) -{ - m_monitor->setCurrentNetname(netname); -} - -void MainWindow::setCurrentSched(const QByteArray &schedname) -{ - m_monitor->setCurrentSchedname(schedname); -} - -void MainWindow::setCurrentPort(uint schedport) -{ - m_monitor->setCurrentSchedport(schedport); -} - void MainWindow::handleViewModeActionTriggered(QAction *action) { const QString viewId = action->data().toString(); Q_ASSERT(!viewId.isEmpty()); setView(StatusViewFactory::create(viewId, this)); } - -// It's nasty that we have to hard-code the implementations of Monitor -// But we can't just add a setMonitor() method because we require the host info manager -void MainWindow::setTestModeEnabled(bool testMode) -{ - if (testMode) { - setMonitor(new FakeMonitor(m_hostInfoManager, this)); - } else { - setMonitor(new IcecreamMonitor(m_hostInfoManager, this)); - } -} diff --git a/src/mainwindow.h b/src/mainwindow.h index 7d941aa..f381b7f 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -46,11 +46,10 @@ class MainWindow explicit MainWindow(QWidget *parent = nullptr); ~MainWindow() override; - void setCurrentNet(const QByteArray &netname); - void setCurrentSched(const QByteArray &schedname); - void setCurrentPort(uint schedport); - Monitor *monitor() const; + /// Does *not* take ownership over @p monitor + void setMonitor(Monitor *monitor); + StatusView *view() const; void setTestModeEnabled(bool testMode); @@ -67,7 +66,7 @@ private slots: void about(); - void updateSchedulerState(Monitor::SchedulerState state); + void updateSchedulerState(); void updateJob(const Job &); void updateJobStats(); @@ -77,12 +76,9 @@ private slots: void readSettings(); void writeSettings(); - /// Does *not* take ownership over @p monitor - void setMonitor(Monitor *monitor); /// Takes ownership over @p view void setView(StatusView *view); - HostInfoManager *m_hostInfoManager; QPointer m_monitor; StatusView *m_view{nullptr}; QSystemTrayIcon* m_systemTrayIcon{nullptr}; diff --git a/src/models/joblistmodel.cc b/src/models/joblistmodel.cc index 08a7690..15f59e5 100644 --- a/src/models/joblistmodel.cc +++ b/src/models/joblistmodel.cc @@ -264,8 +264,8 @@ void JobListModel::slotExpireFinishedJobs() // this list is sorted by the age of the finished jobs, the oldest is the first // so we've to find the first job which isn't old enough to expire - FinishedJobs::iterator it = m_finishedJobs.begin(); - for (const FinishedJobs::iterator itEnd = m_finishedJobs.end(); it != itEnd; ++it) { + auto it = m_finishedJobs.begin(); + for (const auto itEnd = m_finishedJobs.end(); it != itEnd; ++it) { if (currentTime - (*it).time < ( uint )m_expireDuration) { break; } @@ -288,7 +288,7 @@ void JobListModel::removeItem(const Job &job) void JobListModel::removeItemById(unsigned int jobId) { - QVector::iterator it = std::find_if(m_jobs.begin(), m_jobs.end(), + auto it = std::find_if(m_jobs.begin(), m_jobs.end(), [jobId](const Job &job) { return job.id == jobId; }); diff --git a/src/monitor.cc b/src/monitor.cc index 7b0f560..110d521 100644 --- a/src/monitor.cc +++ b/src/monitor.cc @@ -28,22 +28,22 @@ Monitor::Monitor(HostInfoManager *manager, QObject *parent) { } -QByteArray Monitor::currentNetname() const +QString Monitor::currentNetname() const { return m_currentNetname; } -void Monitor::setCurrentNetname(const QByteArray &netname) +void Monitor::setCurrentNetname(const QString &netname) { m_currentNetname = netname; } -QByteArray Monitor::currentSchedname() const +QString Monitor::currentSchedname() const { return m_currentSchedname; } -void Monitor::setCurrentSchedname(const QByteArray &schedname) +void Monitor::setCurrentSchedname(const QString &schedname) { m_currentSchedname = schedname; } diff --git a/src/monitor.h b/src/monitor.h index 708cecc..94553e9 100644 --- a/src/monitor.h +++ b/src/monitor.h @@ -40,19 +40,19 @@ class Monitor Q_PROPERTY(SchedulerState schedulerState READ schedulerState WRITE setSchedulerState NOTIFY schedulerStateChanged) Q_ENUMS(SchedulerState) -public - : enum SchedulerState { +public: + enum class SchedulerState { Offline, Online, }; explicit Monitor(HostInfoManager *manager, QObject *parent = nullptr); - QByteArray currentNetname() const; - void setCurrentNetname(const QByteArray &); + QString currentNetname() const; + void setCurrentNetname(const QString &); - QByteArray currentSchedname() const; - void setCurrentSchedname(const QByteArray &); + QString currentSchedname() const; + void setCurrentSchedname(const QString &); uint currentSchedport() const; void setCurrentSchedport(uint port); @@ -75,10 +75,10 @@ public private: HostInfoManager *m_hostInfoManager; - QByteArray m_currentNetname; - QByteArray m_currentSchedname; + QString m_currentNetname; + QString m_currentSchedname; uint m_currentSchedport{0}; - SchedulerState m_schedulerState{Offline}; + SchedulerState m_schedulerState{SchedulerState::Offline}; }; #endif // ICEMON_MONITOR_H diff --git a/src/views/ganttstatusview.cc b/src/views/ganttstatusview.cc index cf18df9..e89c1f3 100644 --- a/src/views/ganttstatusview.cc +++ b/src/views/ganttstatusview.cc @@ -321,10 +321,7 @@ void GanttStatusView::update(const Job &job) return; } - QMap::Iterator it; - - it = mJobMap.find(job.id); - + auto it = mJobMap.find(job.id); if (it != mJobMap.end()) { it.value()->update(job); if (job.state == Job::Finished || job.state == Job::Failed) { @@ -489,11 +486,9 @@ void GanttStatusView::removeSlot(unsigned int hostid, GanttProgress *slot) mNodeMap[hostid].removeAll(slot); JobMap newJobMap; - for (QMap::Iterator it = mJobMap.begin(); - it != mJobMap.end(); // QMap::remove doesn't return an iterator like - ++it) { // e.g. in QValueList, and I'm not sure if 'it' - if ((*it) != slot) { // or '++it' would be still valid, so let's copy - newJobMap[it.key()] = *it; // still valid items to a new map + for (auto it = mJobMap.begin(); it != mJobMap.end(); ++it) { + if ((*it) != slot) { + newJobMap[it.key()] = *it; // still valid items to a new map } } @@ -547,7 +542,7 @@ void GanttStatusView::start() void GanttStatusView::checkAge() { QList to_unregister; - for (AgeMap::Iterator it = mAgeMap.begin(); + for (auto it = mAgeMap.begin(); it != mAgeMap.end(); ++it) { if (*it > 1) { @@ -559,7 +554,7 @@ void GanttStatusView::checkAge() } } - for (QList::ConstIterator it = to_unregister.constBegin(); + for (auto it = to_unregister.constBegin(); it != to_unregister.constEnd(); ++it) { unregisterNode(*it); diff --git a/src/views/starview.cc b/src/views/starview.cc index 8aaaa84..7ff1bd6 100644 --- a/src/views/starview.cc +++ b/src/views/starview.cc @@ -273,12 +273,11 @@ void HostItem::update(const Job &job) return; } - bool finished = job.state == Job::Finished || - job.state == Job::Failed; - - JobList::Iterator it = m_jobs.find(job.id); - bool newJob = (it == m_jobs.end()); + const bool finished = job.state == Job::Finished || + job.state == Job::Failed; + auto it = m_jobs.find(job.id); + const bool newJob = (it == m_jobs.end()); if (newJob && finished) { return; } @@ -313,7 +312,7 @@ void HostItem::createJobHalo(const Job &job) void HostItem::deleteJobHalo(const Job &job) { - QMap::Iterator it = m_jobHalos.find(job); + auto it = m_jobHalos.find(job); if (it == m_jobHalos.end()) { return; } @@ -331,8 +330,7 @@ void HostItem::updateHalos() int count = 1; - QMap::Iterator it; - for (it = m_jobHalos.begin(); it != m_jobHalos.end(); ++it) { + for (auto it = m_jobHalos.begin(); it != m_jobHalos.end(); ++it) { QGraphicsEllipseItem *halo = it.value(); halo->setZValue(70 - count); halo->setRect(halo->x() - baseXMargin() - count * HaloMargin, halo->y() - baseYMargin() - count * HaloMargin, mBaseWidth + count * HaloMargin * 2, mBaseHeight + count * HaloMargin * 2); @@ -402,8 +400,7 @@ void StarView::update(const Job &job) bool finished = job.state == Job::Finished || job.state == Job::Failed; - QMap::Iterator it; - it = mJobMap.find(job.id); + auto it = mJobMap.find(job.id); if (it != mJobMap.end()) { (*it)->update(job); if (finished) { @@ -478,23 +475,19 @@ void StarView::removeNode(unsigned int hostid) // qDebug() << "StarView::removeNode() " << hostid << endl; HostItem *hostItem = findHostItem(hostid); - if (!hostItem) return; m_hostItems.remove(hostid); QList obsoleteJobs; - - QMap::Iterator it; - for (it = mJobMap.begin(); it != mJobMap.end(); ++it) { + for (auto it = mJobMap.begin(); it != mJobMap.end(); ++it) { if (it.value() == hostItem) { obsoleteJobs.append(it.key()); } } - QList::ConstIterator it2; - for (it2 = obsoleteJobs.constBegin(); it2 != obsoleteJobs.constEnd(); ++it2) { + for (auto it2 = obsoleteJobs.constBegin(); it2 != obsoleteJobs.constEnd(); ++it2) { mJobMap.remove(*it2); } @@ -506,9 +499,8 @@ void StarView::removeNode(unsigned int hostid) void StarView::updateSchedulerState(Monitor::SchedulerState state) { - if (state == Monitor::Offline) { - QMap::ConstIterator it; - for (it = m_hostItems.constBegin(); it != m_hostItems.constEnd(); ++it) { + if (state == Monitor::SchedulerState::Offline) { + for (auto it = m_hostItems.constBegin(); it != m_hostItems.constEnd(); ++it) { delete *it; } @@ -569,7 +561,7 @@ bool StarViewGraphicsView::event(QEvent *e) const QRect itemRect = mapFromScene(graphicsItem->sceneBoundingRect()).boundingRect(); if (hostInfo) { QToolTip::showText(gp + QPoint(10, 10), hostInfo->toolTip(), this, itemRect); - } else { + } else if (const auto monitor = m_starView->monitor()) { QToolTip::showText(gp + QPoint(10, 10), QStringLiteral( "

%1

" "" @@ -578,8 +570,8 @@ bool StarViewGraphicsView::event(QEvent *e) "
" "

") .arg(tr("Scheduler"), - tr("Host: %1").arg(m_starView->hostInfoManager()->schedulerName()), - tr("Network name: %1").arg(m_starView->hostInfoManager()->networkName()) + tr("Host: %1").arg(monitor->currentSchedname()), + tr("Network name: %1").arg(monitor->currentNetname()) ), this, itemRect); } @@ -592,7 +584,7 @@ bool StarViewGraphicsView::event(QEvent *e) void StarViewGraphicsView::arrangeSchedulerItem() { const Monitor *monitor = m_starView->monitor(); - const bool isOnline = (monitor ? monitor->schedulerState() == Monitor::Online : false); + const bool isOnline = monitor && monitor->schedulerState() == Monitor::SchedulerState::Online; m_schedulerItem->setFixedText(isOnline ? tr("Scheduler") : QStringLiteral("No scheduler available")); m_schedulerItem->setCenterPos(width() / 2, height() / 2); } @@ -604,8 +596,7 @@ void StarView::slotConfigChanged() } HostInfoManager::HostMap hostMap = hostInfoManager()->hostMap(); - HostInfoManager::HostMap::ConstIterator it; - for (it = hostMap.constBegin(); it != hostMap.constEnd(); ++it) { + for (auto it = hostMap.constBegin(); it != hostMap.constEnd(); ++it) { if (filterArch(*it)) { checkNode(it.key()); } else { @@ -720,10 +711,8 @@ void StarViewGraphicsView::drawState(HostItem *node) void StarView::createKnownHosts() { - HostInfoManager::HostMap hosts = hostInfoManager()->hostMap(); - - HostInfoManager::HostMap::ConstIterator it; - for (it = hosts.constBegin(); it != hosts.constEnd(); ++it) { + const HostInfoManager::HostMap hosts = hostInfoManager()->hostMap(); + for (auto it = hosts.constBegin(); it != hosts.constEnd(); ++it) { unsigned int id = (*it)->id(); if (!findHostItem(id)) { createHostItem(id); diff --git a/src/views/summaryview.cc b/src/views/summaryview.cc index d0bf9ca..f91c36f 100644 --- a/src/views/summaryview.cc +++ b/src/views/summaryview.cc @@ -175,7 +175,7 @@ void SummaryViewItem::update(const Job &job) m_jobCount++; updateStats(); - QVector::Iterator it = m_jobHandlers.begin(); + auto it = m_jobHandlers.begin(); while (it != m_jobHandlers.end() && !(*it).currentFile.isNull()) ++it; @@ -195,7 +195,7 @@ void SummaryViewItem::update(const Job &job) case Job::Finished: case Job::Failed: { - QVector::Iterator it = m_jobHandlers.begin(); + auto it = m_jobHandlers.begin(); while (it != m_jobHandlers.end() && (*it).currentFile != job.fileName) ++it;