models

package
v0.3.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 24, 2021 License: Apache-2.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const (
	ENQUEUED_JOB    = "enqueued"
	IN_PROGRESS_JOB = "in-progress"
	SUCCESSFUL_JOB  = "successful"
	DEAD_JOB        = "dead"
	SCHEDULED_JOB   = "scheduled"
)
View Source
const (
	DEFAULT_PROBE_CRON_DAY    = "3"
	DEFAULT_PROBE_CRON_HOUR   = "18"
	DEFAULT_PROBE_CRON_MINUTE = "0"
)
View Source
const (
	PENDING_PROBE     = "pending"
	BAD_PROBE         = "bad"
	GOOD_PROBE        = "good"
	CANCELLED_PROBE   = "cancelled"
	UNAVAILABLE_PROBE = "unavailable"
)
View Source
const (
	ADMIN_USER_ROLE = "admin"
	BASIC_USER_ROLE = "basic"
)
View Source
const DB_NAME = "kronus.db"

Variables

View Source
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",
	}
)
View Source
var (
	ErrDuplicateJob = errors.New("job with the given name already exists in queue")
)
View Source
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},
}

Functions

func AtLeastOneUserExists

func AtLeastOneUserExists() (bool, error)

func CreateEmergencyProbe

func CreateEmergencyProbe(probeID, contactID interface{}) error

func CreateProbe

func CreateProbe(userID interface{}) error

func CreateUniqueJobByName

func CreateUniqueJobByName(name string, handler string, args string) error

func CreateUser

func CreateUser(user *User) error

func DbDirectory

func DbDirectory(dbRootDir string) (string, error)

func DeleteUser

func DeleteUser(id interface{}) error

func FindUserPassword

func FindUserPassword(email string) (string, error)

func InitialiazeDb

func InitialiazeDb(passPhrase string, dbRootDir string, storage *gstorage.GStorage) error

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

func SetProbeStatus(probeID interface{}, status string) error

Types

type BaseModel

type BaseModel struct {
	ID        uint      `json:"id" gorm:"primarykey"`
	CreatedAt time.Time `json:"created_at"`
	UpdatedAt time.Time `json:"updated_at"`
}

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 EmergencyProbe struct {
	BaseModel
	ContactID uint `json:"contact_id"`
	ProbeID   uint `json:"probe_id"`
}

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 JobsByStatus(status string) ([]Job, error)

func LastJob

func LastJob(status string, claimed bool) (*Job, error)

func LastJobLastUpdated

func LastJobLastUpdated(minutesAgo uint, status string) (*Job, error)

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

func (job *Job) MarkAsClaimed() (bool, error)

func (*Job) Update

func (job *Job) Update(data map[string]interface{}) error

type JobStatus

type JobStatus struct {
	BaseModel
	Name string
	Jobs []Job `gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}

func FindJobStatus

func FindJobStatus(name string) (*JobStatus, error)

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

func CurrentJobsStats() (*JobsStats, error)

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 FindProbe

func FindProbe(id interface{}) (*Probe, error)

func ProbesByStatus

func ProbesByStatus(status, order string) ([]Probe, error)

func (*Probe) IsPending

func (probe *Probe) IsPending() (bool, error)

func (*Probe) Save

func (probe *Probe) Save() error

func (*Probe) StatusFromLastResponse

func (probe *Probe) StatusFromLastResponse() string

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"`
	UnavailableProbeCount int64 `json:"unavailable_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 Role struct {
	BaseModel
	Name  string `json:"name"`
	Users []User `json:"users,omitempty" gorm:"constraint:OnUpdate:CASCADE,OnDelete:SET NULL;"`
}

func FindRole

func FindRole(name string) (*Role, error)

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 AllUsersWithProbeSettings added in v0.3.2

func AllUsersWithProbeSettings() ([]User, error)

func FindUserBy

func FindUserBy(field string, value interface{}) (*User, error)

func UsersWithActiveProbe

func UsersWithActiveProbe() ([]User, error)

func (*User) AddContact

func (user *User) AddContact(contact *Contact) error

func (*User) CancelAllPendingProbes

func (user *User) CancelAllPendingProbes() error

func (*User) DeleteContact

func (user *User) DeleteContact(id interface{}) error

func (*User) DisableLivlinessProbe

func (user *User) DisableLivlinessProbe() error

DisableProbe turns off probe for user & cancels all pending probes

func (*User) EmergencyContact

func (user *User) EmergencyContact() (*Contact, error)

func (*User) IsAdmin

func (user *User) IsAdmin() (bool, error)

func (*User) LastProbe

func (user *User) LastProbe() (*Probe, error)

func (*User) LoadContacts

func (user *User) LoadContacts() error

func (*User) LoadProbeSettings added in v0.3.2

func (user *User) LoadProbeSettings() error

func (*User) Update

func (user *User) Update(data map[string]interface{}) error

func (*User) UpdateContact

func (user *User) UpdateContact(contactID string, data map[string]interface{}) error

func (*User) UpdateProbSettings

func (user *User) UpdateProbSettings(data map[string]interface{}) error

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL