mirror of https://github.com/statping/statping
				
				
				
			
		
			
				
	
	
		
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
			
		
		
	
	
			61 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Go
		
	
	
| package checkins
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"github.com/statping/statping/types/failures"
 | |
| 	"github.com/statping/statping/utils"
 | |
| 	"time"
 | |
| )
 | |
| 
 | |
| var log = utils.Log.WithField("type", "checkin")
 | |
| 
 | |
| // RecheckCheckinFailure will check if a Service Checkin has been reported yet
 | |
| func (c *Checkin) RecheckCheckinFailure(guard chan struct{}) {
 | |
| 	between := utils.Now().Sub(utils.Now()).Seconds()
 | |
| 	if between > float64(c.Interval) {
 | |
| 		fmt.Println("rechecking every 15 seconds!")
 | |
| 		time.Sleep(15 * time.Second)
 | |
| 		guard <- struct{}{}
 | |
| 		c.RecheckCheckinFailure(guard)
 | |
| 	} else {
 | |
| 		fmt.Println("i recovered!!")
 | |
| 	}
 | |
| 	<-guard
 | |
| }
 | |
| 
 | |
| // Routine for checking if the last Checkin was within its interval
 | |
| func (c *Checkin) CheckinRoutine() {
 | |
| 	lastHit := c.LastHit()
 | |
| 	if lastHit == nil {
 | |
| 		return
 | |
| 	}
 | |
| 	reCheck := c.Period()
 | |
| CheckinLoop:
 | |
| 	for {
 | |
| 		select {
 | |
| 		case <-c.Running:
 | |
| 			log.Infoln(fmt.Sprintf("Stopping checkin routine: %v", c.Name))
 | |
| 			c.Failing = false
 | |
| 			break CheckinLoop
 | |
| 		case <-time.After(reCheck):
 | |
| 			log.Infoln(fmt.Sprintf("Checkin '%s' expects a request every %v", c.Name, utils.FormatDuration(c.Period())))
 | |
| 			if c.Expected() <= 0 {
 | |
| 				issue := fmt.Sprintf("Checkin '%s' is failing, no request since %v", c.Name, lastHit.CreatedAt)
 | |
| 				//log.Errorln(issue)
 | |
| 
 | |
| 				fail := &failures.Failure{
 | |
| 					Issue:    issue,
 | |
| 					Method:   "checkin",
 | |
| 					Service:  c.ServiceId,
 | |
| 					Checkin:  c.Id,
 | |
| 					PingTime: c.Expected().Milliseconds(),
 | |
| 				}
 | |
| 
 | |
| 				c.CreateFailure(fail)
 | |
| 			}
 | |
| 			reCheck = c.Period()
 | |
| 		}
 | |
| 		continue
 | |
| 	}
 | |
| }
 |