2020-03-04 10:29:00 +00:00
|
|
|
package services
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2020-03-09 18:17:55 +00:00
|
|
|
"github.com/statping/statping/database"
|
2020-04-17 03:21:17 +00:00
|
|
|
"github.com/statping/statping/types/errors"
|
2020-06-16 11:02:14 +00:00
|
|
|
"github.com/statping/statping/types/metrics"
|
2020-03-09 18:17:55 +00:00
|
|
|
"github.com/statping/statping/utils"
|
2020-03-06 03:03:18 +00:00
|
|
|
"sort"
|
2020-03-04 10:29:00 +00:00
|
|
|
)
|
|
|
|
|
2020-04-04 00:28:09 +00:00
|
|
|
var (
|
2020-06-06 00:36:39 +00:00
|
|
|
db database.Database
|
|
|
|
log = utils.Log.WithField("type", "service")
|
|
|
|
allServices map[int64]*Service
|
2020-04-04 00:28:09 +00:00
|
|
|
)
|
2020-03-10 05:24:35 +00:00
|
|
|
|
2020-06-16 11:02:14 +00:00
|
|
|
func (s *Service) AfterFind() {
|
|
|
|
metrics.Query("service", "find")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *Service) AfterUpdate() {
|
|
|
|
metrics.Query("service", "update")
|
|
|
|
}
|
|
|
|
|
|
|
|
func (s *Service) AfterDelete() {
|
|
|
|
metrics.Query("service", "delete")
|
|
|
|
}
|
|
|
|
|
2020-06-06 00:36:39 +00:00
|
|
|
func init() {
|
|
|
|
allServices = make(map[int64]*Service)
|
|
|
|
}
|
|
|
|
|
|
|
|
func Services() map[int64]*Service {
|
|
|
|
return allServices
|
|
|
|
}
|
|
|
|
|
2020-03-10 05:24:35 +00:00
|
|
|
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 {
|
2020-04-17 03:21:17 +00:00
|
|
|
return nil, errors.Missing(&Service{}, id)
|
2020-03-04 14:20:47 +00:00
|
|
|
}
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2020-06-10 17:46:32 +00:00
|
|
|
func (s *Service) AfterCreate() error {
|
|
|
|
allServices[s.Id] = s
|
2020-06-16 11:02:14 +00:00
|
|
|
metrics.Query("service", "create")
|
2020-06-10 17:46:32 +00:00
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2020-03-04 10:29:00 +00:00
|
|
|
func (s *Service) Update() error {
|
2020-03-10 05:24:35 +00:00
|
|
|
q := db.Update(s)
|
2020-06-10 17:46:32 +00:00
|
|
|
allServices[s.Id] = s
|
|
|
|
s.Close()
|
|
|
|
s.SleepDuration = s.Duration()
|
|
|
|
go ServiceCheckQueue(allServices[s.Id], true)
|
2020-03-10 05:24:35 +00:00
|
|
|
return q.Error()
|
2020-03-04 10:29:00 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
func (s *Service) Delete() error {
|
2020-06-10 17:46:32 +00:00
|
|
|
s.Close()
|
|
|
|
if err := s.DeleteFailures(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
if err := s.DeleteHits(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2020-07-22 20:15:35 +00:00
|
|
|
if err := s.DeleteCheckins(); err != nil {
|
|
|
|
return err
|
|
|
|
}
|
2020-06-10 17:46:32 +00:00
|
|
|
delete(allServices, s.Id)
|
|
|
|
q := db.Model(&Service{}).Delete(s)
|
2020-03-10 05:24:35 +00:00
|
|
|
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
|
|
|
|
}
|