122 lines
4.2 KiB
Go
122 lines
4.2 KiB
Go
|
package sentry
|
||
|
|
||
|
import "time"
|
||
|
|
||
|
type CheckInStatus string
|
||
|
|
||
|
const (
|
||
|
CheckInStatusInProgress CheckInStatus = "in_progress"
|
||
|
CheckInStatusOK CheckInStatus = "ok"
|
||
|
CheckInStatusError CheckInStatus = "error"
|
||
|
)
|
||
|
|
||
|
type checkInScheduleType string
|
||
|
|
||
|
const (
|
||
|
checkInScheduleTypeCrontab checkInScheduleType = "crontab"
|
||
|
checkInScheduleTypeInterval checkInScheduleType = "interval"
|
||
|
)
|
||
|
|
||
|
type MonitorSchedule interface {
|
||
|
// scheduleType is a private method that must be implemented for monitor schedule
|
||
|
// implementation. It should never be called. This method is made for having
|
||
|
// specific private implementation of MonitorSchedule interface.
|
||
|
scheduleType() checkInScheduleType
|
||
|
}
|
||
|
|
||
|
type crontabSchedule struct {
|
||
|
Type string `json:"type"`
|
||
|
Value string `json:"value"`
|
||
|
}
|
||
|
|
||
|
func (c crontabSchedule) scheduleType() checkInScheduleType {
|
||
|
return checkInScheduleTypeCrontab
|
||
|
}
|
||
|
|
||
|
// CrontabSchedule defines the MonitorSchedule with a cron format.
|
||
|
// Example: "8 * * * *".
|
||
|
func CrontabSchedule(scheduleString string) MonitorSchedule {
|
||
|
return crontabSchedule{
|
||
|
Type: string(checkInScheduleTypeCrontab),
|
||
|
Value: scheduleString,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type intervalSchedule struct {
|
||
|
Type string `json:"type"`
|
||
|
Value int64 `json:"value"`
|
||
|
Unit string `json:"unit"`
|
||
|
}
|
||
|
|
||
|
func (i intervalSchedule) scheduleType() checkInScheduleType {
|
||
|
return checkInScheduleTypeInterval
|
||
|
}
|
||
|
|
||
|
type MonitorScheduleUnit string
|
||
|
|
||
|
const (
|
||
|
MonitorScheduleUnitMinute MonitorScheduleUnit = "minute"
|
||
|
MonitorScheduleUnitHour MonitorScheduleUnit = "hour"
|
||
|
MonitorScheduleUnitDay MonitorScheduleUnit = "day"
|
||
|
MonitorScheduleUnitWeek MonitorScheduleUnit = "week"
|
||
|
MonitorScheduleUnitMonth MonitorScheduleUnit = "month"
|
||
|
MonitorScheduleUnitYear MonitorScheduleUnit = "year"
|
||
|
)
|
||
|
|
||
|
// IntervalSchedule defines the MonitorSchedule with an interval format.
|
||
|
//
|
||
|
// Example:
|
||
|
//
|
||
|
// IntervalSchedule(1, sentry.MonitorScheduleUnitDay)
|
||
|
func IntervalSchedule(value int64, unit MonitorScheduleUnit) MonitorSchedule {
|
||
|
return intervalSchedule{
|
||
|
Type: string(checkInScheduleTypeInterval),
|
||
|
Value: value,
|
||
|
Unit: string(unit),
|
||
|
}
|
||
|
}
|
||
|
|
||
|
type MonitorConfig struct { //nolint: maligned // prefer readability over optimal memory layout
|
||
|
Schedule MonitorSchedule `json:"schedule,omitempty"`
|
||
|
// The allowed margin of minutes after the expected check-in time that
|
||
|
// the monitor will not be considered missed for.
|
||
|
CheckInMargin int64 `json:"checkin_margin,omitempty"`
|
||
|
// The allowed duration in minutes that the monitor may be `in_progress`
|
||
|
// for before being considered failed due to timeout.
|
||
|
MaxRuntime int64 `json:"max_runtime,omitempty"`
|
||
|
// A tz database string representing the timezone which the monitor's execution schedule is in.
|
||
|
// See: https://en.wikipedia.org/wiki/List_of_tz_database_time_zones
|
||
|
Timezone string `json:"timezone,omitempty"`
|
||
|
// The number of consecutive failed check-ins it takes before an issue is created.
|
||
|
FailureIssueThreshold int64 `json:"failure_issue_threshold,omitempty"`
|
||
|
// The number of consecutive OK check-ins it takes before an issue is resolved.
|
||
|
RecoveryThreshold int64 `json:"recovery_threshold,omitempty"`
|
||
|
}
|
||
|
|
||
|
type CheckIn struct { //nolint: maligned // prefer readability over optimal memory layout
|
||
|
// Check-In ID (unique and client generated)
|
||
|
ID EventID `json:"check_in_id"`
|
||
|
// The distinct slug of the monitor.
|
||
|
MonitorSlug string `json:"monitor_slug"`
|
||
|
// The status of the check-in.
|
||
|
Status CheckInStatus `json:"status"`
|
||
|
// The duration of the check-in. Will only take effect if the status is ok or error.
|
||
|
Duration time.Duration `json:"duration,omitempty"`
|
||
|
}
|
||
|
|
||
|
// serializedCheckIn is used by checkInMarshalJSON method on Event struct.
|
||
|
// See https://develop.sentry.dev/sdk/check-ins/
|
||
|
type serializedCheckIn struct { //nolint: maligned
|
||
|
// Check-In ID (unique and client generated).
|
||
|
CheckInID string `json:"check_in_id"`
|
||
|
// The distinct slug of the monitor.
|
||
|
MonitorSlug string `json:"monitor_slug"`
|
||
|
// The status of the check-in.
|
||
|
Status CheckInStatus `json:"status"`
|
||
|
// The duration of the check-in in seconds. Will only take effect if the status is ok or error.
|
||
|
Duration float64 `json:"duration,omitempty"`
|
||
|
Release string `json:"release,omitempty"`
|
||
|
Environment string `json:"environment,omitempty"`
|
||
|
MonitorConfig *MonitorConfig `json:"monitor_config,omitempty"`
|
||
|
}
|