50 lines
1023 B
Go
50 lines
1023 B
Go
package plugins
|
|
|
|
import (
|
|
"cwtch.im/cwtch/event"
|
|
"git.openprivacy.ca/openprivacy/log"
|
|
"time"
|
|
)
|
|
|
|
const heartbeatTickTime = 60 * time.Second
|
|
|
|
type heartbeat struct {
|
|
bus event.Manager
|
|
queue event.Queue
|
|
breakChan chan bool
|
|
}
|
|
|
|
func (hb *heartbeat) Start() {
|
|
go hb.run()
|
|
}
|
|
|
|
func (hb *heartbeat) Id() PluginID {
|
|
return HEARTBEAT
|
|
}
|
|
|
|
func (hb *heartbeat) Shutdown() {
|
|
hb.breakChan <- true
|
|
hb.queue.Shutdown()
|
|
}
|
|
|
|
func (hb *heartbeat) run() {
|
|
log.Debugf("running heartbeat trigger plugin")
|
|
for {
|
|
select {
|
|
case <-time.After(heartbeatTickTime):
|
|
// no fuss, just trigger the beat.
|
|
hb.bus.Publish(event.NewEvent(event.Heartbeat, map[event.Field]string{}))
|
|
continue
|
|
case <-hb.breakChan:
|
|
log.Debugf("shutting down heartbeat plugin")
|
|
return
|
|
}
|
|
}
|
|
}
|
|
|
|
// NewHeartbeat returns a Plugin that when started will trigger heartbeat checks on a regular interval
|
|
func NewHeartbeat(bus event.Manager) Plugin {
|
|
cr := &heartbeat{bus: bus, queue: event.NewQueue(), breakChan: make(chan bool, 1)}
|
|
return cr
|
|
}
|