11package analyzer
22
33import (
4+ "bytes"
45 "encoding/json"
56 "fmt"
7+ "html/template"
8+ "log"
69 "path/filepath"
7- "strconv"
810 "strings"
911 "time"
1012
@@ -51,7 +53,7 @@ func (a *AnalyzeHostFilesystemPerformance) Analyze(getCollectedFileContents func
5153 if outcome .Fail != nil {
5254 if outcome .Fail .When == "" {
5355 result .IsFail = true
54- result .Message = outcome .Fail .Message
56+ result .Message = renderFSPerfOutcome ( outcome .Fail .Message , fsPerf )
5557 result .URI = outcome .Fail .URI
5658
5759 return & result , nil
@@ -64,15 +66,15 @@ func (a *AnalyzeHostFilesystemPerformance) Analyze(getCollectedFileContents func
6466
6567 if isMatch {
6668 result .IsFail = true
67- result .Message = outcome .Fail .Message
69+ result .Message = renderFSPerfOutcome ( outcome .Fail .Message , fsPerf )
6870 result .URI = outcome .Fail .URI
6971
7072 return & result , nil
7173 }
7274 } else if outcome .Warn != nil {
7375 if outcome .Warn .When == "" {
7476 result .IsWarn = true
75- result .Message = outcome .Warn .Message
77+ result .Message = renderFSPerfOutcome ( outcome .Warn .Message , fsPerf )
7678 result .URI = outcome .Warn .URI
7779
7880 return & result , nil
@@ -85,15 +87,15 @@ func (a *AnalyzeHostFilesystemPerformance) Analyze(getCollectedFileContents func
8587
8688 if isMatch {
8789 result .IsWarn = true
88- result .Message = outcome .Warn .Message
90+ result .Message = renderFSPerfOutcome ( outcome .Warn .Message , fsPerf )
8991 result .URI = outcome .Warn .URI
9092
9193 return & result , nil
9294 }
9395 } else if outcome .Pass != nil {
9496 if outcome .Pass .When == "" {
9597 result .IsPass = true
96- result .Message = outcome .Pass .Message
98+ result .Message = renderFSPerfOutcome ( outcome .Pass .Message , fsPerf )
9799 result .URI = outcome .Pass .URI
98100
99101 return & result , nil
@@ -106,7 +108,7 @@ func (a *AnalyzeHostFilesystemPerformance) Analyze(getCollectedFileContents func
106108
107109 if isMatch {
108110 result .IsPass = true
109- result .Message = outcome .Pass .Message
111+ result .Message = renderFSPerfOutcome ( outcome .Pass .Message , fsPerf )
110112 result .URI = outcome .Pass .URI
111113
112114 return & result , nil
@@ -125,14 +127,6 @@ func compareHostFilesystemPerformanceConditionalToActual(conditional string, fsP
125127 keyword := strings .ToLower (parts [0 ])
126128 comparator := parts [1 ]
127129
128- if keyword == "iops" {
129- desiredInt , err := strconv .ParseInt (parts [2 ], 10 , 64 )
130- if err != nil {
131- return false , errors .Wrapf (err , "failed to parse desired iops %q as integer" , parts [2 ])
132- }
133- return doCompareHostFilesystemIOPS (comparator , fsPerf .IOPS , int (desiredInt ))
134- }
135-
136130 desiredDuration , err := time .ParseDuration (parts [2 ])
137131 if err != nil {
138132 return false , errors .Wrapf (err , "failed to parse duration %q" , parts [2 ])
@@ -201,19 +195,17 @@ func doCompareHostFilesystemPerformance(operator string, actual time.Duration, d
201195 return false , fmt .Errorf ("Unknown filesystem performance operator %q" , operator )
202196}
203197
204- func doCompareHostFilesystemIOPS (operator string , actual int , desired int ) (bool , error ) {
205- switch operator {
206- case "<" :
207- return actual < desired , nil
208- case "<=" :
209- return actual <= desired , nil
210- case ">" :
211- return actual > desired , nil
212- case ">=" :
213- return actual >= desired , nil
214- case "=" , "==" , "===" :
215- return actual == desired , nil
198+ func renderFSPerfOutcome (outcome string , fsPerf collect.FSPerfResults ) string {
199+ t , err := template .New ("" ).Parse (outcome )
200+ if err != nil {
201+ log .Printf ("Failed to parse filesystem performance outcome: %v" , err )
202+ return outcome
216203 }
217-
218- return false , fmt .Errorf ("Unknown filesystem IOPS operator %q" , operator )
204+ var buf bytes.Buffer
205+ err = t .Execute (& buf , fsPerf )
206+ if err != nil {
207+ log .Printf ("Failed to render filesystem performance outcome: %v" , err )
208+ return outcome
209+ }
210+ return buf .String ()
219211}
0 commit comments