mirror of
https://github.com/TwiN/gatus.git
synced 2024-11-25 09:24:04 +01:00
9d151fcdb4
* refactor: Partially break core package into dns, result and ssh packages * refactor: Move core package to config/endpoint * refactor: Fix warning about overlapping imported package name with endpoint variable * refactor: Rename EndpointStatus to Status * refactor: Merge result pkg back into endpoint pkg, because it makes more sense * refactor: Rename parameter r to result in Condition.evaluate * refactor: Rename parameter r to result * refactor: Revert accidental change to endpoint.TypeDNS * refactor: Rename parameter r to result * refactor: Merge util package into endpoint package * refactor: Rename parameter r to result
82 lines
3.1 KiB
Go
82 lines
3.1 KiB
Go
package memory
|
|
|
|
import (
|
|
"github.com/TwiN/gatus/v5/config/endpoint"
|
|
"github.com/TwiN/gatus/v5/storage/store/common"
|
|
"github.com/TwiN/gatus/v5/storage/store/common/paging"
|
|
)
|
|
|
|
// ShallowCopyEndpointStatus returns a shallow copy of a Status with only the results
|
|
// within the range defined by the page and pageSize parameters
|
|
func ShallowCopyEndpointStatus(ss *endpoint.Status, params *paging.EndpointStatusParams) *endpoint.Status {
|
|
shallowCopy := &endpoint.Status{
|
|
Name: ss.Name,
|
|
Group: ss.Group,
|
|
Key: ss.Key,
|
|
Uptime: endpoint.NewUptime(),
|
|
}
|
|
numberOfResults := len(ss.Results)
|
|
resultsStart, resultsEnd := getStartAndEndIndex(numberOfResults, params.ResultsPage, params.ResultsPageSize)
|
|
if resultsStart < 0 || resultsEnd < 0 {
|
|
shallowCopy.Results = []*endpoint.Result{}
|
|
} else {
|
|
shallowCopy.Results = ss.Results[resultsStart:resultsEnd]
|
|
}
|
|
numberOfEvents := len(ss.Events)
|
|
eventsStart, eventsEnd := getStartAndEndIndex(numberOfEvents, params.EventsPage, params.EventsPageSize)
|
|
if eventsStart < 0 || eventsEnd < 0 {
|
|
shallowCopy.Events = []*endpoint.Event{}
|
|
} else {
|
|
shallowCopy.Events = ss.Events[eventsStart:eventsEnd]
|
|
}
|
|
return shallowCopy
|
|
}
|
|
|
|
func getStartAndEndIndex(numberOfResults int, page, pageSize int) (int, int) {
|
|
if page < 1 || pageSize < 0 {
|
|
return -1, -1
|
|
}
|
|
start := numberOfResults - (page * pageSize)
|
|
end := numberOfResults - ((page - 1) * pageSize)
|
|
if start > numberOfResults {
|
|
start = -1
|
|
} else if start < 0 {
|
|
start = 0
|
|
}
|
|
if end > numberOfResults {
|
|
end = numberOfResults
|
|
}
|
|
return start, end
|
|
}
|
|
|
|
// AddResult adds a Result to Status.Results and makes sure that there are
|
|
// no more than MaximumNumberOfResults results in the Results slice
|
|
func AddResult(ss *endpoint.Status, result *endpoint.Result) {
|
|
if ss == nil {
|
|
return
|
|
}
|
|
if len(ss.Results) > 0 {
|
|
// Check if there's any change since the last result
|
|
if ss.Results[len(ss.Results)-1].Success != result.Success {
|
|
ss.Events = append(ss.Events, endpoint.NewEventFromResult(result))
|
|
if len(ss.Events) > common.MaximumNumberOfEvents {
|
|
// Doing ss.Events[1:] would usually be sufficient, but in the case where for some reason, the slice has
|
|
// more than one extra element, we can get rid of all of them at once and thus returning the slice to a
|
|
// length of MaximumNumberOfEvents by using ss.Events[len(ss.Events)-MaximumNumberOfEvents:] instead
|
|
ss.Events = ss.Events[len(ss.Events)-common.MaximumNumberOfEvents:]
|
|
}
|
|
}
|
|
} else {
|
|
// This is the first result, so we need to add the first healthy/unhealthy event
|
|
ss.Events = append(ss.Events, endpoint.NewEventFromResult(result))
|
|
}
|
|
ss.Results = append(ss.Results, result)
|
|
if len(ss.Results) > common.MaximumNumberOfResults {
|
|
// Doing ss.Results[1:] would usually be sufficient, but in the case where for some reason, the slice has more
|
|
// than one extra element, we can get rid of all of them at once and thus returning the slice to a length of
|
|
// MaximumNumberOfResults by using ss.Results[len(ss.Results)-MaximumNumberOfResults:] instead
|
|
ss.Results = ss.Results[len(ss.Results)-common.MaximumNumberOfResults:]
|
|
}
|
|
processUptimeAfterResult(ss.Uptime, result)
|
|
}
|