mirror of
https://github.com/henrygd/beszel.git
synced 2026-09-21 00:47:47 +02:00
- track pool capacity, health, I/O, scrub status, and vdev errors - report dataset usage and correct ZFS filesystem metrics - add pool charts, detail views, refresh controls, and health alerts - persist pool details and include ZFS usage in disk alerts - support configurable detail intervals and legacy agent compatibility --------- Co-authored-by: hank <hank@henrygd.me>
185 lines
3.7 KiB
Go
185 lines
3.7 KiB
Go
package migrations
|
|
|
|
import (
|
|
"github.com/pocketbase/pocketbase/core"
|
|
m "github.com/pocketbase/pocketbase/migrations"
|
|
)
|
|
|
|
// Creates the zfs_pools collection for per-system ZFS pool detail data
|
|
// (pool health, capacity, scrub, vdevs, datasets). Upserts rather than
|
|
// deletes missing collections, so it is safe on fresh and existing installs.
|
|
func init() {
|
|
m.Register(func(app core.App) error {
|
|
// update collections
|
|
jsonData := `[
|
|
{
|
|
"createRule": null,
|
|
"deleteRule": null,
|
|
"fields": [
|
|
{
|
|
"autogeneratePattern": "[a-z0-9]{15}",
|
|
"hidden": false,
|
|
"id": "text3208210256",
|
|
"max": 15,
|
|
"min": 15,
|
|
"name": "id",
|
|
"pattern": "^[a-z0-9]+$",
|
|
"presentable": false,
|
|
"primaryKey": true,
|
|
"required": true,
|
|
"system": true,
|
|
"type": "text"
|
|
},
|
|
{
|
|
"cascadeDelete": true,
|
|
"collectionId": "2hz5ncl8tizk5nx",
|
|
"hidden": false,
|
|
"id": "relation1204987316",
|
|
"maxSelect": 1,
|
|
"minSelect": 0,
|
|
"name": "system",
|
|
"presentable": false,
|
|
"required": true,
|
|
"system": false,
|
|
"type": "relation"
|
|
},
|
|
{
|
|
"autogeneratePattern": "",
|
|
"hidden": false,
|
|
"id": "text7739291048",
|
|
"max": 0,
|
|
"min": 0,
|
|
"name": "name",
|
|
"pattern": "",
|
|
"presentable": false,
|
|
"primaryKey": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "text"
|
|
},
|
|
{
|
|
"autogeneratePattern": "",
|
|
"hidden": false,
|
|
"id": "text5528164482",
|
|
"max": 0,
|
|
"min": 0,
|
|
"name": "health",
|
|
"pattern": "",
|
|
"presentable": false,
|
|
"primaryKey": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "text"
|
|
},
|
|
{
|
|
"hidden": false,
|
|
"id": "number8862034195",
|
|
"max": null,
|
|
"min": null,
|
|
"name": "size",
|
|
"onlyInt": true,
|
|
"presentable": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"hidden": false,
|
|
"id": "number4418907321",
|
|
"max": null,
|
|
"min": null,
|
|
"name": "alloc",
|
|
"onlyInt": true,
|
|
"presentable": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"hidden": false,
|
|
"id": "number2904183765",
|
|
"max": null,
|
|
"min": null,
|
|
"name": "free",
|
|
"onlyInt": true,
|
|
"presentable": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "number"
|
|
},
|
|
{
|
|
"hidden": false,
|
|
"id": "json4466109723",
|
|
"maxSize": 0,
|
|
"name": "scrub",
|
|
"presentable": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "json"
|
|
},
|
|
{
|
|
"hidden": false,
|
|
"id": "json9012873456",
|
|
"maxSize": 0,
|
|
"name": "vdevs",
|
|
"presentable": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "json"
|
|
},
|
|
{
|
|
"hidden": false,
|
|
"id": "json7182045639",
|
|
"maxSize": 0,
|
|
"name": "datasets",
|
|
"presentable": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "json"
|
|
},
|
|
{
|
|
"hidden": false,
|
|
"id": "date9274163058",
|
|
"max": "",
|
|
"min": "",
|
|
"name": "details_updated",
|
|
"presentable": false,
|
|
"required": false,
|
|
"system": false,
|
|
"type": "date"
|
|
},
|
|
{
|
|
"hidden": false,
|
|
"id": "autodate3332085495",
|
|
"name": "updated",
|
|
"onCreate": true,
|
|
"onUpdate": true,
|
|
"presentable": false,
|
|
"system": false,
|
|
"type": "autodate"
|
|
}
|
|
],
|
|
"id": "pbc_8441057391",
|
|
"indexes": [
|
|
"CREATE INDEX ` + "`" + `idx_zfsPoolsSystem` + "`" + ` ON ` + "`" + `zfs_pools` + "`" + ` (` + "`" + `system` + "`" + `)"
|
|
],
|
|
"listRule": null,
|
|
"name": "zfs_pools",
|
|
"system": false,
|
|
"type": "base",
|
|
"updateRule": null,
|
|
"viewRule": null
|
|
}
|
|
]`
|
|
|
|
err := app.ImportCollectionsByMarshaledJSON([]byte(jsonData), false)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}, func(app core.App) error {
|
|
return nil
|
|
})
|
|
}
|