Merge pull request #242 from lfittl/add-missing-linux-disk-io-statistics

Add missing disk IO statistics for merged reads/writes, IOPS in progress
pull/240/head
shirou 9 years ago committed by GitHub
commit 2eb8f8bff8

@ -33,15 +33,18 @@ type PartitionStat struct {
} }
type IOCountersStat struct { type IOCountersStat struct {
ReadCount uint64 `json:"readCount"` ReadCount uint64 `json:"readCount"`
WriteCount uint64 `json:"writeCount"` MergedReadCount uint64 `json:"mergedReadCount"`
ReadBytes uint64 `json:"readBytes"` WriteCount uint64 `json:"writeCount"`
WriteBytes uint64 `json:"writeBytes"` MergedWriteCount uint64 `json:"mergedWriteCount"`
ReadTime uint64 `json:"readTime"` ReadBytes uint64 `json:"readBytes"`
WriteTime uint64 `json:"writeTime"` WriteBytes uint64 `json:"writeBytes"`
Name string `json:"name"` ReadTime uint64 `json:"readTime"`
IoTime uint64 `json:"ioTime"` WriteTime uint64 `json:"writeTime"`
SerialNumber string `json:"serialNumber"` IopsInProgress uint64 `json:"iopsInProgress"`
IoTime uint64 `json:"ioTime"`
Name string `json:"name"`
SerialNumber string `json:"serialNumber"`
} }
func (d UsageStat) String() string { func (d UsageStat) String() string {

@ -292,6 +292,10 @@ func IOCounters() (map[string]IOCountersStat, error) {
if err != nil { if err != nil {
return ret, err return ret, err
} }
mergedReads, err := strconv.ParseUint((fields[4]), 10, 64)
if err != nil {
return ret, err
}
rbytes, err := strconv.ParseUint((fields[5]), 10, 64) rbytes, err := strconv.ParseUint((fields[5]), 10, 64)
if err != nil { if err != nil {
return ret, err return ret, err
@ -304,6 +308,10 @@ func IOCounters() (map[string]IOCountersStat, error) {
if err != nil { if err != nil {
return ret, err return ret, err
} }
mergedWrites, err := strconv.ParseUint((fields[8]), 10, 64)
if err != nil {
return ret, err
}
wbytes, err := strconv.ParseUint((fields[9]), 10, 64) wbytes, err := strconv.ParseUint((fields[9]), 10, 64)
if err != nil { if err != nil {
return ret, err return ret, err
@ -312,18 +320,25 @@ func IOCounters() (map[string]IOCountersStat, error) {
if err != nil { if err != nil {
return ret, err return ret, err
} }
iopsInProgress, err := strconv.ParseUint((fields[11]), 10, 64)
if err != nil {
return ret, err
}
iotime, err := strconv.ParseUint((fields[12]), 10, 64) iotime, err := strconv.ParseUint((fields[12]), 10, 64)
if err != nil { if err != nil {
return ret, err return ret, err
} }
d := IOCountersStat{ d := IOCountersStat{
ReadBytes: rbytes * SectorSize, ReadBytes: rbytes * SectorSize,
WriteBytes: wbytes * SectorSize, WriteBytes: wbytes * SectorSize,
ReadCount: reads, ReadCount: reads,
WriteCount: writes, WriteCount: writes,
ReadTime: rtime, MergedReadCount: mergedReads,
WriteTime: wtime, MergedWriteCount: mergedWrites,
IoTime: iotime, ReadTime: rtime,
WriteTime: wtime,
IopsInProgress: iopsInProgress,
IoTime: iotime,
} }
if d == empty { if d == empty {
continue continue

@ -93,7 +93,7 @@ func TestDiskIOCountersStat_String(t *testing.T) {
WriteBytes: 400, WriteBytes: 400,
SerialNumber: "SERIAL", SerialNumber: "SERIAL",
} }
e := `{"readCount":100,"writeCount":200,"readBytes":300,"writeBytes":400,"readTime":0,"writeTime":0,"name":"sd01","ioTime":0,"serialNumber":"SERIAL"}` e := `{"readCount":100,"mergedReadCount":0,"writeCount":200,"mergedWriteCount":0,"readBytes":300,"writeBytes":400,"readTime":0,"writeTime":0,"iopsInProgress":0,"ioTime":0,"name":"sd01","serialNumber":"SERIAL"}`
if e != fmt.Sprintf("%v", v) { if e != fmt.Sprintf("%v", v) {
t.Errorf("DiskUsageStat string is invalid: %v", v) t.Errorf("DiskUsageStat string is invalid: %v", v)
} }

Loading…
Cancel
Save