mirror of
https://github.com/karl0ss/homepage.git
synced 2025-05-02 05:23:39 +01:00
Fix: TrueNAS Core support for pool stats (#3206)
--------- Co-authored-by: shamoon <4887959+shamoon@users.noreply.github.com>
This commit is contained in:
parent
268d8efa0e
commit
4e69ea6088
@ -11,6 +11,8 @@ To create an API Key, follow [the official TrueNAS documentation](https://www.tr
|
|||||||
|
|
||||||
A detailed pool listing is disabled by default, but can be enabled with the `enablePools` option.
|
A detailed pool listing is disabled by default, but can be enabled with the `enablePools` option.
|
||||||
|
|
||||||
|
To use the `enablePools` option with TrueNAS Core, the `nasType` parameter is required.
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
widget:
|
widget:
|
||||||
type: truenas
|
type: truenas
|
||||||
@ -19,4 +21,5 @@ widget:
|
|||||||
password: pass # not required if using api key
|
password: pass # not required if using api key
|
||||||
key: yourtruenasapikey # not required if using username / password
|
key: yourtruenasapikey # not required if using username / password
|
||||||
enablePools: true # optional, defaults to false
|
enablePools: true # optional, defaults to false
|
||||||
|
nasType: scale # defaults to scale, must be set to 'core' if using enablePools with TrueNAS Core
|
||||||
```
|
```
|
||||||
|
@ -450,6 +450,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
|
|
||||||
// truenas
|
// truenas
|
||||||
enablePools,
|
enablePools,
|
||||||
|
nasType,
|
||||||
|
|
||||||
// unifi
|
// unifi
|
||||||
site,
|
site,
|
||||||
@ -522,6 +523,7 @@ export function cleanServiceGroups(groups) {
|
|||||||
}
|
}
|
||||||
if (type === "truenas") {
|
if (type === "truenas") {
|
||||||
if (enablePools !== undefined) cleanedService.widget.enablePools = JSON.parse(enablePools);
|
if (enablePools !== undefined) cleanedService.widget.enablePools = JSON.parse(enablePools);
|
||||||
|
if (nasType !== undefined) cleanedService.widget.nasType = nasType;
|
||||||
}
|
}
|
||||||
if (["diskstation", "qnap"].includes(type)) {
|
if (["diskstation", "qnap"].includes(type)) {
|
||||||
if (volume) cleanedService.widget.volume = volume;
|
if (volume) cleanedService.widget.volume = volume;
|
||||||
|
@ -40,7 +40,15 @@ export default function Component({ service }) {
|
|||||||
</Container>
|
</Container>
|
||||||
{enablePools &&
|
{enablePools &&
|
||||||
poolsData.map((pool) => (
|
poolsData.map((pool) => (
|
||||||
<Pool key={pool.id} name={pool.name} healthy={pool.healthy} allocated={pool.allocated} free={pool.free} />
|
<Pool
|
||||||
|
key={pool.id}
|
||||||
|
name={pool.name}
|
||||||
|
healthy={pool.healthy}
|
||||||
|
allocated={pool.allocated}
|
||||||
|
free={pool.free}
|
||||||
|
data={pool.data}
|
||||||
|
nasType={widget?.nasType ?? "scale"}
|
||||||
|
/>
|
||||||
))}
|
))}
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
@ -1,8 +1,18 @@
|
|||||||
import classNames from "classnames";
|
import classNames from "classnames";
|
||||||
import prettyBytes from "pretty-bytes";
|
import prettyBytes from "pretty-bytes";
|
||||||
|
|
||||||
export default function Pool({ name, free, allocated, healthy }) {
|
export default function Pool({ name, free, allocated, healthy, data, nasType }) {
|
||||||
const total = free + allocated;
|
let total = 0;
|
||||||
|
if (nasType === "scale") {
|
||||||
|
total = free + allocated;
|
||||||
|
} else {
|
||||||
|
allocated = 0; // eslint-disable-line no-param-reassign
|
||||||
|
for (let i = 0; i < data.length; i += 1) {
|
||||||
|
total += data[i].stats.size;
|
||||||
|
allocated += data[i].stats.allocated; // eslint-disable-line no-param-reassign
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const usedPercent = Math.round((allocated / total) * 100);
|
const usedPercent = Math.round((allocated / total) * 100);
|
||||||
const statusColor = healthy ? "bg-green-500" : "bg-yellow-500";
|
const statusColor = healthy ? "bg-green-500" : "bg-yellow-500";
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ const widget = {
|
|||||||
healthy: entry.healthy,
|
healthy: entry.healthy,
|
||||||
allocated: entry.allocated,
|
allocated: entry.allocated,
|
||||||
free: entry.free,
|
free: entry.free,
|
||||||
|
data: entry.topology.data,
|
||||||
})),
|
})),
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
Loading…
x
Reference in New Issue
Block a user