statping/types/services/database.go

123 lines
2.1 KiB
Go
Raw Normal View History

2020-03-04 10:29:00 +00:00
package services
import (
2020-03-04 14:20:47 +00:00
"errors"
2020-03-04 10:29:00 +00:00
"fmt"
2020-03-09 18:17:55 +00:00
"github.com/statping/statping/database"
"github.com/statping/statping/utils"
2020-03-06 03:03:18 +00:00
"sort"
2020-03-04 10:29:00 +00:00
)
var log = utils.Log
2020-03-10 05:24:35 +00:00
var db database.Database
func SetDB(database database.Database) {
db = database.Model(&Service{})
2020-03-04 10:29:00 +00:00
}
func Find(id int64) (*Service, error) {
2020-03-04 14:20:47 +00:00
srv := allServices[id]
if srv == nil {
return nil, errors.New("service not found")
}
return srv, nil
2020-03-04 10:29:00 +00:00
}
2020-03-05 08:27:51 +00:00
func all() []*Service {
2020-03-04 10:29:00 +00:00
var services []*Service
2020-03-10 05:24:35 +00:00
db.Find(&services)
2020-03-04 10:29:00 +00:00
return services
}
2020-03-05 08:27:51 +00:00
func All() map[int64]*Service {
return allServices
}
2020-03-06 03:03:18 +00:00
func AllInOrder() []Service {
var services []Service
for _, service := range allServices {
2020-03-10 08:49:57 +00:00
service.UpdateStats()
2020-03-06 03:03:18 +00:00
services = append(services, *service)
}
sort.Sort(ServiceOrder(services))
return services
}
2020-03-04 10:29:00 +00:00
func (s *Service) Create() error {
2020-03-10 05:24:35 +00:00
err := db.Create(s)
2020-03-04 14:20:47 +00:00
if err.Error() != nil {
2020-03-04 10:29:00 +00:00
log.Errorln(fmt.Sprintf("Failed to create service %v #%v: %v", s.Name, s.Id, err))
2020-03-04 14:20:47 +00:00
return err.Error()
2020-03-04 10:29:00 +00:00
}
2020-03-10 05:24:35 +00:00
return nil
}
func (s *Service) AfterCreate() error {
2020-03-04 10:29:00 +00:00
allServices[s.Id] = s
return nil
}
func (s *Service) Update() error {
2020-03-10 05:24:35 +00:00
q := db.Update(s)
2020-03-04 10:29:00 +00:00
allServices[s.Id] = s
if !s.AllowNotifications.Bool {
//for _, n := range CoreApp.Notifications {
// notif := n.(notifier.Notifier).Select()
// notif.ResetUniqueQueue(fmt.Sprintf("service_%v", s.Id))
//}
}
s.Close()
s.SleepDuration = s.Duration()
2020-03-04 14:20:47 +00:00
go ServiceCheckQueue(allServices[s.Id], true)
2020-03-04 10:29:00 +00:00
//notifier.OnUpdatedService(s.Service)
2020-03-10 05:24:35 +00:00
return q.Error()
2020-03-04 10:29:00 +00:00
}
func (s *Service) Delete() error {
s.Close()
2020-03-10 05:24:35 +00:00
if err := s.DeleteFailures(); err != nil {
return err
}
if err := s.DeleteHits(); err != nil {
return err
}
2020-03-04 10:29:00 +00:00
delete(allServices, s.Id)
2020-03-10 05:24:35 +00:00
q := db.Model(&Service{}).Delete(s)
//notifier.OnDeletedService(s.Service)
return q.Error()
2020-03-04 10:29:00 +00:00
}
func (s *Service) DeleteFailures() error {
2020-03-10 05:24:35 +00:00
return s.AllFailures().DeleteAll()
}
func (s *Service) DeleteHits() error {
return s.AllHits().DeleteAll()
}
func (s *Service) DeleteCheckins() error {
for _, c := range s.Checkins() {
if err := c.Delete(); err != nil {
return err
}
}
return nil
}
//func (s *Service) AfterDelete() error {
//
// return nil
//}
func (s *Service) AfterFind() error {
return nil
2020-03-04 10:29:00 +00:00
}