Documentation
¶
Index ¶
- Constants
- Variables
- func AtLeastOneUserExists() (bool, error)
- func CreateEmergencyProbe(probeID, contactID interface{}) error
- func CreateProbe(userID interface{}) error
- func CreateUniqueJobByName(name string, handler string, args string) error
- func CreateUser(user *User) error
- func DbDirectory(dbRootDir string) (string, error)
- func DeleteUser(id interface{}) error
- func FindUserPassword(email string) (string, error)
- func InitialiazeDb(passPhrase string, dbRootDir string, storage *gstorage.GStorage) error
- func SetProbeStatus(probeID interface{}, status string) error
- type BaseModel
- type Contact
- type EmergencyProbe
- type Job
- type JobStatus
- type JobsStats
- type Probe
- type ProbeSetting
- type ProbeStats
- type ProbeStatus
- type Role
- type User
- func (user *User) AddContact(contact *Contact) error
- func (user *User) CancelAllPendingProbes() error
- func (user *User) DeleteContact(id interface{}) error
- func (user *User) DisableLivlinessProbe() error
- func (user *User) EmergencyContact() (*Contact, error)
- func (user *User) IsAdmin() (bool, error)
- func (user *User) IsProbeEnabled() (bool, error)
- func (user *User) LastProbe() (*Probe, error)
- func (user *User) LoadContacts() error
- func (user *User) Update(data map[string]interface{}) error
- func (user *User) UpdateContact(contactID string, data map[string]interface{}) error
- func (user *User) UpdateProbSettings(data map[string]interface{}) error
Constants ¶
const ( ENQUEUED_JOB = "enqueued" IN_PROGRESS_JOB = "in-progress" SUCCESSFUL_JOB = "successful" DEAD_JOB = "dead" SCHEDULED_JOB = "scheduled" )
const ( DEFAULT_PROBE_CRON_DAY = "3" DEFAULT_PROBE_CRON_HOUR = "18" DEFAULT_PROBE_CRON_MINUTE = "0" )
const ( PENDING_PROBE = "pending" BAD_PROBE = "bad" GOOD_PROBE = "good" CANCELLED_PROBE = "cancelled" UNAVAILABLE_PROBE = "unavailable" )
const ( ADMIN_USER_ROLE = "admin" BASIC_USER_ROLE = "basic" )
const DB_NAME = "kronus.db"
Variables ¶
var ( // At 18:00 every Wednesday DEFAULT_PROBE_CRON_EXPRESSION = fmt.Sprintf( "%v %v * * %v", DEFAULT_PROBE_CRON_MINUTE, DEFAULT_PROBE_CRON_HOUR, DEFAULT_PROBE_CRON_DAY) // Maps day of the week to it's numeric equivalent e.g. "sun": "0", "mon": "1" ... CRON_DAY_MAPPINGS = map[string]string{ "sun": "0", "mon": "1", "tue": "2", "wed": "3", "thu": "4", "fri": "5", "sat": "5", } )
var (
ErrDuplicateJob = errors.New("job with the given name already exists in queue")
)
var JobStatusNameMap = map[string]bool{ ENQUEUED_JOB: true, IN_PROGRESS_JOB: true, SUCCESSFUL_JOB: true, DEAD_JOB: true, SCHEDULED_JOB: true, }
var ProbeStatusMapToResponse = map[string]map[string]bool{ GOOD_PROBE: {"yes": true, "yeah": true, "yh": true, "y": true}, BAD_PROBE: {"no": true, "nope": true, "nah": true, "na": true, "n": true}, }
var ProbeStatusNameMap = map[string]bool{ PENDING_PROBE: true, BAD_PROBE: true, GOOD_PROBE: true, CANCELLED_PROBE: true, UNAVAILABLE_PROBE: true, }
Functions ¶
func AtLeastOneUserExists ¶
func CreateEmergencyProbe ¶
func CreateEmergencyProbe(probeID, contactID interface{}) error
func CreateProbe ¶
func CreateProbe(userID interface{}) error
func CreateUniqueJobByName ¶
func CreateUser ¶
func DbDirectory ¶
func DeleteUser ¶
func DeleteUser(id interface{}) error
func FindUserPassword ¶
func InitialiazeDb ¶
InitialiazeDb does 4 things to initialize the database
- download sqlite backup db if backup is enabled to blob storage
- open the db file for read & write
- auto migrate schema
- and finally populate db with seed data
func SetProbeStatus ¶
Types ¶
type Contact ¶
type Contact struct {
BaseModel
FirstName string `json:"first_name" validate:"required"`
LastName string `json:"last_name" validate:"required"`
PhoneNumber string `json:"phone_number" validate:"required,e164" gorm:"not null;unique"`
Email string `json:"email" validate:"required,email" gorm:"unique"`
IsEmergencyContact bool `json:"is_emergency_contact"`
UserID uint `json:"user_id" gorm:"not null"`
EmergencyProbes []EmergencyProbe `json:"emergency_probes,omitempty" gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
}
type EmergencyProbe ¶
type Job ¶
type Job struct {
BaseModel
Fails int `json:"fails"`
Name string `json:"name"`
Handler string `json:"handler"`
Args string `json:"args"`
LastError string `json:"last_error"`
Claimed bool `json:"claimed" gorm:"default:false"`
JobStatusID uint `json:"job_status_id"`
}
func JobsByStatus ¶
func LastJobLastUpdated ¶
LastJobLastUpdated returns the last job which was last updated 'arg1' minutes ago and is of 'arg2' status. i.e last record where job.updated_at + 'arg1' minutes <= 'now'.
WARNING: THIS QUERY IS UNIQE TO SQLITE, REMEMBER TO UPDATE IT IF/WHEN OTHER SQL DATABASES ARE SUPPORTED
func (*Job) MarkAsClaimed ¶
type JobStatus ¶
type JobStatus struct {
BaseModel
Name string
Jobs []Job `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}
func FindJobStatus ¶
type JobsStats ¶
type JobsStats struct {
EnueuedJobCount int64 `json:"enueued_job_count"`
InProgressJobCount int64 `json:"in_progress_job_count"`
SuccessfulJobCount int64 `json:"successful_job_count"`
DeadJobCount int64 `json:"dead_job_count"`
}
func CurrentJobsStats ¶
type Probe ¶
type Probe struct {
BaseModel
LastResponse string `json:"last_response"`
RetryCount int `json:"retry_count"`
EmergencyProbe EmergencyProbe `json:"emergency_probe"`
UserID uint `json:"user_id" gorm:"not null"`
ProbeStatusID uint `json:"probe_status_id"`
}
func ProbesByStatus ¶
func (*Probe) StatusFromLastResponse ¶
StatusFromLastResponse returns the derived probe 'status' (i.e. 'good', 'bad', or ”) based on 'LastResponse'(i.e. the linked user's last response) for the current probe
type ProbeSetting ¶
type ProbeSetting struct {
BaseModel
UserID uint `gorm:"not null;unique"`
Active bool `gorm:"default:false"`
CronExpression string `gorm:"not null"`
}
func FindProbeSettings ¶
func FindProbeSettings(userID interface{}) (*ProbeSetting, error)
type ProbeStats ¶
type ProbeStats struct {
PendingProbeCount int64 `json:"pending_probe_count"`
BadProbeCount int64 `json:"bad_probe_count"`
GoodProbeCount int64 `json:"good_probe_count"`
CancelledProbeCount int64 `json:"cancelled_probe_count"`
}
func CurrentProbeStats ¶
func CurrentProbeStats() (*ProbeStats, error)
type ProbeStatus ¶
type ProbeStatus struct {
BaseModel
Name string
Probes []Probe `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}
func FindProbeStatus ¶
func FindProbeStatus(name string) (*ProbeStatus, error)
type Role ¶
type User ¶
type User struct {
BaseModel
FirstName string `json:"first_name" validate:"required"`
LastName string `json:"last_name" validate:"required"`
PhoneNumber string `json:"phone_number" validate:"required,e164" gorm:"not null;unique"`
Email string `json:"email" validate:"required,email" gorm:"not null;unique"`
Password string `json:"password,omitempty" validate:"required,password" gorm:"not null"`
RoleID uint `json:"role_id" gorm:"null"`
ProbeSettings *ProbeSetting `json:"probe_settings,omitempty" gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
Contacts []Contact `json:"contacts,omitempty" gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
Probes []Probe `json:"probes,omitempty" gorm:"constraint:OnUpdate:CASCADE,OnDelete:CASCADE;"`
}
func FindUserBy ¶
func UsersWithActiveProbe ¶
func (*User) AddContact ¶
func (*User) CancelAllPendingProbes ¶
func (*User) DeleteContact ¶
func (*User) DisableLivlinessProbe ¶
DisableProbe turns off probe for user & cancels all pending probes