Unraid Monitor for one-screen overview
This commit is contained in:
commit
e7c3d20c8e
13 changed files with 1545 additions and 0 deletions
92
src/UnraidClient.h
Normal file
92
src/UnraidClient.h
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
#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;
|
||||
};
|
||||
Loading…
Add table
Add a link
Reference in a new issue