/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Copyright (C) 2018 Michael Zanetti . * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ #include "devicepluginsystemmonitor.h" #include "plugininfo.h" DevicePluginSystemMonitor::DevicePluginSystemMonitor() { } DevicePluginSystemMonitor::~DevicePluginSystemMonitor() { if (m_refreshTimer) { hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer); } } DeviceManager::DeviceSetupStatus DevicePluginSystemMonitor::setupDevice(Device *device) { Q_UNUSED(device) if (!m_refreshTimer) { m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(2); connect(m_refreshTimer, &PluginTimer::timeout, this, &DevicePluginSystemMonitor::onRefreshTimer); } return DeviceManager::DeviceSetupStatusSuccess; } void DevicePluginSystemMonitor::deviceRemoved(Device *device) { Q_UNUSED(device) if (myDevices().isEmpty()) { hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer); m_refreshTimer = nullptr; } } void DevicePluginSystemMonitor::onRefreshTimer() { QProcess *p = new QProcess(this); connect(p, SIGNAL(finished(int,QProcess::ExitStatus)), this, SLOT(onProcessFinished(int,QProcess::ExitStatus))); p->start("ps", {"-C", "nymead", "-o", "rss="}); } void DevicePluginSystemMonitor::onProcessFinished(int exitCode, QProcess::ExitStatus exitStatus) { QProcess *p = static_cast(sender()); p->deleteLater(); if (exitCode != 0 || exitStatus != QProcess::NormalExit) { qWarning(dcSystemMonitor) << "Error reading process memory usage:" << p->readAllStandardError(); return; } QByteArray data = p->readAllStandardOutput().trimmed(); bool ok; qreal rssMem = data.toDouble(&ok); if (!ok) { qWarning(dcSystemMonitor) << "Failed to parse RSS memory value to a number:" << data; return; } foreach (Device *dev, myDevices()) { dev->setStateValue(systemMonitorRssMemoryStateTypeId, rssMem); } }