mirror of https://github.com/statping/statping
checkins
parent
8a08a9d14d
commit
a65455d099
|
@ -41,12 +41,12 @@ CheckinLoop:
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-c.Running:
|
case <-c.Running:
|
||||||
utils.Log(1, fmt.Sprintf("Stopping checkin routing: %v", c.Name))
|
utils.Log(1, fmt.Sprintf("Stopping checkin routine: %v", c.Name))
|
||||||
break CheckinLoop
|
break CheckinLoop
|
||||||
case <-time.After(reCheck):
|
case <-time.After(reCheck):
|
||||||
utils.Log(1, fmt.Sprintf("checking %v is expected at %v, checking every %v", c.Name, c.Expected(), c.Period()))
|
utils.Log(1, fmt.Sprintf("Checkin %v is expected at %v, checking every %v", c.Name, utils.FormatDuration(c.Expected()), utils.FormatDuration(c.Period())))
|
||||||
if c.Expected().Seconds() <= 0 {
|
if c.Expected().Seconds() <= 0 {
|
||||||
issue := fmt.Sprintf("checkin is failing, no request since %v", c.Last().CreatedAt)
|
issue := fmt.Sprintf("Checkin %v is failing, no request since %v", c.Name, c.Last().CreatedAt)
|
||||||
utils.Log(3, issue)
|
utils.Log(3, issue)
|
||||||
c.Service()
|
c.Service()
|
||||||
c.CreateFailure()
|
c.CreateFailure()
|
||||||
|
|
|
@ -22,10 +22,12 @@ import (
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ExampleNotifier is an example on how to use the Statup notifier struct
|
||||||
type ExampleNotifier struct {
|
type ExampleNotifier struct {
|
||||||
*Notification
|
*Notification
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// example is a example variable for a example notifier
|
||||||
var example = &ExampleNotifier{&Notification{
|
var example = &ExampleNotifier{&Notification{
|
||||||
Method: METHOD,
|
Method: METHOD,
|
||||||
Host: "http://exmaplehost.com",
|
Host: "http://exmaplehost.com",
|
||||||
|
@ -79,103 +81,103 @@ var example = &ExampleNotifier{&Notification{
|
||||||
}},
|
}},
|
||||||
}}
|
}}
|
||||||
|
|
||||||
// REQUIRED init() will install/load the notifier
|
// init will be ran when Statup is loaded, AddNotifier will add the notifier instance to the system
|
||||||
func init() {
|
func init() {
|
||||||
AddNotifier(example)
|
AddNotifier(example)
|
||||||
}
|
}
|
||||||
|
|
||||||
// REQUIRED
|
// Send is the main function to hold your notifier functionality
|
||||||
func (n *ExampleNotifier) Send(msg interface{}) error {
|
func (n *ExampleNotifier) Send(msg interface{}) error {
|
||||||
message := msg.(string)
|
message := msg.(string)
|
||||||
fmt.Printf("i received this string: %v\n", message)
|
fmt.Printf("i received this string: %v\n", message)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// REQUIRED
|
// Select is a required basic event for the Notifier interface
|
||||||
func (n *ExampleNotifier) Select() *Notification {
|
func (n *ExampleNotifier) Select() *Notification {
|
||||||
return n.Notification
|
return n.Notification
|
||||||
}
|
}
|
||||||
|
|
||||||
// REQUIRED
|
// OnSave is a required basic event for the Notifier interface
|
||||||
func (n *ExampleNotifier) OnSave() error {
|
func (n *ExampleNotifier) OnSave() error {
|
||||||
msg := fmt.Sprintf("received on save trigger")
|
msg := fmt.Sprintf("received on save trigger")
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
return errors.New("onsave triggered")
|
return errors.New("onsave triggered")
|
||||||
}
|
}
|
||||||
|
|
||||||
// REQUIRED - BASIC EVENT
|
// OnSuccess is a required basic event for the Notifier interface
|
||||||
func (n *ExampleNotifier) OnSuccess(s *types.Service) {
|
func (n *ExampleNotifier) OnSuccess(s *types.Service) {
|
||||||
msg := fmt.Sprintf("received a count trigger for service: %v\n", s.Name)
|
msg := fmt.Sprintf("received a count trigger for service: %v\n", s.Name)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// REQUIRED - BASIC EVENT
|
// OnFailure is a required basic event for the Notifier interface
|
||||||
func (n *ExampleNotifier) OnFailure(s *types.Service, f *types.Failure) {
|
func (n *ExampleNotifier) OnFailure(s *types.Service, f *types.Failure) {
|
||||||
msg := fmt.Sprintf("received a failure trigger for service: %v\n", s.Name)
|
msg := fmt.Sprintf("received a failure trigger for service: %v\n", s.Name)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL Test function before user saves
|
// OnTest is a option testing event for the Notifier interface
|
||||||
func (n *ExampleNotifier) OnTest() error {
|
func (n *ExampleNotifier) OnTest() error {
|
||||||
fmt.Printf("received a test trigger with form data: %v\n", n.Host)
|
fmt.Printf("received a test trigger with form data: %v\n", n.Host)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnNewService is a option event for new services
|
||||||
func (n *ExampleNotifier) OnNewService(s *types.Service) {
|
func (n *ExampleNotifier) OnNewService(s *types.Service) {
|
||||||
msg := fmt.Sprintf("received a new service trigger for service: %v\n", s.Name)
|
msg := fmt.Sprintf("received a new service trigger for service: %v\n", s.Name)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnUpdatedService is a option event for updated services
|
||||||
func (n *ExampleNotifier) OnUpdatedService(s *types.Service) {
|
func (n *ExampleNotifier) OnUpdatedService(s *types.Service) {
|
||||||
msg := fmt.Sprintf("received a update service trigger for service: %v\n", s.Name)
|
msg := fmt.Sprintf("received a update service trigger for service: %v\n", s.Name)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnDeletedService is a option event for deleted services
|
||||||
func (n *ExampleNotifier) OnDeletedService(s *types.Service) {
|
func (n *ExampleNotifier) OnDeletedService(s *types.Service) {
|
||||||
msg := fmt.Sprintf("received a delete service trigger for service: %v\n", s.Name)
|
msg := fmt.Sprintf("received a delete service trigger for service: %v\n", s.Name)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnNewUser is a option event for new users
|
||||||
func (n *ExampleNotifier) OnNewUser(s *types.User) {
|
func (n *ExampleNotifier) OnNewUser(s *types.User) {
|
||||||
msg := fmt.Sprintf("received a new user trigger for user: %v\n", s.Username)
|
msg := fmt.Sprintf("received a new user trigger for user: %v\n", s.Username)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnUpdatedUser is a option event for updated users
|
||||||
func (n *ExampleNotifier) OnUpdatedUser(s *types.User) {
|
func (n *ExampleNotifier) OnUpdatedUser(s *types.User) {
|
||||||
msg := fmt.Sprintf("received a updated user trigger for user: %v\n", s.Username)
|
msg := fmt.Sprintf("received a updated user trigger for user: %v\n", s.Username)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnDeletedUser is a option event for deleted users
|
||||||
func (n *ExampleNotifier) OnDeletedUser(s *types.User) {
|
func (n *ExampleNotifier) OnDeletedUser(s *types.User) {
|
||||||
msg := fmt.Sprintf("received a deleted user trigger for user: %v\n", s.Username)
|
msg := fmt.Sprintf("received a deleted user trigger for user: %v\n", s.Username)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnUpdatedCore is a option event when the settings are updated
|
||||||
func (n *ExampleNotifier) OnUpdatedCore(s *types.Core) {
|
func (n *ExampleNotifier) OnUpdatedCore(s *types.Core) {
|
||||||
msg := fmt.Sprintf("received a updated core trigger for core: %v\n", s.Name)
|
msg := fmt.Sprintf("received a updated core trigger for core: %v\n", s.Name)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnStart is triggered when statup has been started
|
||||||
func (n *ExampleNotifier) OnStart(s *types.Core) {
|
func (n *ExampleNotifier) OnStart(s *types.Core) {
|
||||||
msg := fmt.Sprintf("received a trigger on Statup boot: %v\n", s.Name)
|
msg := fmt.Sprintf("received a trigger on Statup boot: %v\n", s.Name)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnNewNotifier is triggered when a new notifier has initialized
|
||||||
func (n *ExampleNotifier) OnNewNotifier(s *Notification) {
|
func (n *ExampleNotifier) OnNewNotifier(s *Notification) {
|
||||||
msg := fmt.Sprintf("received a new notifier trigger for notifier: %v\n", s.Method)
|
msg := fmt.Sprintf("received a new notifier trigger for notifier: %v\n", s.Method)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
}
|
}
|
||||||
|
|
||||||
// OPTIONAL
|
// OnUpdatedNotifier is triggered when a notifier has been updated
|
||||||
func (n *ExampleNotifier) OnUpdatedNotifier(s *Notification) {
|
func (n *ExampleNotifier) OnUpdatedNotifier(s *Notification) {
|
||||||
msg := fmt.Sprintf("received a update notifier trigger for notifier: %v\n", s.Method)
|
msg := fmt.Sprintf("received a update notifier trigger for notifier: %v\n", s.Method)
|
||||||
n.AddQueue(msg)
|
n.AddQueue(msg)
|
||||||
|
|
|
@ -261,6 +261,10 @@ func checkinHitHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
From: ip,
|
From: ip,
|
||||||
CreatedAt: time.Now().UTC(),
|
CreatedAt: time.Now().UTC(),
|
||||||
})
|
})
|
||||||
|
if checkin.Last() == nil {
|
||||||
|
checkin.Start()
|
||||||
|
go checkin.Routine()
|
||||||
|
}
|
||||||
checkinHit.Create()
|
checkinHit.Create()
|
||||||
w.Write([]byte("ok"))
|
w.Write([]byte("ok"))
|
||||||
w.WriteHeader(http.StatusOK)
|
w.WriteHeader(http.StatusOK)
|
||||||
|
|
|
@ -17,6 +17,7 @@ package utils
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"net/http"
|
"net/http"
|
||||||
"testing"
|
"testing"
|
||||||
|
@ -55,6 +56,13 @@ func TestDurationReadable(t *testing.T) {
|
||||||
assert.Equal(t, "25 minutes", readable)
|
assert.Equal(t, "25 minutes", readable)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExampleDurationReadable() {
|
||||||
|
dur, _ := time.ParseDuration("25m")
|
||||||
|
readable := DurationReadable(dur)
|
||||||
|
fmt.Print(readable)
|
||||||
|
// Output: 25 minutes
|
||||||
|
}
|
||||||
|
|
||||||
func TestLog(t *testing.T) {
|
func TestLog(t *testing.T) {
|
||||||
assert.Nil(t, Log(0, errors.New("this is a 0 level error")))
|
assert.Nil(t, Log(0, errors.New("this is a 0 level error")))
|
||||||
assert.Nil(t, Log(1, errors.New("this is a 1 level error")))
|
assert.Nil(t, Log(1, errors.New("this is a 1 level error")))
|
||||||
|
@ -87,14 +95,26 @@ func TestLogHTTP(t *testing.T) {
|
||||||
assert.NotEmpty(t, Http(req))
|
assert.NotEmpty(t, Http(req))
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestIntString(t *testing.T) {
|
func TestToString(t *testing.T) {
|
||||||
assert.Equal(t, "1", ToString(1))
|
assert.Equal(t, "1", ToString(1))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExampleToString() {
|
||||||
|
amount := 42
|
||||||
|
fmt.Print(ToString(amount))
|
||||||
|
// Output: 42
|
||||||
|
}
|
||||||
|
|
||||||
func TestStringInt(t *testing.T) {
|
func TestStringInt(t *testing.T) {
|
||||||
assert.Equal(t, int64(1), StringInt("1"))
|
assert.Equal(t, int64(1), StringInt("1"))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ExampleStringInt() {
|
||||||
|
amount := "42"
|
||||||
|
fmt.Print(StringInt(amount))
|
||||||
|
// Output: 42
|
||||||
|
}
|
||||||
|
|
||||||
func TestDbTime(t *testing.T) {
|
func TestDbTime(t *testing.T) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue