Something went wrong. Try again.
[READ-ONLY] Mirror of https://github.com/openstatusHQ/openstatus. ๐ซ Status page with uptime monitoring & API monitoring as code ๐ซ openstatus.dev
bun drizzle-orm monitoring monitoring-as-code nextjs observability on-call open-source shadcn-ui status-page statuspage synthetic-monitoring tinybird turso uptime uptime-checker uptime-monitor
Something went wrong. Try again.
3.5 kB ยท 149 lines
Go
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150package assertions
import ( "encoding/json" "fmt" "slices" "strings"
"github.com/openstatushq/openstatus/apps/checker/request")
type BodyString struct { AssertionType request.AssertionType `json:"type"` Comparator request.StringComparator `json:"compare"` Target string `json:"target"`}
type StatusTarget struct { AssertionType request.AssertionType `json:"type"` Comparator request.NumberComparator `json:"compare"` Target int64 `json:"target"`}
type HeaderTarget struct { AssertionType request.AssertionType `json:"type"` Comparator request.StringComparator `json:"compare"` Target string `json:"target"` Key string `json:"key"`}
type StringTargetType struct { Comparator request.StringComparator `json:"compare"` Target string `json:"target"`}
type RecordTarget struct { Comparator request.RecordComparator `json:"compare"` Target string `json:"target"` Key request.Record `json:"key"`}
func (target StringTargetType) StringEvaluate(s string) bool { switch target.Comparator { case request.StringContains: return strings.Contains(s, target.Target) case request.StringNotContains: return !strings.Contains(s, target.Target) case request.StringEmpty: return s == "" case request.StringNotEmpty: return s != "" case request.StringEquals: return s == target.Target case request.StringNotEquals: return s != target.Target case request.StringGreaterThan: return s > target.Target case request.StringGreaterThanEqual: return s >= target.Target case request.StringLowerThan: return s < target.Target case request.StringLowerThanEqual: return s <= target.Target }
return false}
func (target HeaderTarget) HeaderEvaluate(s string) bool { headers := make(map[string]any)
if err := json.Unmarshal([]byte(s), &headers); err != nil { return false }
for key, value := range headers { if strings.EqualFold(key, target.Key) { t := StringTargetType{Comparator: target.Comparator, Target: target.Target} return t.StringEvaluate(fmt.Sprintf("%v", value)) } }
return false}
func (target StatusTarget) StatusEvaluate(value int64) bool {
switch target.Comparator { case request.NumberEquals: if target.Target != value { return false } case request.NumberNotEquals: if target.Target == value { return false }
case request.NumberGreaterThan: if target.Target >= value { return false } case request.NumberGreaterThanEqual: if target.Target > value { return false } case request.NumberLowerThan: if target.Target <= value { return false } case request.NumberLowerThanEqual: if target.Target < value { return false } default: fmt.Println("something strange ", target) } return true}
func (target RecordTarget) RecordEvaluate(s []string) bool { switch target.Comparator { case request.RecordEquals: if !slices.Contains(s, target.Target) { return false }
case request.RecordNotEquals: if slices.Contains(s, target.Target) { return false }
case request.RecordContains: for _, record := range s { if strings.Contains(record, target.Target) { return true } } return false case request.RecordNotContains: for _, record := range s { if strings.Contains(record, target.Target) { return false } } return true }
return true}