From 227df04773fa852219d0224f6d030c3ca7ceb1d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ville=20Skytt=C3=A4?= Date: Wed, 23 Feb 2022 00:02:20 +0200 Subject: [PATCH 1/2] [disk][solaris] implement SerialNumberWithContext --- disk/disk_solaris.go | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) diff --git a/disk/disk_solaris.go b/disk/disk_solaris.go index 126a9e1e9..a2414e3b7 100644 --- a/disk/disk_solaris.go +++ b/disk/disk_solaris.go @@ -5,10 +5,12 @@ package disk import ( "bufio" + "bytes" "context" "fmt" "math" "os" + "os/exec" "strings" "github.com/shirou/gopsutil/v3/internal/common" @@ -114,7 +116,35 @@ func UsageWithContext(ctx context.Context, path string) (*UsageStat, error) { } func SerialNumberWithContext(ctx context.Context, name string) (string, error) { - return "", common.ErrNotImplementedError + cfgadm, err := exec.LookPath("cfgadm") + if err != nil { + return "", fmt.Errorf("find cfgadm: %w", err) + } + out, err := invoke.CommandWithContext(ctx, cfgadm, "-ls", "select=type(disk),cols=ap_id:info,cols2=,noheadings") + if err != nil { + return "", fmt.Errorf("exec cfgadm: %w", err) + } + + suf := "::" + strings.TrimPrefix(name, "/dev/") + s := bufio.NewScanner(bytes.NewReader(out)) + for s.Scan() { + flds := strings.Fields(s.Text()) + if strings.HasSuffix(flds[0], suf) { + flen := len(flds) + if flen >= 3 { + for i, f := range flds { + if i > 0 && i < flen-1 && f == "SN:" { + return flds[i+1], nil + } + } + } + return "", nil + } + } + if err = s.Err(); err != nil { + return "", err + } + return "", nil } func LabelWithContext(ctx context.Context, name string) (string, error) { From 38e1debe71fa77882112894556a56a1d2665c9ff Mon Sep 17 00:00:00 2001 From: shirou Date: Fri, 25 Feb 2022 21:57:01 +0900 Subject: [PATCH 2/2] Update disk/disk_solaris.go --- disk/disk_solaris.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/disk/disk_solaris.go b/disk/disk_solaris.go index a2414e3b7..67112ce82 100644 --- a/disk/disk_solaris.go +++ b/disk/disk_solaris.go @@ -141,7 +141,7 @@ func SerialNumberWithContext(ctx context.Context, name string) (string, error) { return "", nil } } - if err = s.Err(); err != nil { + if err := s.Err(); err != nil { return "", err } return "", nil