@@ -42,25 +42,31 @@ type xychart struct {
4242}
4343
4444type githubSummary struct {
45- client api.Client
46- Pods []string
45+ client api.Client
46+ firingAlerts bool
47+ Pods []string
4748}
4849
4950func NewSummary (c api.Client , pods ... string ) githubSummary {
5051 return githubSummary {
51- client : c ,
52- Pods : pods ,
52+ client : c ,
53+ Pods : pods ,
54+ firingAlerts : false ,
5355 }
5456}
5557
58+ func (s * githubSummary ) FiringAlerts () bool {
59+ return s .firingAlerts
60+ }
61+
5662// PerformanceQuery queries the prometheus server and generates a mermaid xychart with the data.
5763// title - Display name of the xychart
5864// pod - Pod name with which to filter results from prometheus
5965// query - Prometheus query
6066// yLabel - Label of the Y axis i.e. "KB/s", "MB", etc.
6167// scaler - Constant by which to scale the results. For instance, cpu usage is more human-readable
6268// as "mCPU" vs "CPU", so we scale the results by a factor of 1,000.
63- func (s githubSummary ) PerformanceQuery (title , pod , query string , yLabel string , scaler float64 ) (string , error ) {
69+ func (s * githubSummary ) PerformanceQuery (title , pod , query , yLabel string , scaler float64 ) (string , error ) {
6470 v1api := v1 .NewAPI (s .client )
6571 ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
6672 defer cancel ()
@@ -115,7 +121,7 @@ func (s githubSummary) PerformanceQuery(title, pod, query string, yLabel string,
115121
116122// Alerts queries the prometheus server for alerts and generates markdown output for anything found.
117123// If no alerts are found, the alerts section will contain only "None." in the final output.
118- func (s githubSummary ) Alerts () (string , error ) {
124+ func (s * githubSummary ) Alerts () (string , error ) {
119125 v1api := v1 .NewAPI (s .client )
120126 ctx , cancel := context .WithTimeout (context .Background (), 10 * time .Second )
121127 defer cancel ()
@@ -136,6 +142,7 @@ func (s githubSummary) Alerts() (string, error) {
136142 switch a .State {
137143 case v1 .AlertStateFiring :
138144 firingAlerts = append (firingAlerts , aConv )
145+ s .firingAlerts = true
139146 case v1 .AlertStatePending :
140147 pendingAlerts = append (pendingAlerts , aConv )
141148 // Ignore AlertStateInactive; the alerts endpoint doesn't return them
@@ -173,27 +180,31 @@ func executeTemplate(templateFile string, obj any) (string, error) {
173180// template. This allows us to add or change queries (hopefully) without needing to
174181// touch code. The summary will be output to a file supplied by the env target.
175182func PrintSummary (envTarget string ) error {
183+ path := os .Getenv (envTarget )
184+ if path == "" {
185+ fmt .Printf ("No summary output specified; skipping" )
186+ return nil
187+ }
188+
176189 client , err := api .NewClient (api.Config {
177190 Address : defaultPromUrl ,
178191 })
179192 if err != nil {
180- fmt .Printf ("Error creating prometheus client: %v\n " , err )
181- os .Exit (1 )
193+ return err
182194 }
183195
184196 summary := NewSummary (client , "operator-controller" , "catalogd" )
185- summaryMarkdown , err := executeTemplate (summaryTemplate , summary )
197+ summaryMarkdown , err := executeTemplate (summaryTemplate , & summary )
186198 if err != nil {
187199 return err
188200 }
189- if path := os .Getenv (envTarget ); path != "" {
190- err = os .WriteFile (path , []byte (summaryMarkdown ), 0o600 )
191- if err != nil {
192- return err
193- }
194- fmt .Printf ("Test summary output to %s successful\n " , envTarget )
195- } else {
196- fmt .Printf ("No summary output specified; skipping" )
201+ err = os .WriteFile (path , []byte (summaryMarkdown ), 0o600 )
202+ if err != nil {
203+ return err
204+ }
205+ fmt .Printf ("Test summary output to %s successful\n " , envTarget )
206+ if summary .FiringAlerts () {
207+ return fmt .Errorf ("Alert(s) encountered during test run; see summary for details" )
197208 }
198209 return nil
199210}
0 commit comments