statping/types/checkin.go

75 lines
2.5 KiB
Go
Raw Normal View History

2018-12-04 05:57:11 +00:00
// Statping
2018-09-18 22:02:27 +00:00
// Copyright (C) 2018. Hunter Long and the project contributors
// Written by Hunter Long <info@socialeck.com> and the project contributors
//
2018-12-04 04:17:29 +00:00
// https://github.com/hunterlong/statping
2018-09-18 22:02:27 +00:00
//
// The licenses for most software and other practical works are designed
// to take away your freedom to share and change the works. By contrast,
// the GNU General Public License is intended to guarantee your freedom to
// share and change all versions of a program--to make sure it remains free
// software for all its users.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
package types
import (
"time"
)
2018-10-07 05:04:06 +00:00
// Checkin struct will allow an application to send a recurring HTTP GET to confirm a service is online
type Checkin struct {
2018-12-06 19:03:55 +00:00
Id int64 `gorm:"primary_key;column:id" json:"id"`
ServiceId int64 `gorm:"index;column:service" json:"service_id"`
Name string `gorm:"column:name" json:"name"`
Interval int64 `gorm:"column:check_interval" json:"interval"`
GracePeriod int64 `gorm:"column:grace_period" json:"grace"`
ApiKey string `gorm:"column:api_key" json:"api_key"`
CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
UpdatedAt time.Time `gorm:"column:updated_at" json:"updated_at"`
Running chan bool `gorm:"-" json:"-"`
Failing bool `gorm:"-" json:"failing"`
LastHit time.Time `gorm:"-" json:"last_hit"`
Hits []*CheckinHit `gorm:"-" json:"hits"`
Failures []FailureInterface `gorm:"-" json:"failures"`
}
type CheckinInterface interface {
Select() *Checkin
}
2018-10-07 05:04:06 +00:00
// CheckinHit is a successful response from a Checkin
2018-10-02 07:26:49 +00:00
type CheckinHit struct {
Id int64 `gorm:"primary_key;column:id" json:"id"`
2018-12-06 19:03:55 +00:00
Checkin int64 `gorm:"index;column:checkin" json:"-"`
From string `gorm:"column:from_location" json:"from"`
2018-10-02 07:26:49 +00:00
CreatedAt time.Time `gorm:"column:created_at" json:"created_at"`
}
2018-10-07 22:38:56 +00:00
// Start will create a channel for the checkin checking go routine
func (s *Checkin) Start() {
s.Running = make(chan bool)
}
// Close will stop the checkin routine
func (s *Checkin) Close() {
if s.IsRunning() {
close(s.Running)
}
}
// IsRunning returns true if the checkin go routine is running
func (s *Checkin) IsRunning() bool {
if s.Running == nil {
return false
}
select {
case <-s.Running:
return false
default:
return true
}
}