mirror of https://github.com/statping/statping
60 lines
1.2 KiB
Go
60 lines
1.2 KiB
Go
![]() |
package checkins
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
func (c *Checkin) Expected() time.Duration {
|
||
|
last := c.LastHit()
|
||
|
now := time.Now().UTC()
|
||
|
lastDir := now.Sub(last.CreatedAt)
|
||
|
sub := time.Duration(c.Period() - lastDir)
|
||
|
return sub
|
||
|
}
|
||
|
|
||
|
func (c *Checkin) Period() time.Duration {
|
||
|
duration, _ := time.ParseDuration(fmt.Sprintf("%vs", c.Interval))
|
||
|
return duration
|
||
|
}
|
||
|
|
||
|
// Grace will return the duration of the Checkin Grace Period (after service hasn't responded, wait a bit for a response)
|
||
|
func (c *Checkin) Grace() time.Duration {
|
||
|
duration, _ := time.ParseDuration(fmt.Sprintf("%vs", c.GracePeriod))
|
||
|
return duration
|
||
|
}
|
||
|
|
||
|
// Start will create a channel for the checkin checking go routine
|
||
|
func (c *Checkin) Start() {
|
||
|
c.Running = make(chan bool)
|
||
|
}
|
||
|
|
||
|
// Close will stop the checkin routine
|
||
|
func (c *Checkin) Close() {
|
||
|
if c.IsRunning() {
|
||
|
close(c.Running)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// IsRunning returns true if the checkin go routine is running
|
||
|
func (c *Checkin) IsRunning() bool {
|
||
|
if c.Running == nil {
|
||
|
return false
|
||
|
}
|
||
|
select {
|
||
|
case <-c.Running:
|
||
|
return false
|
||
|
default:
|
||
|
return true
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// String will return a Checkin API string
|
||
|
func (c *Checkin) String() string {
|
||
|
return c.ApiKey
|
||
|
}
|
||
|
|
||
|
func (c *Checkin) Link() string {
|
||
|
return fmt.Sprintf("%v/checkin/%v", "DOMAINHERE", c.ApiKey)
|
||
|
}
|