* feat(suite): Implement Suites Fixes #1230 * Update docs * Fix variable alignment * Prevent always-run endpoint from running if a context placeholder fails to resolve in the URL * Return errors when a context placeholder path fails to resolve * Add a couple of unit tests * Add a couple of unit tests * fix(ui): Update group count properly Fixes #1233 * refactor: Pass down entire config instead of several sub-configs * fix: Change default suite interval and timeout * fix: Deprecate disable-monitoring-lock in favor of concurrency * fix: Make sure there are no duplicate keys * Refactor some code * Update watchdog/watchdog.go * Update web/app/src/components/StepDetailsModal.vue Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> * chore: Remove useless log * fix: Set default concurrency to 3 instead of 5 --------- Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
package suite
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/TwiN/gatus/v5/config/endpoint"
|
|
)
|
|
|
|
// Result represents the result of a suite execution
|
|
type Result struct {
|
|
// Name of the suite
|
|
Name string `json:"name,omitempty"`
|
|
|
|
// Group of the suite
|
|
Group string `json:"group,omitempty"`
|
|
|
|
// Success indicates whether all required endpoints succeeded
|
|
Success bool `json:"success"`
|
|
|
|
// Timestamp is when the suite execution started
|
|
Timestamp time.Time `json:"timestamp"`
|
|
|
|
// Duration is how long the entire suite execution took
|
|
Duration time.Duration `json:"duration"`
|
|
|
|
// EndpointResults contains the results of each endpoint execution
|
|
EndpointResults []*endpoint.Result `json:"endpointResults"`
|
|
|
|
// Context is the final state of the context after all endpoints executed
|
|
Context map[string]interface{} `json:"-"`
|
|
|
|
// Errors contains any suite-level errors
|
|
Errors []string `json:"errors,omitempty"`
|
|
}
|
|
|
|
// AddError adds an error to the suite result
|
|
func (r *Result) AddError(err string) {
|
|
r.Errors = append(r.Errors, err)
|
|
}
|
|
|
|
// CalculateSuccess determines if the suite execution was successful
|
|
func (r *Result) CalculateSuccess() {
|
|
r.Success = true
|
|
// Check if any endpoints failed (all endpoints are required)
|
|
for _, epResult := range r.EndpointResults {
|
|
if !epResult.Success {
|
|
r.Success = false
|
|
break
|
|
}
|
|
}
|
|
// Also check for suite-level errors
|
|
if len(r.Errors) > 0 {
|
|
r.Success = false
|
|
}
|
|
}
|