feat(GODT-2552): Send first heartbeat.

This commit is contained in:
Romain LE JEUNE
2023-04-18 16:52:15 +02:00
committed by Romain Le Jeune
parent 0f621d0aad
commit b250d49af8
8 changed files with 169 additions and 50 deletions

View File

@ -283,8 +283,6 @@ func newBridge(
updater: updater,
installCh: make(chan installJob),
heartbeat: telemetry.NewHeartbeat(1143, 1025, gluonCacheDir, keychain.DefaultHelper),
curVersion: curVersion,
newVersion: curVersion,
newVersionLock: safe.NewRWMutex(),
@ -309,6 +307,7 @@ func newBridge(
}
bridge.smtpServer = newSMTPServer(bridge, tlsConfig, logSMTP)
bridge.heartbeat = telemetry.NewHeartbeat(bridge, 1143, 1025, gluonCacheDir, keychain.DefaultHelper)
return bridge, nil
}

View File

@ -19,21 +19,61 @@ package bridge
import (
"context"
"encoding/json"
"time"
"github.com/ProtonMail/gluon/reporter"
"github.com/ProtonMail/proton-bridge/v3/internal/safe"
"github.com/ProtonMail/proton-bridge/v3/internal/telemetry"
"github.com/ProtonMail/proton-bridge/v3/internal/vault"
"github.com/sirupsen/logrus"
)
func (bridge *Bridge) ComputeTelemetry() bool {
var telemetry = true
func (bridge *Bridge) IsTelemetryAvailable() bool {
var flag = true
safe.RLock(func() {
for _, user := range bridge.users {
telemetry = telemetry && user.IsTelemetryEnabled(context.Background())
flag = flag && user.IsTelemetryEnabled(context.Background())
}
}, bridge.usersLock)
return telemetry
return flag
}
func (bridge *Bridge) SendHeartbeat(heartbeat *telemetry.HeartbeatData) bool {
data, err := json.Marshal(heartbeat)
if err != nil {
if err := bridge.reporter.ReportMessageWithContext("Cannot parse heartbeat data.", reporter.Context{
"error": err,
}); err != nil {
logrus.WithError(err).Error("Failed to parse heartbeat data.")
}
return false
}
var sent = false
safe.RLock(func() {
if len(bridge.users) > 0 {
for _, user := range bridge.users {
if err := user.SendTelemetry(context.Background(), data); err == nil {
sent = true
break
}
}
}
}, bridge.usersLock)
return sent
}
func (bridge *Bridge) GetLastHeartbeatSent() time.Time {
return bridge.vault.GetLastHeartbeatSent()
}
func (bridge *Bridge) SetLastHeartbeatSent(timestamp time.Time) error {
return bridge.vault.SetLastHeartbeatSent(timestamp)
}
func (bridge *Bridge) initHeartbeat() {
@ -64,4 +104,6 @@ func (bridge *Bridge) initHeartbeat() {
bridge.heartbeat.SetKeyChainPref(val)
}
bridge.heartbeat.SetPrevVersion(bridge.GetLastVersion().String())
bridge.heartbeat.StartSending()
}