mirror of https://github.com/statping/statping
				
				
				
			
		
			
				
	
	
		
			100 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			100 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Go
		
	
	
| package services
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"github.com/statping/statping/database"
 | |
| 	"github.com/statping/statping/types/errors"
 | |
| 	"github.com/statping/statping/utils"
 | |
| 	"sort"
 | |
| )
 | |
| 
 | |
| var (
 | |
| 	db  database.Database
 | |
| 	log = utils.Log.WithField("type", "service")
 | |
| )
 | |
| 
 | |
| func SetDB(database database.Database) {
 | |
| 	db = database.Model(&Service{})
 | |
| }
 | |
| 
 | |
| func Find(id int64) (*Service, error) {
 | |
| 	srv := allServices[id]
 | |
| 	if srv == nil {
 | |
| 		return nil, errors.Missing(&Service{}, id)
 | |
| 	}
 | |
| 	return srv, nil
 | |
| }
 | |
| 
 | |
| func all() []*Service {
 | |
| 	var services []*Service
 | |
| 	db.Find(&services)
 | |
| 	return services
 | |
| }
 | |
| 
 | |
| func All() map[int64]*Service {
 | |
| 	return allServices
 | |
| }
 | |
| 
 | |
| func AllInOrder() []Service {
 | |
| 	var services []Service
 | |
| 	for _, service := range allServices {
 | |
| 		service.UpdateStats()
 | |
| 		services = append(services, *service)
 | |
| 	}
 | |
| 	sort.Sort(ServiceOrder(services))
 | |
| 	return services
 | |
| }
 | |
| 
 | |
| func (s *Service) Create() error {
 | |
| 	err := db.Create(s)
 | |
| 	if err.Error() != nil {
 | |
| 		log.Errorln(fmt.Sprintf("Failed to create service %v #%v: %v", s.Name, s.Id, err))
 | |
| 		return err.Error()
 | |
| 	}
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (s *Service) AfterCreate() error {
 | |
| 	allServices[s.Id] = s
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| func (s *Service) Update() error {
 | |
| 	q := db.Update(s)
 | |
| 	allServices[s.Id] = s
 | |
| 	s.Close()
 | |
| 	s.SleepDuration = s.Duration()
 | |
| 	go ServiceCheckQueue(allServices[s.Id], true)
 | |
| 	return q.Error()
 | |
| }
 | |
| 
 | |
| func (s *Service) Delete() error {
 | |
| 	s.Close()
 | |
| 	if err := s.DeleteFailures(); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	if err := s.DeleteHits(); err != nil {
 | |
| 		return err
 | |
| 	}
 | |
| 	delete(allServices, s.Id)
 | |
| 	q := db.Model(&Service{}).Delete(s)
 | |
| 	return q.Error()
 | |
| }
 | |
| 
 | |
| func (s *Service) DeleteFailures() error {
 | |
| 	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
 | |
| }
 |