mirror of
https://github.com/TwiN/gatus.git
synced 2024-11-25 01:13:40 +01:00
Fix #123: Deduplicate result errors
This commit is contained in:
parent
5e00752c5a
commit
8997eeef05
@ -126,7 +126,7 @@ func (c Condition) evaluate(result *Result) bool {
|
|||||||
conditionToDisplay = prettifyNumericalParameters(parameters, resolvedParameters, "<")
|
conditionToDisplay = prettifyNumericalParameters(parameters, resolvedParameters, "<")
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
result.Errors = append(result.Errors, fmt.Sprintf("invalid condition '%s' has been provided", condition))
|
result.AddError(fmt.Sprintf("invalid condition '%s' has been provided", condition))
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
if !success {
|
if !success {
|
||||||
@ -242,7 +242,7 @@ func sanitizeAndResolve(elements []string, result *Result) ([]string, []string)
|
|||||||
} else {
|
} else {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if err.Error() != "unexpected end of JSON input" {
|
if err.Error() != "unexpected end of JSON input" {
|
||||||
result.Errors = append(result.Errors, err.Error())
|
result.AddError(err.Error())
|
||||||
}
|
}
|
||||||
if checkingForLength {
|
if checkingForLength {
|
||||||
element = LengthFunctionPrefix + element + FunctionSuffix + " " + InvalidConditionElementSuffix
|
element = LengthFunctionPrefix + element + FunctionSuffix + " " + InvalidConditionElementSuffix
|
||||||
|
@ -38,6 +38,15 @@ func BenchmarkCondition_evaluateWithBodyStringFailure(b *testing.B) {
|
|||||||
b.ReportAllocs()
|
b.ReportAllocs()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func BenchmarkCondition_evaluateWithBodyStringFailureInvalidPath(b *testing.B) {
|
||||||
|
condition := Condition("[BODY].user.name == bob.doe")
|
||||||
|
for n := 0; n < b.N; n++ {
|
||||||
|
result := &Result{body: []byte("{\"name\": \"bob.doe\"}")}
|
||||||
|
condition.evaluate(result)
|
||||||
|
}
|
||||||
|
b.ReportAllocs()
|
||||||
|
}
|
||||||
|
|
||||||
func BenchmarkCondition_evaluateWithBodyStringLen(b *testing.B) {
|
func BenchmarkCondition_evaluateWithBodyStringLen(b *testing.B) {
|
||||||
condition := Condition("len([BODY].name) == 8")
|
condition := Condition("len([BODY].name) == 8")
|
||||||
for n := 0; n < b.N; n++ {
|
for n := 0; n < b.N; n++ {
|
||||||
|
@ -25,7 +25,7 @@ type Result struct {
|
|||||||
Duration time.Duration `json:"duration"`
|
Duration time.Duration `json:"duration"`
|
||||||
|
|
||||||
// Errors encountered during the evaluation of the service's health
|
// Errors encountered during the evaluation of the service's health
|
||||||
Errors []string `json:"errors"`
|
Errors []string `json:"errors"` // XXX: find a way to filter out duplicate errors
|
||||||
|
|
||||||
// ConditionResults results of the service's conditions
|
// ConditionResults results of the service's conditions
|
||||||
ConditionResults []*ConditionResult `json:"conditionResults"`
|
ConditionResults []*ConditionResult `json:"conditionResults"`
|
||||||
@ -46,3 +46,15 @@ type Result struct {
|
|||||||
// and sets it to nil after the evaluation has been completed.
|
// and sets it to nil after the evaluation has been completed.
|
||||||
body []byte
|
body []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// AddError adds an error to the result's list of errors.
|
||||||
|
// It also ensures that there are no duplicates.
|
||||||
|
func (r *Result) AddError(error string) {
|
||||||
|
for _, resultError := range r.Errors {
|
||||||
|
if resultError == error {
|
||||||
|
// If the error already exists, don't add it
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
r.Errors = append(r.Errors, error)
|
||||||
|
}
|
||||||
|
21
core/result_test.go
Normal file
21
core/result_test.go
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
package core
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestResult_AddError(t *testing.T) {
|
||||||
|
result := &Result{}
|
||||||
|
result.AddError("potato")
|
||||||
|
if len(result.Errors) != 1 {
|
||||||
|
t.Error("should've had 1 error")
|
||||||
|
}
|
||||||
|
result.AddError("potato")
|
||||||
|
if len(result.Errors) != 1 {
|
||||||
|
t.Error("should've still had 1 error, because a duplicate error was added")
|
||||||
|
}
|
||||||
|
result.AddError("tomato")
|
||||||
|
if len(result.Errors) != 2 {
|
||||||
|
t.Error("should've had 2 error")
|
||||||
|
}
|
||||||
|
}
|
@ -162,14 +162,14 @@ func (service *Service) getIP(result *Result) {
|
|||||||
} else {
|
} else {
|
||||||
urlObject, err := url.Parse(service.URL)
|
urlObject, err := url.Parse(service.URL)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
result.Errors = append(result.Errors, err.Error())
|
result.AddError(err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
result.Hostname = urlObject.Hostname()
|
result.Hostname = urlObject.Hostname()
|
||||||
}
|
}
|
||||||
ips, err := net.LookupIP(result.Hostname)
|
ips, err := net.LookupIP(result.Hostname)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
result.Errors = append(result.Errors, err.Error())
|
result.AddError(err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
result.IP = ips[0].String()
|
result.IP = ips[0].String()
|
||||||
@ -193,7 +193,7 @@ func (service *Service) call(result *Result) {
|
|||||||
service.DNS.query(service.URL, result)
|
service.DNS.query(service.URL, result)
|
||||||
result.Duration = time.Since(startTime)
|
result.Duration = time.Since(startTime)
|
||||||
} else if isServiceStartTLS {
|
} else if isServiceStartTLS {
|
||||||
result.Connected, certificate, err = client.CanPerformStartTls(strings.TrimPrefix(service.URL, "starttls://"), service.Insecure)
|
result.Connected, certificate, err = client.CanPerformStartTLS(strings.TrimPrefix(service.URL, "starttls://"), service.Insecure)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
result.Errors = append(result.Errors, err.Error())
|
result.Errors = append(result.Errors, err.Error())
|
||||||
return
|
return
|
||||||
@ -209,7 +209,7 @@ func (service *Service) call(result *Result) {
|
|||||||
response, err = client.GetHTTPClient(service.Insecure).Do(request)
|
response, err = client.GetHTTPClient(service.Insecure).Do(request)
|
||||||
result.Duration = time.Since(startTime)
|
result.Duration = time.Since(startTime)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
result.Errors = append(result.Errors, err.Error())
|
result.AddError(err.Error())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
defer response.Body.Close()
|
defer response.Body.Close()
|
||||||
@ -223,7 +223,7 @@ func (service *Service) call(result *Result) {
|
|||||||
if service.needsToReadBody() {
|
if service.needsToReadBody() {
|
||||||
result.body, err = ioutil.ReadAll(response.Body)
|
result.body, err = ioutil.ReadAll(response.Body)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
result.Errors = append(result.Errors, err.Error())
|
result.AddError(err.Error())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user