Skip to content

Commit 227df04

Browse files
committed
[disk][solaris] implement SerialNumberWithContext
1 parent f6cc356 commit 227df04

File tree

1 file changed

+31
-1
lines changed

1 file changed

+31
-1
lines changed

disk/disk_solaris.go

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,12 @@ package disk
55

66
import (
77
"bufio"
8+
"bytes"
89
"context"
910
"fmt"
1011
"math"
1112
"os"
13+
"os/exec"
1214
"strings"
1315

1416
"github.com/shirou/gopsutil/v3/internal/common"
@@ -114,7 +116,35 @@ func UsageWithContext(ctx context.Context, path string) (*UsageStat, error) {
114116
}
115117

116118
func SerialNumberWithContext(ctx context.Context, name string) (string, error) {
117-
return "", common.ErrNotImplementedError
119+
cfgadm, err := exec.LookPath("cfgadm")
120+
if err != nil {
121+
return "", fmt.Errorf("find cfgadm: %w", err)
122+
}
123+
out, err := invoke.CommandWithContext(ctx, cfgadm, "-ls", "select=type(disk),cols=ap_id:info,cols2=,noheadings")
124+
if err != nil {
125+
return "", fmt.Errorf("exec cfgadm: %w", err)
126+
}
127+
128+
suf := "::" + strings.TrimPrefix(name, "/dev/")
129+
s := bufio.NewScanner(bytes.NewReader(out))
130+
for s.Scan() {
131+
flds := strings.Fields(s.Text())
132+
if strings.HasSuffix(flds[0], suf) {
133+
flen := len(flds)
134+
if flen >= 3 {
135+
for i, f := range flds {
136+
if i > 0 && i < flen-1 && f == "SN:" {
137+
return flds[i+1], nil
138+
}
139+
}
140+
}
141+
return "", nil
142+
}
143+
}
144+
if err = s.Err(); err != nil {
145+
return "", err
146+
}
147+
return "", nil
118148
}
119149

120150
func LabelWithContext(ctx context.Context, name string) (string, error) {

0 commit comments

Comments
 (0)