Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
85 changes: 36 additions & 49 deletions result/overall.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
}
Expand All @@ -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
}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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 {
Expand Down
Loading