Skip to content

Commit

Permalink
Add context to errors. Remove unnecessary code
Browse files Browse the repository at this point in the history
  • Loading branch information
calerogers committed Apr 5, 2017
1 parent 348ff7b commit d04978c
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 27 deletions.
39 changes: 14 additions & 25 deletions plugins/inputs/irqstat/irqstat.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,7 @@ import (
"strings"
)

type Irqstat struct {
Include []string
}
type Irqstat struct{}

type IRQ struct {
ID string
Expand All @@ -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 {
Expand All @@ -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))
Expand Down Expand Up @@ -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
}
Expand All @@ -78,33 +76,24 @@ 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 {
files := []string{"/proc/interrupts", "/proc/softirqs"}
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}
Expand Down
3 changes: 1 addition & 2 deletions plugins/inputs/irqstat/irqstat_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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))
Expand Down

0 comments on commit d04978c

Please sign in to comment.