Fix mdadm collector issues (#985)
* Send "Personality unknown" to debug, not info, remove unnecessary newline. * Add support for "linear" personality. * Always set number of active disks to 0 when a device is inactive. * Add total disks calculation to unknown personalites. Signed-off-by: Ben Kochie <superq@gmail.com>
This commit is contained in:
parent
55c32fcf02
commit
107e5dfecc
5 changed files with 29 additions and 10 deletions
|
|
@ -29,10 +29,10 @@ import (
|
|||
|
||||
var (
|
||||
statuslineRE = regexp.MustCompile(`(\d+) blocks .*\[(\d+)/(\d+)\] \[[U_]+\]`)
|
||||
raid0lineRE = regexp.MustCompile(`(\d+) blocks .*\d+k chunks`)
|
||||
raid0lineRE = regexp.MustCompile(`(\d+) blocks .*\d+k (chunks|rounding)`)
|
||||
buildlineRE = regexp.MustCompile(`\((\d+)/\d+\)`)
|
||||
unknownPersonalityLineRE = regexp.MustCompile(`(\d+) blocks (.*)`)
|
||||
raidPersonalityRE = regexp.MustCompile(`raid[0-9]+`)
|
||||
raidPersonalityRE = regexp.MustCompile(`^(linear|raid[0-9]+)$`)
|
||||
)
|
||||
|
||||
type mdStatus struct {
|
||||
|
|
@ -175,20 +175,25 @@ func parseMdstat(mdStatusFilePath string) ([]mdStatus, error) {
|
|||
}
|
||||
}
|
||||
switch {
|
||||
case personality == "raid0":
|
||||
case personality == "raid0" || personality == "linear":
|
||||
md.disksActive = int64(len(mainLine) - 4) // Get the number of devices from the main line.
|
||||
md.disksTotal = md.disksActive // Raid0 active and total is always the same if active.
|
||||
md.blocksTotal, err = evalRaid0line(lines[i+1])
|
||||
case raidPersonalityRE.MatchString(personality):
|
||||
md.disksActive, md.disksTotal, md.blocksTotal, err = evalStatusline(lines[i+1])
|
||||
default:
|
||||
log.Infof("Personality unknown: %s\n", mainLine)
|
||||
log.Debugf("Personality unknown: %s", mainLine)
|
||||
md.disksTotal = int64(len(mainLine) - 3)
|
||||
md.blocksTotal, err = evalUnknownPersonalitylineRE(lines[i+1])
|
||||
}
|
||||
if err != nil {
|
||||
return mdStates, fmt.Errorf("error parsing mdstat: %s", err)
|
||||
}
|
||||
|
||||
if !md.active {
|
||||
md.disksActive = 0
|
||||
}
|
||||
|
||||
syncLine := lines[i+2]
|
||||
if strings.Contains(syncLine, "bitmap") {
|
||||
syncLine = lines[i+3]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue