diff --git a/plugins/inputs/irqstat/irqstat.go b/plugins/inputs/irqstat/irqstat.go index 1d1f0f6e55941..9f3f27f8fe279 100644 --- a/plugins/inputs/irqstat/irqstat.go +++ b/plugins/inputs/irqstat/irqstat.go @@ -10,9 +10,7 @@ import ( "strings" ) -type Irqstat struct { - Include []string -} +type Irqstat struct{} type IRQ struct { ID string @@ -26,9 +24,10 @@ func NewIRQ(id string) *IRQ { } const sampleConfig = ` - ## A list of IRQs to include for metric ingestion, if not specified - ## will default to collecting all IRQs. - # include = ["0", "1", "30", "NET_RX"] + ## To filter which IRQs to collect + ## make use of tagpass / tagdrop, i.e. + # [inputs.irqstat.tagdrop] + # irq = [ "NET_RX", "TASKLET" ] ` func (s *Irqstat) Description() string { @@ -39,8 +38,7 @@ func (s *Irqstat) SampleConfig() string { return sampleConfig } -func parseInterrupts(irqdata string, include []string) ([]IRQ, error) { - var err error +func parseInterrupts(irqdata string) ([]IRQ, error) { var irqs []IRQ var cpucount int scanner := bufio.NewScanner(strings.NewReader(irqdata)) @@ -69,7 +67,7 @@ func parseInterrupts(irqdata string, include []string) ([]IRQ, error) { if i < len(fields) { irqval, err = strconv.ParseInt(fields[i], 10, 64) if err != nil { - return irqs, err + return irqs, fmt.Errorf("Unable to parse %q from %q: %s", fields[i], scanner.Text(), err) } irq.Values[cpu] = irqval } @@ -78,20 +76,9 @@ func parseInterrupts(irqdata string, include []string) ([]IRQ, error) { irq.Type = irqtype irq.Device = irqdevice irq.Values["total"] = irqtotal - if len(include) == 0 || stringInSlice(irq.ID, include) { - irqs = append(irqs, *irq) - } - } - return irqs, err -} - -func stringInSlice(x string, list []string) bool { - for _, y := range list { - if y == x { - return true - } + irqs = append(irqs, *irq) } - return false + return irqs, nil } func (s *Irqstat) Gather(acc telegraf.Accumulator) error { @@ -99,12 +86,14 @@ func (s *Irqstat) Gather(acc telegraf.Accumulator) error { for _, file := range files { data, err := ioutil.ReadFile(file) if err != nil { - acc.AddError(err) + acc.AddError(fmt.Errorf("Reading %s: %s", file, err)) + continue } irqdata := string(data) - irqs, err := parseInterrupts(irqdata, s.Include) + irqs, err := parseInterrupts(irqdata) if err != nil { - acc.AddError(err) + acc.AddError(fmt.Errorf("Parsing %s: %s", file, err)) + continue } for _, irq := range irqs { tags := map[string]string{"irq": irq.ID, "type": irq.Type, "device": irq.Device} diff --git a/plugins/inputs/irqstat/irqstat_test.go b/plugins/inputs/irqstat/irqstat_test.go index c979a43255502..b5ef61752178d 100644 --- a/plugins/inputs/irqstat/irqstat_test.go +++ b/plugins/inputs/irqstat/irqstat_test.go @@ -7,7 +7,6 @@ import ( ) func TestParseInterrupts(t *testing.T) { - include := []string{} interruptStr := ` CPU0 CPU1 0: 134 0 IO-APIC-edge timer 1: 7 3 IO-APIC-edge i8042 @@ -26,7 +25,7 @@ TASKLET: 205 0` IRQ{ID: "NET_RX", Values: map[string]interface{}{"CPU0": int64(867028), "CPU1": int64(225), "total": int64(867253)}}, IRQ{ID: "TASKLET", Values: map[string]interface{}{"CPU0": int64(205), "CPU1": int64(0), "total": int64(205)}}, } - got, err := parseInterrupts(interruptStr, include) + got, err := parseInterrupts(interruptStr) require.Equal(t, nil, err) require.NotEqual(t, 0, len(got)) require.Equal(t, len(got), len(parsed))