NVMe Part 1

This commit is contained in:
Spiros
2024-05-31 18:43:27 +03:00
parent 97b8619984
commit 2a47eb2850
2 changed files with 47 additions and 2 deletions

View File

@@ -69,7 +69,7 @@ void MainWindow::scanDevices()
QJsonObject localObj = localDoc.object();
QJsonArray attributes = localObj["ata_smart_attributes"].toObject()["table"].toArray();
QJsonArray nvmeLog = localObj["nvme_smart_health_information_log"].toArray();
QJsonObject nvmeLog = localObj["nvme_smart_health_information_log"].toObject();
QString temperature = "N/A";
bool healthPassed = localObj["smart_status"].toObject()["passed"].toBool();
bool caution = false;
@@ -134,7 +134,7 @@ void MainWindow::scanDevices()
void MainWindow::populateWindow(const QJsonObject &localObj, const QString &health)
{
QJsonArray attributes = localObj["ata_smart_attributes"].toObject()["table"].toArray();
QJsonArray nvmeLog = localObj["nvme_smart_health_information_log"].toArray();
QJsonObject nvmeLog = localObj["nvme_smart_health_information_log"].toObject();
QString modelName = localObj["model_name"].toString();
QString firmwareVersion = localObj["firmware_version"].toString();
float userCapacityGB = localObj.value("user_capacity").toObject().value("bytes").toDouble() / 1e9;
@@ -275,9 +275,52 @@ void MainWindow::populateWindow(const QJsonObject &localObj, const QString &heal
if (protocol != "NVMe") {
addSmartAttributesTable(attributes);
} else {
addNvmeLogTable(nvmeLog);
}
}
void MainWindow::addNvmeLogTable(const QJsonObject &nvmeLog)
{
tableWidget->setColumnCount(4);
tableWidget->setHorizontalHeaderLabels({"", "ID", "Attribute Name", "Raw Values"});
tableWidget->verticalHeader()->setVisible(false);
tableWidget->setItemDelegateForColumn(0, new StatusDot(tableWidget));
tableWidget->setRowCount(nvmeLog.size());
int row = 0;
for (auto smartItem = nvmeLog.constBegin(); smartItem != nvmeLog.constEnd(); ++smartItem) {
QString id = QString("%1").arg(row, 2, 16, QChar('0')).toUpper();
QString name = smartItem.key().replace("_", " ");
QString raw = QString::number(smartItem.value().toInt());
raw = QString("%1").arg(raw.toUInt(nullptr), 14, 16, QChar('0')).toUpper();
QColor statusColor;
statusColor = Qt::green; // For now leave it all green
QTableWidgetItem *statusItem = new QTableWidgetItem();
statusItem->setBackground(Qt::transparent);
statusItem->setData(Qt::BackgroundRole, QVariant(statusColor));
QTableWidgetItem *idItem = new QTableWidgetItem(id);
idItem->setTextAlignment(Qt::AlignCenter);
QTableWidgetItem *nameItem = new QTableWidgetItem(name);
QTableWidgetItem *rawItem = new QTableWidgetItem(raw);
rawItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
tableWidget->setItem(row, 0, statusItem);
tableWidget->setItem(row, 1, idItem);
tableWidget->setItem(row, 2, nameItem);
tableWidget->setItem(row, 3, rawItem);
++row;
}
}
void MainWindow::addSmartAttributesTable(const QJsonArray &attributes)
{
tableWidget->setColumnCount(7);
@@ -330,6 +373,7 @@ void MainWindow::addSmartAttributesTable(const QJsonArray &attributes)
idItem->setTextAlignment(Qt::AlignCenter);
QTableWidgetItem *nameItem = new QTableWidgetItem(name);
QTableWidgetItem *valueItem = new QTableWidgetItem(QString::number(value));
valueItem->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);

View File

@@ -40,6 +40,7 @@ private:
void scanDevices();
void populateWindow(const QJsonObject &tempObj, const QString &health);
void addNvmeLogTable(const QJsonObject &nvmeLog);
void addSmartAttributesTable(const QJsonArray &attributes);
QString getSmartctlOutput(const QStringList &arguments, bool root);
};