...
1
2
3
4 package disk
5
6
12 import "C"
13
14 import (
15 "context"
16
17 "github.com/shirou/gopsutil/internal/common"
18 )
19
20 func IOCountersWithContext(ctx context.Context, names ...string) (map[string]IOCountersStat, error) {
21 var buf [C.NDRIVE]C.DriveStats
22 n, err := C.readdrivestat(&buf[0], C.int(len(buf)))
23 if err != nil {
24 return nil, err
25 }
26 ret := make(map[string]IOCountersStat, 0)
27 for i := 0; i < int(n); i++ {
28 d := IOCountersStat{
29 ReadBytes: uint64(buf[i].read),
30 WriteBytes: uint64(buf[i].written),
31 ReadCount: uint64(buf[i].nread),
32 WriteCount: uint64(buf[i].nwrite),
33 ReadTime: uint64(buf[i].readtime / 1000 / 1000),
34 WriteTime: uint64(buf[i].writetime / 1000 / 1000),
35 IoTime: uint64((buf[i].readtime + buf[i].writetime) / 1000 / 1000),
36 Name: C.GoString(&buf[i].name[0]),
37 }
38 if len(names) > 0 && !common.StringsHas(names, d.Name) {
39 continue
40 }
41
42 ret[d.Name] = d
43 }
44 return ret, nil
45 }
46
View as plain text