Add MegaCLI collector

This collector exports the following metrics:

- raid_drive_temperature: drive temperature
- raid_drive_count: drive error and event counters
- raid_adapter_disk_presence: disk presence per adapter
This commit is contained in:
Johannes 'fish' Ziemke 2014-07-08 16:24:29 +02:00
commit f47abc5d06
6 changed files with 770 additions and 2 deletions

54
collector/megacli_test.go Normal file
View file

@ -0,0 +1,54 @@
// +build megacli
package collector
import (
"os"
"testing"
)
const (
testMegaCliAdapter = "fixtures/megacli_adapter.txt"
testMegaCliDisks = "fixtures/megacli_disks.txt"
physicalDevicesExpected = "5"
virtualDevicesDegraded = "0"
)
func TestMegaCliAdapter(t *testing.T) {
data, err := os.Open(testMegaCliAdapter)
if err != nil {
t.Fatal(err)
}
stats, err := parseMegaCliAdapter(data)
if err != nil {
t.Fatal(err)
}
if stats["Device Present"]["Physical Devices"] != physicalDevicesExpected {
t.Fatalf("Unexpected device count: %d != %d", stats["Device Present"]["Physical Devices"], physicalDevicesExpected)
}
if stats["Device Present"]["Degraded"] != virtualDevicesDegraded {
t.Fatal()
}
}
func TestMegaCliDisks(t *testing.T) {
data, err := os.Open(testMegaCliDisks)
if err != nil {
t.Fatal(err)
}
stats, err := parseMegaCliDisks(data)
if err != nil {
t.Fatal(err)
}
if stats[32][0]["Drive Temperature"] != "37C (98.60 F)" {
t.Fatalf("Unexpected drive temperature: %s", stats[32][0]["Drive Temperature"])
}
if stats[32][3]["Predictive Failure Count"] != "23" {
t.Fatal()
}
}