#include "speedcheck.h" #include "ui_speedcheck.h" #include "copythread.h" #include "datasource/cpuload.h" #include "datasource/networkspeed.h" #include #include #include #include #include #include #include SpeedCheck::SpeedCheck(QString fileName, bool cml) : _ui(new Ui::MainWindow), _thread(NULL), _doQuit(false), _fileName(fileName) { _ui->setupUi(this); connect(_ui->btnStart, SIGNAL(clicked(bool)), this, SLOT(startClicked(bool))); connect(_ui->btnQuit, SIGNAL(clicked(bool)), this, SLOT(quitClicked(bool))); connect(_ui->btnselect, SIGNAL(clicked(bool)), this, SLOT(selectClicked(bool))); connect(_ui->btnrefreshNetwork, SIGNAL(clicked(bool)), this, SLOT(networkrefreshClicked(bool))); connect(_ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(updateNetworkInfos(int))); _ui->filelabel->setText("Selected File: " + _fileName); _timer.setInterval(200); connect(&_timer, SIGNAL(timeout()), this, SLOT(updateTimer())); qsrand((uint)QCoreApplication::applicationPid()); networkrefreshClicked(true); if (cml) startClicked(true); } SpeedCheck::~SpeedCheck() { } void SpeedCheck::logMessage(QString message) { _ui->statusBar->showMessage(message); } void SpeedCheck::selectClicked(bool) { _fileName = QFileDialog::getOpenFileName(this, tr("Select benchmark file")); _ui->filelabel->setText("Selected File: " + _fileName); } void SpeedCheck::startClicked(bool) { QFile *file = new QFile(_fileName); if (!file->open(QIODevice::ReadOnly)) { QMessageBox::critical(this, trUtf8("Error"), trUtf8("Could not open %1 for reading.").arg(_fileName)); return; } _ui->picCpu->setDataSource(new CpuLoad()); _ui->picSpeed->setDataSource(new NetworkSpeed(_ui->comboBox->currentText())); _ui->btnStart->setDisabled(true); _ui->btnselect->setDisabled(true); _ui->comboBox->setDisabled(true); _ui->btnrefreshNetwork->setDisabled(true); delete _thread; _thread = new CopyThread(file, this); connect(_thread, SIGNAL(logMessage(QString)), this, SLOT(logMessage(QString)), Qt::QueuedConnection); connect(_thread, SIGNAL(finished()), this, SLOT(testFinished()), Qt::QueuedConnection); _timer.start(); _thread->start(); } void SpeedCheck::quitClicked(bool) { if (_thread != NULL && _thread->isRunning()) { _doQuit = true; _thread->stop(); } if (_thread == NULL || !_thread->isRunning()) { QCoreApplication::instance()->quit(); } } void SpeedCheck::testFinished() { _timer.stop(); delete _thread; _thread = NULL; if (_doQuit) { QCoreApplication::instance()->quit(); } _ui->btnStart->setEnabled(true); _ui->btnselect->setEnabled(true); _ui->comboBox->setEnabled(true); _ui->btnrefreshNetwork->setEnabled(true); quitClicked(true); } void SpeedCheck::networkrefreshClicked(bool) { while (_ui->comboBox->count() > 0) { _ui->comboBox->removeItem(0); } QList interfaces = QNetworkInterface::allInterfaces(); foreach (QNetworkInterface iface, interfaces) { if ((iface.flags().testFlag(QNetworkInterface::IsUp)) && !iface.flags().testFlag(QNetworkInterface::IsLoopBack)) { _ui->comboBox->addItem(iface.name()); } } } void SpeedCheck::updateNetworkInfos(int) { QString path = "/sys/class/net/" + _ui->comboBox->currentText(); QFile file(path + "/speed"); if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) return; QByteArray speed = file.readLine(); QDir wireless(path + "/wireless"); // Remove new line at End of the line speed.remove(speed.length() - 1, 1); if (!wireless.exists()) { if (speed.toInt() < 1000) { _ui->networkSpeed->setStyleSheet("QLabel {color:orange;}"); _ui->networkSpeed->setToolTip("Networkspeed slow!"); } else { _ui->networkSpeed->setStyleSheet("QLabel {color:black;}"); _ui->networkSpeed->setToolTip(""); } _ui->connType->setText("wired"); _ui->networkSpeed->setEnabled(true); _ui->link->setEnabled(true); _ui->link->setText("Speed: "); _ui->networkSpeed->setText(speed + " MB/s"); } else { _ui->networkSpeed->setDisabled(true); _ui->networkSpeed->setText(""); _ui->link->setText(""); _ui->connType->setText("wireless"); } } void SpeedCheck::updateTimer() { _ui->picCpu->readNextValue(); _ui->picSpeed->readNextValue(); }