2020-03-04 10:29:00 +00:00
|
|
|
package incidents
|
|
|
|
|
2020-05-26 05:11:32 +00:00
|
|
|
import (
|
|
|
|
"github.com/statping/statping/database"
|
2020-08-10 03:10:37 +00:00
|
|
|
"github.com/statping/statping/types/errors"
|
2020-06-16 11:02:14 +00:00
|
|
|
"github.com/statping/statping/types/metrics"
|
2020-05-26 05:11:32 +00:00
|
|
|
"github.com/statping/statping/utils"
|
|
|
|
)
|
2020-03-04 10:29:00 +00:00
|
|
|
|
2020-03-13 04:06:06 +00:00
|
|
|
var (
|
|
|
|
db database.Database
|
|
|
|
dbUpdate database.Database
|
2020-05-26 05:11:32 +00:00
|
|
|
log = utils.Log.WithField("type", "service")
|
2020-03-13 04:06:06 +00:00
|
|
|
)
|
2020-03-10 05:24:35 +00:00
|
|
|
|
|
|
|
func SetDB(database database.Database) {
|
|
|
|
db = database.Model(&Incident{})
|
2020-03-13 04:06:06 +00:00
|
|
|
dbUpdate = database.Model(&IncidentUpdate{})
|
2020-03-10 05:24:35 +00:00
|
|
|
}
|
|
|
|
|
2020-08-10 03:10:37 +00:00
|
|
|
func (i *Incident) Validate() error {
|
|
|
|
if i.Title == "" {
|
|
|
|
return errors.New("missing title")
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *Incident) BeforeUpdate() error {
|
|
|
|
return i.Validate()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *Incident) BeforeCreate() error {
|
|
|
|
return i.Validate()
|
|
|
|
}
|
|
|
|
|
2020-06-16 11:02:14 +00:00
|
|
|
func (i *Incident) AfterFind() {
|
2020-08-25 20:38:47 +00:00
|
|
|
db.Model(i).Related(&i.Updates).Order("id DESC")
|
2020-06-16 11:02:14 +00:00
|
|
|
metrics.Query("incident", "find")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *Incident) AfterCreate() {
|
|
|
|
metrics.Query("incident", "create")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *Incident) AfterUpdate() {
|
|
|
|
metrics.Query("incident", "update")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *Incident) AfterDelete() {
|
|
|
|
metrics.Query("incident", "delete")
|
|
|
|
}
|
|
|
|
|
2020-08-10 03:10:37 +00:00
|
|
|
func (i *IncidentUpdate) Validate() error {
|
|
|
|
if i.Message == "" {
|
|
|
|
return errors.New("missing incident update title")
|
|
|
|
}
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *IncidentUpdate) BeforeUpdate() error {
|
|
|
|
return i.Validate()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *IncidentUpdate) BeforeCreate() error {
|
|
|
|
return i.Validate()
|
|
|
|
}
|
|
|
|
|
2020-06-16 11:02:14 +00:00
|
|
|
func (i *IncidentUpdate) AfterFind() {
|
|
|
|
metrics.Query("incident_update", "find")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *IncidentUpdate) AfterCreate() {
|
|
|
|
metrics.Query("incident_update", "create")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *IncidentUpdate) AfterUpdate() {
|
|
|
|
metrics.Query("incident_update", "update")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *IncidentUpdate) AfterDelete() {
|
|
|
|
metrics.Query("incident_update", "delete")
|
|
|
|
}
|
|
|
|
|
2020-03-16 18:28:45 +00:00
|
|
|
func FindUpdate(uid int64) (*IncidentUpdate, error) {
|
|
|
|
var update IncidentUpdate
|
|
|
|
q := dbUpdate.Where("id = ?", uid).Find(&update)
|
|
|
|
return &update, q.Error()
|
|
|
|
}
|
|
|
|
|
2020-03-04 10:29:00 +00:00
|
|
|
func Find(id int64) (*Incident, error) {
|
2020-03-06 03:03:18 +00:00
|
|
|
var incident Incident
|
2020-03-10 05:24:35 +00:00
|
|
|
q := db.Where("id = ?", id).Find(&incident)
|
|
|
|
return &incident, q.Error()
|
2020-03-04 10:29:00 +00:00
|
|
|
}
|
|
|
|
|
2020-03-13 04:06:06 +00:00
|
|
|
func FindByService(id int64) []*Incident {
|
|
|
|
var incidents []*Incident
|
|
|
|
db.Where("service = ?", id).Find(&incidents)
|
|
|
|
return incidents
|
|
|
|
}
|
|
|
|
|
2020-03-04 10:29:00 +00:00
|
|
|
func All() []*Incident {
|
|
|
|
var incidents []*Incident
|
2020-03-10 05:24:35 +00:00
|
|
|
db.Find(&incidents)
|
2020-03-04 10:29:00 +00:00
|
|
|
return incidents
|
|
|
|
}
|
|
|
|
|
|
|
|
func (i *Incident) Create() error {
|
2020-07-20 11:58:13 +00:00
|
|
|
return db.Create(i).Error()
|
2020-03-04 10:29:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (i *Incident) Update() error {
|
2020-07-20 11:58:13 +00:00
|
|
|
return db.Update(i).Error()
|
2020-03-04 10:29:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (i *Incident) Delete() error {
|
2020-08-04 08:50:06 +00:00
|
|
|
for _, u := range i.Updates {
|
2020-07-23 22:05:10 +00:00
|
|
|
if err := u.Delete(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
2020-07-20 11:58:13 +00:00
|
|
|
return db.Delete(i).Error()
|
2020-03-04 10:29:00 +00:00
|
|
|
}
|