Add periodic bugle default check
This commit is contained in:
parent
fab55c21b9
commit
03db8d9296
3 changed files with 46 additions and 1 deletions
|
@ -9,6 +9,7 @@ import (
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/google/uuid"
|
"github.com/google/uuid"
|
||||||
|
@ -69,6 +70,8 @@ type Client struct {
|
||||||
disconnecting bool
|
disconnecting bool
|
||||||
|
|
||||||
pingShortCircuit chan struct{}
|
pingShortCircuit chan struct{}
|
||||||
|
nextBugleDefaultCheck time.Time
|
||||||
|
nextBugleDefaultCheckLock sync.Mutex
|
||||||
|
|
||||||
recentUpdates [8]updateDedupItem
|
recentUpdates [8]updateDedupItem
|
||||||
recentUpdatesPtr int
|
recentUpdatesPtr int
|
||||||
|
@ -153,6 +156,7 @@ func (c *Client) Connect() error {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("failed to refresh auth token: %w", err)
|
return fmt.Errorf("failed to refresh auth token: %w", err)
|
||||||
}
|
}
|
||||||
|
c.bumpNextBugleDefaultCheck(10 * time.Minute)
|
||||||
|
|
||||||
//webEncryptionKeyResponse, err := c.GetWebEncryptionKey()
|
//webEncryptionKeyResponse, err := c.GetWebEncryptionKey()
|
||||||
//if err != nil {
|
//if err != nil {
|
||||||
|
|
|
@ -214,6 +214,7 @@ func (c *Client) handleUpdatesEvent(msg *IncomingRPCMessage) {
|
||||||
c.triggerEvent(&events.GaiaLoggedOut{})
|
c.triggerEvent(&events.GaiaLoggedOut{})
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
c.bumpNextBugleDefaultCheck(DefaultBugleDefaultCheckInterval)
|
||||||
data, ok := msg.DecryptedMessage.(*gmproto.UpdateEvents)
|
data, ok := msg.DecryptedMessage.(*gmproto.UpdateEvents)
|
||||||
if !ok {
|
if !ok {
|
||||||
c.Logger.Error().
|
c.Logger.Error().
|
||||||
|
|
|
@ -183,6 +183,8 @@ func (dp *dittoPinger) Ping(pingID uint64, timeout time.Duration, timeoutCount i
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const DefaultBugleDefaultCheckInterval = 55 * time.Minute
|
||||||
|
|
||||||
func (dp *dittoPinger) Loop() {
|
func (dp *dittoPinger) Loop() {
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
|
@ -197,8 +199,46 @@ func (dp *dittoPinger) Loop() {
|
||||||
case <-dp.stop:
|
case <-dp.stop:
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if time.Until(dp.client.getNextBugleDefaultCheck()) <= 0 {
|
||||||
|
go dp.BugleDefaultCheck()
|
||||||
|
dp.client.bumpNextBugleDefaultCheck(DefaultBugleDefaultCheckInterval)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dp *dittoPinger) BugleDefaultCheck() {
|
||||||
|
dp.log.Debug().Msg("Doing bugle default check")
|
||||||
|
start := time.Now()
|
||||||
|
resp, err := dp.client.IsBugleDefault()
|
||||||
|
if err != nil {
|
||||||
|
dp.log.Err(err).
|
||||||
|
Dur("check_duration", time.Since(start)).
|
||||||
|
Msg("Failed to do bugle default check")
|
||||||
|
} else {
|
||||||
|
lvl := zerolog.DebugLevel
|
||||||
|
if !resp.Success {
|
||||||
|
lvl = zerolog.WarnLevel
|
||||||
|
}
|
||||||
|
dp.log.WithLevel(lvl).
|
||||||
|
Dur("check_duration", time.Since(start)).
|
||||||
|
Bool("bugle_default", resp.Success).
|
||||||
|
Msg("Got bugle default check response")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) getNextBugleDefaultCheck() time.Time {
|
||||||
|
c.nextBugleDefaultCheckLock.Lock()
|
||||||
|
defer c.nextBugleDefaultCheckLock.Unlock()
|
||||||
|
return c.nextBugleDefaultCheck
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *Client) bumpNextBugleDefaultCheck(after time.Duration) {
|
||||||
|
c.nextBugleDefaultCheckLock.Lock()
|
||||||
|
if time.Until(c.nextBugleDefaultCheck) < after {
|
||||||
|
c.nextBugleDefaultCheck = time.Now().Add(after)
|
||||||
|
}
|
||||||
|
c.nextBugleDefaultCheckLock.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
func tryReadBody(resp io.ReadCloser) []byte {
|
func tryReadBody(resp io.ReadCloser) []byte {
|
||||||
data, _ := io.ReadAll(resp)
|
data, _ := io.ReadAll(resp)
|
||||||
|
|
Loading…
Reference in a new issue