diff --git a/result/overall.go b/result/overall.go index 6992de6..8aaf300 100644 --- a/result/overall.go +++ b/result/overall.go @@ -112,25 +112,7 @@ func (o *Overall) GetStatus() check.Status { return check.Unknown } - var ( - criticals int - warnings int - oks int - unknowns int - ) - - for _, sc := range o.PartialResults { - switch sc.GetStatus() { - case check.Critical: - criticals++ - case check.Warning: - warnings++ - case check.Unknown: - unknowns++ - case check.OK: - oks++ - } - } + oks, warnings, criticals, unknowns := o.countPartialStates() if criticals > 0 { return check.Critical @@ -158,26 +140,28 @@ func (o *Overall) GetSummary() string { return o.Summary } + var summary string + // Was the state set explicitly? if o.stateSetExplicitly { // Yes, so lets generate it from the sum of the overall states if o.criticals > 0 { - o.Summary += fmt.Sprintf("critical=%d ", o.criticals) + summary += fmt.Sprintf("critical=%d ", o.criticals) } if o.unknowns > 0 { - o.Summary += fmt.Sprintf("unknown=%d ", o.unknowns) + summary += fmt.Sprintf("unknown=%d ", o.unknowns) } if o.warnings > 0 { - o.Summary += fmt.Sprintf("warning=%d ", o.warnings) + summary += fmt.Sprintf("warning=%d ", o.warnings) } if o.oks > 0 { - o.Summary += fmt.Sprintf("ok=%d ", o.oks) + summary += fmt.Sprintf("ok=%d ", o.oks) } - if o.Summary == "" { + if summary == "" { o.Summary = "No status information" return o.Summary } @@ -191,44 +175,26 @@ func (o *Overall) GetSummary() string { return o.Summary } - var ( - criticals int - warnings int - oks int - unknowns int - ) - - for _, sc := range o.PartialResults { - switch sc.GetStatus() { - case check.Critical: - criticals++ - case check.Warning: - warnings++ - case check.Unknown: - unknowns++ - case check.OK: - oks++ - } - } + oks, warnings, criticals, unknowns := o.countPartialStates() if criticals > 0 { - o.Summary += fmt.Sprintf("critical=%d ", criticals) + summary += fmt.Sprintf("critical=%d ", criticals) } if unknowns > 0 { - o.Summary += fmt.Sprintf("unknowns=%d ", unknowns) + summary += fmt.Sprintf("unknown=%d ", unknowns) } if warnings > 0 { - o.Summary += fmt.Sprintf("warning=%d ", warnings) + summary += fmt.Sprintf("warning=%d ", warnings) } if oks > 0 { - o.Summary += fmt.Sprintf("ok=%d ", oks) + summary += fmt.Sprintf("ok=%d ", oks) } } - o.Summary = "states: " + strings.TrimSpace(o.Summary) + o.Summary = "states: " + strings.TrimSpace(summary) return o.Summary } @@ -277,7 +243,7 @@ func (s *PartialResult) SetDefaultState(state check.Status) error { // SetState sets a state for a PartialResult func (s *PartialResult) SetState(state check.Status) error { if state < check.OK || state > check.Unknown { - return errors.New("Default State is not a valid result state. Got " + state.String() + " which is not valid") + return errors.New("State is not a valid result state. Got " + state.String() + " which is not valid") } s.state = state @@ -309,6 +275,24 @@ func (s *PartialResult) GetStatus() check.Status { return WorstState(states...) } +// countPartialStates returns the current count of states +func (o *Overall) countPartialStates() (oks, warnings, criticals, unknowns int) { + for _, sc := range o.PartialResults { + switch sc.GetStatus() { + case check.Critical: + criticals++ + case check.Warning: + warnings++ + case check.Unknown: + unknowns++ + case check.OK: + oks++ + } + } + + return +} + // getPerfdata returns all subsequent perfdata as a concatenated string func (s *PartialResult) getPerfdata() string { var output strings.Builder @@ -331,6 +315,9 @@ func (s *PartialResult) getOutput(indentLevel int) string { var output strings.Builder prefix := strings.Repeat(" ", indentLevel) + // The final result will look like this: + // [OK] Overall is OK + // \_ [OK] My PartialResult output.WriteString(prefix + "\\_ " + s.String() + "\n") if s.PartialResults != nil {