diff --git a/README.md b/README.md index ca139170..de998e12 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,6 @@ tcpstat | Exposes TCP connection status information from `/proc/net/tcp` and `/p Name | Description | OS ---------|-------------|---- gmond | Exposes statistics from Ganglia. | _any_ -megacli | Exposes RAID statistics from MegaCLI. | Linux ### Textfile Collector diff --git a/collector/fixtures/e2e-output.txt b/collector/fixtures/e2e-output.txt index 599b53c0..1ca55086 100644 --- a/collector/fixtures/e2e-output.txt +++ b/collector/fixtures/e2e-output.txt @@ -1111,25 +1111,6 @@ node_md_is_active{device="md6"} 1 node_md_is_active{device="md7"} 1 node_md_is_active{device="md8"} 1 node_md_is_active{device="md9"} 1 -# HELP node_megacli_drive_count megacli: drive error and event counters -# TYPE node_megacli_drive_count gauge -node_megacli_drive_count{enclosure="32",slot="0",type="Media Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="0",type="Other Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="0",type="Predictive Failure Count"} 0 -node_megacli_drive_count{enclosure="32",slot="1",type="Media Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="1",type="Other Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="1",type="Predictive Failure Count"} 0 -node_megacli_drive_count{enclosure="32",slot="2",type="Media Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="2",type="Other Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="2",type="Predictive Failure Count"} 0 -node_megacli_drive_count{enclosure="32",slot="3",type="Media Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="3",type="Other Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="3",type="Predictive Failure Count"} 23 -# HELP node_megacli_drive_temperature_celsius megacli: drive temperature -# TYPE node_megacli_drive_temperature_celsius gauge -node_megacli_drive_temperature_celsius{enclosure="32",slot="0"} 37 -node_megacli_drive_temperature_celsius{enclosure="32",slot="2"} 39 -node_megacli_drive_temperature_celsius{enclosure="32",slot="3"} 38 # HELP node_memory_Active_anon_bytes Memory information field Active_anon_bytes. # TYPE node_memory_Active_anon_bytes gauge node_memory_Active_anon_bytes 2.068484096e+09 @@ -2643,7 +2624,6 @@ node_scrape_collector_success{collector="ipvs"} 1 node_scrape_collector_success{collector="ksmd"} 1 node_scrape_collector_success{collector="loadavg"} 1 node_scrape_collector_success{collector="mdadm"} 1 -node_scrape_collector_success{collector="megacli"} 1 node_scrape_collector_success{collector="meminfo"} 1 node_scrape_collector_success{collector="meminfo_numa"} 1 node_scrape_collector_success{collector="mountstats"} 1 diff --git a/collector/fixtures/e2e-ppc64le-output.txt b/collector/fixtures/e2e-ppc64le-output.txt index f1df736c..7e1a5c92 100644 --- a/collector/fixtures/e2e-ppc64le-output.txt +++ b/collector/fixtures/e2e-ppc64le-output.txt @@ -1141,25 +1141,6 @@ node_md_is_active{device="md6"} 1 node_md_is_active{device="md7"} 1 node_md_is_active{device="md8"} 1 node_md_is_active{device="md9"} 1 -# HELP node_megacli_drive_count megacli: drive error and event counters -# TYPE node_megacli_drive_count gauge -node_megacli_drive_count{enclosure="32",slot="0",type="Media Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="0",type="Other Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="0",type="Predictive Failure Count"} 0 -node_megacli_drive_count{enclosure="32",slot="1",type="Media Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="1",type="Other Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="1",type="Predictive Failure Count"} 0 -node_megacli_drive_count{enclosure="32",slot="2",type="Media Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="2",type="Other Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="2",type="Predictive Failure Count"} 0 -node_megacli_drive_count{enclosure="32",slot="3",type="Media Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="3",type="Other Error Count"} 0 -node_megacli_drive_count{enclosure="32",slot="3",type="Predictive Failure Count"} 23 -# HELP node_megacli_drive_temperature_celsius megacli: drive temperature -# TYPE node_megacli_drive_temperature_celsius gauge -node_megacli_drive_temperature_celsius{enclosure="32",slot="0"} 37 -node_megacli_drive_temperature_celsius{enclosure="32",slot="2"} 39 -node_megacli_drive_temperature_celsius{enclosure="32",slot="3"} 38 # HELP node_memory_Active Memory information field Active. # TYPE node_memory_Active gauge node_memory_Active 2.287017984e+09 @@ -2673,7 +2654,6 @@ node_scrape_collector_success{collector="ipvs"} 1 node_scrape_collector_success{collector="ksmd"} 1 node_scrape_collector_success{collector="loadavg"} 1 node_scrape_collector_success{collector="mdadm"} 1 -node_scrape_collector_success{collector="megacli"} 1 node_scrape_collector_success{collector="meminfo"} 1 node_scrape_collector_success{collector="meminfo_numa"} 1 node_scrape_collector_success{collector="mountstats"} 1 diff --git a/collector/fixtures/megacli b/collector/fixtures/megacli deleted file mode 100755 index e912e36c..00000000 --- a/collector/fixtures/megacli +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -cat "$(dirname "$0")/megacli_disks.txt" diff --git a/collector/fixtures/megacli_adapter.txt b/collector/fixtures/megacli_adapter.txt deleted file mode 100644 index 97c55766..00000000 --- a/collector/fixtures/megacli_adapter.txt +++ /dev/null @@ -1,280 +0,0 @@ -Adapter #0 - -============================================================================== - Versions - ================ -Product Name : PERC 6/i Integrated -Serial No : 1234567890123456 -FW Package Build: 6.3.3.0002 - - Mfg. Data - ================ -Mfg. Date : 06/24/08 -Rework Date : 06/24/08 -Revision No : -Battery FRU : N/A - - Image Versions in Flash: - ================ -FW Version : 1.22.52-1909 -BIOS Version : 2.04.00 -WebBIOS Version : 1.1-46-e_15-Rel -Ctrl-R Version : 1.02-015B -Preboot CLI Version: 01.00-022:#%00005 -Boot Block Version : 1.00.00.01-0011 - - Pending Images in Flash - ================ -None - - PCI Info - ================ -Controller Id : 0000 -Vendor Id : 1000 -Device Id : 0060 -SubVendorId : 1028 -SubDeviceId : 1f0c - -Host Interface : PCIE - -Link Speed : 0 -Number of Frontend Port: 0 -Device Interface : PCIE - -Number of Backend Port: 8 -Port : Address -0 5000c50028f2083d -1 5000c50023cb3f39 -2 5000c50023cea805 -3 5000c50029124491 -4 0000000000000000 -5 0000000000000000 -6 0000000000000000 -7 0000000000000000 - - HW Configuration - ================ -SAS Address : 5a4badb01e219100 -BBU : Present -Alarm : Absent -NVRAM : Present -Serial Debugger : Present -Memory : Present -Flash : Present -Memory Size : 256MB -TPM : Absent -On board Expander: Absent -Upgrade Key : Absent -Temperature sensor for ROC : Absent -Temperature sensor for controller : Absent - - - Settings - ================ -Current Time : 14:55:23 7/4, 2014 -Predictive Fail Poll Interval : 300sec -Interrupt Throttle Active Count : 16 -Interrupt Throttle Completion : 50us -Rebuild Rate : 30% -PR Rate : 30% -BGI Rate : 30% -Check Consistency Rate : 30% -Reconstruction Rate : 30% -Cache Flush Interval : 4s -Max Drives to Spinup at One Time : 2 -Delay Among Spinup Groups : 12s -Physical Drive Coercion Mode : 128MB -Cluster Mode : Disabled -Alarm : Disabled -Auto Rebuild : Enabled -Battery Warning : Enabled -Ecc Bucket Size : 15 -Ecc Bucket Leak Rate : 1440 Minutes -Restore HotSpare on Insertion : Disabled -Expose Enclosure Devices : Disabled -Maintain PD Fail History : Disabled -Host Request Reordering : Enabled -Auto Detect BackPlane Enabled : SGPIO/i2c SEP -Load Balance Mode : Auto -Use FDE Only : No -Security Key Assigned : No -Security Key Failed : No -Security Key Not Backedup : No -Default LD PowerSave Policy : Controller Defined -Maximum number of direct attached drives to spin up in 1 min : 0 -Auto Enhanced Import : No -Any Offline VD Cache Preserved : No -Allow Boot with Preserved Cache : No -Disable Online Controller Reset : No -PFK in NVRAM : No -Use disk activity for locate : No -POST delay : 90 seconds -BIOS Error Handling : Stop On Errors -Current Boot Mode :Normal - Capabilities - ================ -RAID Level Supported : RAID0, RAID1, RAID5, RAID6, RAID00, RAID10, RAID50, RAID60, PRL 11, PRL 11 with spanning, SRL 3 supported, PRL11-RLQ0 DDF layout with no span, PRL11-RLQ0 DDF layout with span -Supported Drives : SAS, SATA - -Allowed Mixing: - -Mix in Enclosure Allowed - - Status - ================ -ECC Bucket Count : 0 - - Limitations - ================ -Max Arms Per VD : 32 -Max Spans Per VD : 8 -Max Arrays : 128 -Max Number of VDs : 64 -Max Parallel Commands : 1008 -Max SGE Count : 80 -Max Data Transfer Size : 8192 sectors -Max Strips PerIO : 42 -Max LD per array : 16 -Min Strip Size : 8 KB -Max Strip Size : 1.0 MB -Max Configurable CacheCade Size: 0 GB -Current Size of CacheCade : 0 GB -Current Size of FW Cache : 0 MB - - Device Present - ================ -Virtual Drives : 1 - Degraded : 0 - Offline : 0 -Physical Devices : 5 - Disks : 4 - Critical Disks : 0 - Failed Disks : 0 - - Supported Adapter Operations - ================ -Rebuild Rate : Yes -CC Rate : Yes -BGI Rate : Yes -Reconstruct Rate : Yes -Patrol Read Rate : Yes -Alarm Control : Yes -Cluster Support : No -BBU : Yes -Spanning : Yes -Dedicated Hot Spare : Yes -Revertible Hot Spares : Yes -Foreign Config Import : Yes -Self Diagnostic : Yes -Allow Mixed Redundancy on Array : No -Global Hot Spares : Yes -Deny SCSI Passthrough : No -Deny SMP Passthrough : No -Deny STP Passthrough : No -Support Security : No -Snapshot Enabled : No -Support the OCE without adding drives : No -Support PFK : No -Support PI : No -Support Boot Time PFK Change : No -Disable Online PFK Change : No -Support Shield State : No -Block SSD Write Disk Cache Change: No - - Supported VD Operations - ================ -Read Policy : Yes -Write Policy : Yes -IO Policy : Yes -Access Policy : Yes -Disk Cache Policy : Yes -Reconstruction : Yes -Deny Locate : No -Deny CC : No -Allow Ctrl Encryption: No -Enable LDBBM : No -Support Breakmirror : No -Power Savings : No - - Supported PD Operations - ================ -Force Online : Yes -Force Offline : Yes -Force Rebuild : Yes -Deny Force Failed : No -Deny Force Good/Bad : No -Deny Missing Replace : No -Deny Clear : No -Deny Locate : No -Support Temperature : No -NCQ : No -Disable Copyback : No -Enable JBOD : No -Enable Copyback on SMART : No -Enable Copyback to SSD on SMART Error : No -Enable SSD Patrol Read : No -PR Correct Unconfigured Areas : Yes - Error Counters - ================ -Memory Correctable Errors : 0 -Memory Uncorrectable Errors : 0 - - Cluster Information - ================ -Cluster Permitted : No -Cluster Active : No - - Default Settings - ================ -Phy Polarity : 0 -Phy PolaritySplit : 0 -Background Rate : 30 -Strip Size : 64kB -Flush Time : 4 seconds -Write Policy : WB -Read Policy : None -Cache When BBU Bad : Disabled -Cached IO : No -SMART Mode : Mode 6 -Alarm Disable : No -Coercion Mode : 128MB -ZCR Config : Unknown -Dirty LED Shows Drive Activity : No -BIOS Continue on Error : 0 -Spin Down Mode : None -Allowed Device Type : SAS/SATA Mix -Allow Mix in Enclosure : Yes -Allow HDD SAS/SATA Mix in VD : No -Allow SSD SAS/SATA Mix in VD : No -Allow HDD/SSD Mix in VD : No -Allow SATA in Cluster : No -Max Chained Enclosures : 1 -Disable Ctrl-R : No -Enable Web BIOS : No -Direct PD Mapping : Yes -BIOS Enumerate VDs : Yes -Restore Hot Spare on Insertion : No -Expose Enclosure Devices : No -Maintain PD Fail History : No -Disable Puncturing : No -Zero Based Enclosure Enumeration : Yes -PreBoot CLI Enabled : No -LED Show Drive Activity : No -Cluster Disable : Yes -SAS Disable : No -Auto Detect BackPlane Enable : SGPIO/i2c SEP -Use FDE Only : No -Enable Led Header : No -Delay during POST : 0 -EnableCrashDump : No -Disable Online Controller Reset : No -EnableLDBBM : No -Un-Certified Hard Disk Drives : Block -Treat Single span R1E as R10 : No -Max LD per array : 16 -Power Saving option : All power saving options are enabled -Default spin down time in minutes: 0 -Enable JBOD : No -Time taken to detect CME : 60s - -Exit Code: 0x00 diff --git a/collector/fixtures/megacli_disks.txt b/collector/fixtures/megacli_disks.txt deleted file mode 100644 index e6565274..00000000 --- a/collector/fixtures/megacli_disks.txt +++ /dev/null @@ -1,197 +0,0 @@ - -Adapter #0 - -Enclosure Device ID: 32 -Slot Number: 0 -Drive's position: DiskGroup: 0, Span: 0, Arm: 0 -Enclosure position: N/A -Device Id: 0 -WWN: -Sequence Number: 2 -Media Error Count: 0 -Other Error Count: 0 -Predictive Failure Count: 0 -Last Predictive Failure Event Seq Number: 0 -PD Type: SAS - -Raw Size: 419.186 GB [0x3465f870 Sectors] -Non Coerced Size: 418.686 GB [0x3455f870 Sectors] -Coerced Size: 418.625 GB [0x34540000 Sectors] -Sector Size: 0 -Firmware state: Online, Spun Up -Device Firmware Level: ES64 -Shield Counter: 0 -Successful diagnostics completion on : N/A -SAS Address(0): 0x5000c50028f2083d -SAS Address(1): 0x0 -Connected Port Number: 0(path0) -Inquiry Data: SEAGATE ST3450857SS ES643SK26856 -FDE Capable: Not Capable -FDE Enable: Disable -Secured: Unsecured -Locked: Unlocked -Needs EKM Attention: No -Foreign State: None -Device Speed: Unknown -Link Speed: Unknown -Media Type: Hard Disk Device -Drive Temperature :37C (98.60 F) -PI Eligibility: No -Drive is formatted for PI information: No -PI: No PI -Port-0 : -Port status: Active -Port's Linkspeed: Unknown -Port-1 : -Port status: Active -Port's Linkspeed: Unknown -Drive has flagged a S.M.A.R.T alert : No - - - -Enclosure Device ID: 32 -Slot Number: 1 -Drive's position: DiskGroup: 0, Span: 0, Arm: 1 -Enclosure position: N/A -Device Id: 1 -WWN: -Sequence Number: 2 -Media Error Count: 0 -Other Error Count: 0 -Predictive Failure Count: 0 -Last Predictive Failure Event Seq Number: 0 -PD Type: SAS - -Raw Size: 419.186 GB [0x3465f870 Sectors] -Non Coerced Size: 418.686 GB [0x3455f870 Sectors] -Coerced Size: 418.625 GB [0x34540000 Sectors] -Sector Size: 0 -Firmware state: Online, Spun Up -Device Firmware Level: ES62 -Shield Counter: 0 -Successful diagnostics completion on : N/A -SAS Address(0): 0x5000c50023cb3f39 -SAS Address(1): 0x0 -Connected Port Number: 1(path0) -Inquiry Data: SEAGATE ST3450857SS ES623SK16HLC -FDE Capable: Not Capable -FDE Enable: Disable -Secured: Unsecured -Locked: Unlocked -Needs EKM Attention: No -Foreign State: None -Device Speed: Unknown -Link Speed: Unknown -Media Type: Hard Disk Device -Drive Temperature : N/A -PI Eligibility: No -Drive is formatted for PI information: No -PI: No PI -Port-0 : -Port status: Active -Port's Linkspeed: Unknown -Port-1 : -Port status: Active -Port's Linkspeed: Unknown -Drive has flagged a S.M.A.R.T alert : No - - - -Enclosure Device ID: 32 -Slot Number: 2 -Drive's position: DiskGroup: 0, Span: 1, Arm: 0 -Enclosure position: N/A -Device Id: 2 -WWN: -Sequence Number: 2 -Media Error Count: 0 -Other Error Count: 0 -Predictive Failure Count: 0 -Last Predictive Failure Event Seq Number: 0 -PD Type: SAS - -Raw Size: 419.186 GB [0x3465f870 Sectors] -Non Coerced Size: 418.686 GB [0x3455f870 Sectors] -Coerced Size: 418.625 GB [0x34540000 Sectors] -Sector Size: 0 -Firmware state: Online, Spun Up -Device Firmware Level: ES62 -Shield Counter: 0 -Successful diagnostics completion on : N/A -SAS Address(0): 0x5000c50023cea805 -SAS Address(1): 0x0 -Connected Port Number: 2(path0) -Inquiry Data: SEAGATE ST3450857SS ES623SK189BR -FDE Capable: Not Capable -FDE Enable: Disable -Secured: Unsecured -Locked: Unlocked -Needs EKM Attention: No -Foreign State: None -Device Speed: Unknown -Link Speed: Unknown -Media Type: Hard Disk Device -Drive Temperature :39C (102.20 F) -PI Eligibility: No -Drive is formatted for PI information: No -PI: No PI -Port-0 : -Port status: Active -Port's Linkspeed: Unknown -Port-1 : -Port status: Active -Port's Linkspeed: Unknown -Drive has flagged a S.M.A.R.T alert : No - - - -Enclosure Device ID: 32 -Slot Number: 3 -Drive's position: DiskGroup: 0, Span: 1, Arm: 1 -Enclosure position: N/A -Device Id: 3 -WWN: -Sequence Number: 2 -Media Error Count: 0 -Other Error Count: 0 -Predictive Failure Count: 23 -Last Predictive Failure Event Seq Number: 0 -PD Type: SAS - -Raw Size: 419.186 GB [0x3465f870 Sectors] -Non Coerced Size: 418.686 GB [0x3455f870 Sectors] -Coerced Size: 418.625 GB [0x34540000 Sectors] -Sector Size: 0 -Firmware state: Online, Spun Up -Device Firmware Level: ES64 -Shield Counter: 0 -Successful diagnostics completion on : N/A -SAS Address(0): 0x5000c50029124491 -SAS Address(1): 0x0 -Connected Port Number: 3(path0) -Inquiry Data: SEAGATE ST3450857SS ES643SK27GQ9 -FDE Capable: Not Capable -FDE Enable: Disable -Secured: Unsecured -Locked: Unlocked -Needs EKM Attention: No -Foreign State: None -Device Speed: Unknown -Link Speed: Unknown -Media Type: Hard Disk Device -Drive Temperature :38C (100.40 F) -PI Eligibility: No -Drive is formatted for PI information: No -PI: No PI -Port-0 : -Port status: Active -Port's Linkspeed: Unknown -Port-1 : -Port status: Active -Port's Linkspeed: Unknown -Drive has flagged a S.M.A.R.T alert : No - - - - -Exit Code: 0x00 diff --git a/collector/megacli.go b/collector/megacli.go deleted file mode 100644 index e24f1b49..00000000 --- a/collector/megacli.go +++ /dev/null @@ -1,238 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build !nomegacli - -package collector - -import ( - "bufio" - "io" - "os/exec" - "strconv" - "strings" - - "github.com/prometheus/client_golang/prometheus" - "gopkg.in/alecthomas/kingpin.v2" -) - -const ( - defaultMegaCli = "megacli" - adapterHeaderSep = "================" -) - -var ( - megacliCommand = kingpin.Flag("collector.megacli.command", "Command to run megacli.").Default(defaultMegaCli).String() -) - -type megaCliCollector struct { - cli string - - driveTemperature *prometheus.GaugeVec - driveCounters *prometheus.GaugeVec - drivePresence *prometheus.GaugeVec -} - -func init() { - registerCollector("megacli", defaultDisabled, NewMegaCliCollector) -} - -// NewMegaCliCollector returns a new Collector exposing RAID status through -// megacli. -func NewMegaCliCollector() (Collector, error) { - warnDeprecated("megacli") - return &megaCliCollector{ - cli: *megacliCommand, - driveTemperature: prometheus.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: namespace, - Name: "megacli_drive_temperature_celsius", - Help: "megacli: drive temperature", - }, []string{"enclosure", "slot"}), - driveCounters: prometheus.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: namespace, - Name: "megacli_drive_count", - Help: "megacli: drive error and event counters", - }, []string{"enclosure", "slot", "type"}), - drivePresence: prometheus.NewGaugeVec(prometheus.GaugeOpts{ - Namespace: namespace, - Name: "megacli_adapter_disk_presence", - Help: "megacli: disk presence per adapter", - }, []string{"type"}), - }, nil -} - -func (c *megaCliCollector) Update(ch chan<- prometheus.Metric) error { - if err := c.updateAdapter(); err != nil { - return err - } - if err := c.updateDisks(); err != nil { - return err - } - c.driveTemperature.Collect(ch) - c.driveCounters.Collect(ch) - c.drivePresence.Collect(ch) - return nil -} - -func parseMegaCliDisks(r io.Reader) (map[int]map[int]map[string]string, error) { - var ( - stats = map[int]map[int]map[string]string{} - scanner = bufio.NewScanner(r) - curEnc = -1 - curSlot = -1 - ) - - for scanner.Scan() { - var err error - text := strings.TrimSpace(scanner.Text()) - parts := strings.SplitN(text, ":", 2) - if len(parts) != 2 { // Adapter #X - continue - } - key := strings.TrimSpace(parts[0]) - value := strings.TrimSpace(parts[1]) - switch { - case key == "Enclosure Device ID": - curEnc, err = strconv.Atoi(value) - if err != nil { - return nil, err - } - case key == "Slot Number": - curSlot, err = strconv.Atoi(value) - if err != nil { - return nil, err - } - case curSlot != -1 && curEnc != -1: - if _, ok := stats[curEnc]; !ok { - stats[curEnc] = map[int]map[string]string{} - } - if _, ok := stats[curEnc][curSlot]; !ok { - stats[curEnc][curSlot] = map[string]string{} - } - stats[curEnc][curSlot][key] = value - } - } - - return stats, scanner.Err() -} - -func parseMegaCliAdapter(r io.Reader) (map[string]map[string]string, error) { - var ( - raidStats = map[string]map[string]string{} - scanner = bufio.NewScanner(r) - header = "" - last = "" - ) - - for scanner.Scan() { - text := strings.TrimSpace(scanner.Text()) - if text == adapterHeaderSep { - header = last - raidStats[header] = map[string]string{} - continue - } - last = text - if header == "" { // skip Adapter #X and separator - continue - } - parts := strings.SplitN(text, ":", 2) - if len(parts) != 2 { // these section never include anything we are interested in - continue - } - key := strings.TrimSpace(parts[0]) - value := strings.TrimSpace(parts[1]) - - raidStats[header][key] = value - - } - - return raidStats, scanner.Err() -} - -func (c *megaCliCollector) updateAdapter() error { - cmd := exec.Command(c.cli, "-AdpAllInfo", "-aALL") - pipe, err := cmd.StdoutPipe() - if err != nil { - return err - } - - if err := cmd.Start(); err != nil { - return err - } - - stats, err := parseMegaCliAdapter(pipe) - if err != nil { - return err - } - if err := cmd.Wait(); err != nil { - return err - } - - for k, v := range stats["Device Present"] { - value, err := strconv.ParseFloat(v, 64) - if err != nil { - return err - } - c.drivePresence.WithLabelValues(k).Set(value) - } - return nil -} - -func (c *megaCliCollector) updateDisks() error { - var counters = []string{"Media Error Count", "Other Error Count", "Predictive Failure Count"} - - cmd := exec.Command(c.cli, "-PDList", "-aALL") - pipe, err := cmd.StdoutPipe() - if err != nil { - return err - } - - if err := cmd.Start(); err != nil { - return err - } - - stats, err := parseMegaCliDisks(pipe) - if err != nil { - return err - } - if err := cmd.Wait(); err != nil { - return err - } - - for enc, encStats := range stats { - for slot, slotStats := range encStats { - encStr := strconv.Itoa(enc) - slotStr := strconv.Itoa(slot) - - tStr := slotStats["Drive Temperature"] - if strings.Index(tStr, "C") > 0 { - tStr = tStr[:strings.Index(tStr, "C")] - t, err := strconv.ParseFloat(tStr, 64) - if err != nil { - return err - } - c.driveTemperature.WithLabelValues(encStr, slotStr).Set(t) - } - - for _, i := range counters { - counter, err := strconv.ParseFloat(slotStats[i], 64) - if err != nil { - return err - } - - c.driveCounters.WithLabelValues(encStr, slotStr, i).Set(counter) - } - } - } - return nil -} diff --git a/collector/megacli_test.go b/collector/megacli_test.go deleted file mode 100644 index adb65353..00000000 --- a/collector/megacli_test.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2015 The Prometheus Authors -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// +build !nomegacli - -package collector - -import ( - "os" - "testing" - - "github.com/prometheus/client_golang/prometheus" - "gopkg.in/alecthomas/kingpin.v2" -) - -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: %s != %s", stats["Device Present"]["Physical Devices"], physicalDevicesExpected) - } - - if stats["Device Present"]["Degraded"] != virtualDevicesDegraded { - t.Fatalf("Unexpected degraded device count: %s != %s", stats["Device Present"]["Degraded"], virtualDevicesDegraded) - } -} - -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][1]["Drive Temperature"] != "N/A" { - t.Fatalf("Unexpected drive temperature: %s", stats[32][2]["Drive Temperature"]) - } - - if stats[32][3]["Predictive Failure Count"] != "23" { - t.Fatalf("Unexpected predictive failure count: %s", stats[32][3]["Predictive Failure Count"]) - } -} - -func TestMegaCliCollectorDoesntCrash(t *testing.T) { - if _, err := kingpin.CommandLine.Parse([]string{"--collector.megacli.command", "./fixtures/megacli"}); err != nil { - t.Fatal(err) - } - collector, err := NewMegaCliCollector() - if err != nil { - t.Fatal(err) - } - sink := make(chan prometheus.Metric) - go func() { - for { - <-sink - } - }() - - err = collector.Update(sink) - if err != nil { - t.Fatal(err) - } -} diff --git a/end-to-end-test.sh b/end-to-end-test.sh index 545703fc..da84a91a 100755 --- a/end-to-end-test.sh +++ b/end-to-end-test.sh @@ -31,7 +31,6 @@ enabled_collectors=$(cat << COLLECTORS stat textfile bonding - megacli wifi xfs zfs @@ -95,7 +94,6 @@ fi $(for c in ${enabled_collectors}; do echo --collector.${c} ; done) \ $(for c in ${disabled_collectors}; do echo --no-collector.${c} ; done) \ --collector.textfile.directory="collector/fixtures/textfile/two_metric_files/" \ - --collector.megacli.command="collector/fixtures/megacli" \ --collector.wifi.fixtures="collector/fixtures/wifi" \ --collector.qdisc.fixtures="collector/fixtures/qdisc/" \ --web.listen-address "127.0.0.1:${port}" \