92 lines
2.3 KiB
C++
92 lines
2.3 KiB
C++
#pragma once
|
|
|
|
#include <QDateTime>
|
|
#include <QObject>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include <QVector>
|
|
|
|
class QNetworkAccessManager;
|
|
class QNetworkReply;
|
|
|
|
// Array-/Pool-Disk (Werte in KB, wie von der API geliefert)
|
|
struct DiskInfo {
|
|
QString name;
|
|
QString device;
|
|
QString status; // DISK_OK, DISK_NP, ...
|
|
qint64 sizeKb = 0;
|
|
qint64 fsSizeKb = 0;
|
|
qint64 fsFreeKb = 0;
|
|
qint64 fsUsedKb = 0;
|
|
qint64 numErrors = 0;
|
|
int temp = -1; // -1 = unbekannt / spun down
|
|
bool isSpinning = true;
|
|
};
|
|
|
|
// Physische Disk inkl. SMART (Größe in Bytes)
|
|
struct PhysicalDiskInfo {
|
|
QString device;
|
|
QString model; // "name" im Schema
|
|
QString vendor;
|
|
QString serial;
|
|
QString interfaceType;
|
|
QString smartStatus; // OK / UNKNOWN
|
|
double sizeBytes = 0;
|
|
double temperature = -1; // -1 = unbekannt
|
|
};
|
|
|
|
struct ContainerInfo {
|
|
QString name;
|
|
QString image;
|
|
QString state; // RUNNING, PAUSED, EXITED
|
|
QString status; // "Up 2 days" etc.
|
|
bool autoStart = false;
|
|
};
|
|
|
|
struct ServerSnapshot {
|
|
// System
|
|
QString hostname;
|
|
QString distro, release, kernel;
|
|
QString unraidVersion, apiVersion;
|
|
QString cpuBrand;
|
|
int cpuCores = 0, cpuThreads = 0;
|
|
QDateTime bootTime;
|
|
double cpuPercent = -1;
|
|
qint64 memTotal = 0, memUsed = 0, memAvailable = 0; // Bytes
|
|
double memPercent = -1;
|
|
|
|
// Array
|
|
QString arrayState;
|
|
qint64 capFreeKb = 0, capUsedKb = 0, capTotalKb = 0;
|
|
QVector<DiskInfo> dataDisks;
|
|
QVector<DiskInfo> parityDisks;
|
|
QVector<DiskInfo> cachePools;
|
|
|
|
QVector<PhysicalDiskInfo> physicalDisks;
|
|
QVector<ContainerInfo> containers;
|
|
|
|
QStringList partialErrors; // GraphQL-Fehler bei Teilantworten
|
|
};
|
|
|
|
class UnraidClient : public QObject {
|
|
Q_OBJECT
|
|
public:
|
|
explicit UnraidClient(QObject *parent = nullptr);
|
|
|
|
void setConnection(const QString &baseUrl, const QString &apiKey, bool ignoreSsl);
|
|
void refresh();
|
|
|
|
signals:
|
|
void snapshotReady(const ServerSnapshot &snapshot);
|
|
void requestFailed(const QString &error);
|
|
|
|
private:
|
|
void handleReply(QNetworkReply *reply);
|
|
static ServerSnapshot parseData(const QJsonObject &data);
|
|
|
|
QNetworkAccessManager *m_nam;
|
|
QString m_baseUrl;
|
|
QString m_apiKey;
|
|
bool m_ignoreSsl = false;
|
|
bool m_busy = false;
|
|
};
|