From 19733a05fa9aee70a4986337b98fe00ce9155a49 Mon Sep 17 00:00:00 2001 From: Markus Ressel Date: Sun, 3 Nov 2024 20:56:21 +0100 Subject: [PATCH] add "Refer" column to snapshot browser --- internal/ui/snapshot_browser/snapshot_browser.go | 11 ++++++++++- internal/zfs/snapshot.go | 9 +++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/internal/ui/snapshot_browser/snapshot_browser.go b/internal/ui/snapshot_browser/snapshot_browser.go index 511db95..898ec86 100644 --- a/internal/ui/snapshot_browser/snapshot_browser.go +++ b/internal/ui/snapshot_browser/snapshot_browser.go @@ -65,8 +65,13 @@ var ( Title: "Used", Alignment: tview.AlignCenter, } + columnRefer = &table.Column{ + Id: 4, + Title: "Refer", + Alignment: tview.AlignCenter, + } tableColumns = []*table.Column{ - columnName, columnDate, columnDiff, columnUsed, + columnName, columnDate, columnDiff, columnUsed, columnRefer, } ) @@ -117,6 +122,8 @@ func (snapshotBrowser *SnapshotBrowserComponent) createLayout() *tview.Pages { } } else if column == columnUsed { cellText = humanize.IBytes(entry.Snapshot.GetUsed()) + } else if column == columnRefer { + cellText = humanize.IBytes(entry.Snapshot.GetReferenced()) } cell := tview.NewTableCell(cellText). SetTextColor(cellColor).SetAlign(cellAlign) @@ -139,6 +146,8 @@ func (snapshotBrowser *SnapshotBrowserComponent) createLayout() *tview.Pages { result = int(b.DiffState - a.DiffState) } else if columnToSortBy == columnUsed { result = int(b.Snapshot.GetUsed() - a.Snapshot.GetUsed()) + } else if columnToSortBy == columnRefer { + result = int(b.Snapshot.GetReferenced() - a.Snapshot.GetReferenced()) } if inverted { result *= -1 diff --git a/internal/zfs/snapshot.go b/internal/zfs/snapshot.go index 20b65d2..97cd267 100644 --- a/internal/zfs/snapshot.go +++ b/internal/zfs/snapshot.go @@ -314,6 +314,15 @@ func (s *Snapshot) GetUsed() uint64 { return used } +func (s *Snapshot) GetReferenced() uint64 { + referenced, err := strconv.ParseUint(s.internalSnapshot.Properties[golibzfs.DatasetPropReferenced].Value, 10, 64) + if err != nil { + logging.Error("Could not parse referenced property: %s", err.Error()) + return 0 + } + return referenced +} + func syncFileProperties(dstPath string, stat os.FileInfo) error { err := os.Chmod(dstPath, stat.Mode()) if err != nil {