mirror of
https://github.com/ProtonMail/proton-bridge.git
synced 2025-12-11 13:16:53 +00:00
feat(GODT-2553): Try to send telemetry every hour.
This commit is contained in:
@ -130,6 +130,9 @@ type Bridge struct {
|
|||||||
// goUpdate triggers a check/install of updates.
|
// goUpdate triggers a check/install of updates.
|
||||||
goUpdate func()
|
goUpdate func()
|
||||||
|
|
||||||
|
// goHeartbeat triggers a check/sending if heartbeat is needed.
|
||||||
|
goHeartbeat func()
|
||||||
|
|
||||||
uidValidityGenerator imap.UIDValidityGenerator
|
uidValidityGenerator imap.UIDValidityGenerator
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -30,6 +30,8 @@ import (
|
|||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const HeartbeatCheckInterval = time.Hour
|
||||||
|
|
||||||
func (bridge *Bridge) IsTelemetryAvailable() bool {
|
func (bridge *Bridge) IsTelemetryAvailable() bool {
|
||||||
var flag = true
|
var flag = true
|
||||||
if bridge.GetTelemetryDisabled() {
|
if bridge.GetTelemetryDisabled() {
|
||||||
@ -81,6 +83,13 @@ func (bridge *Bridge) SetLastHeartbeatSent(timestamp time.Time) error {
|
|||||||
func (bridge *Bridge) StartHeartbeat(manager telemetry.HeartbeatManager) {
|
func (bridge *Bridge) StartHeartbeat(manager telemetry.HeartbeatManager) {
|
||||||
bridge.heartbeat = telemetry.NewHeartbeat(manager, 1143, 1025, bridge.GetGluonCacheDir(), keychain.DefaultHelper)
|
bridge.heartbeat = telemetry.NewHeartbeat(manager, 1143, 1025, bridge.GetGluonCacheDir(), keychain.DefaultHelper)
|
||||||
|
|
||||||
|
// Check for heartbeat when triggered.
|
||||||
|
bridge.goHeartbeat = bridge.tasks.PeriodicOrTrigger(HeartbeatCheckInterval, 0, func(ctx context.Context) {
|
||||||
|
logrus.Debug("Checking for heartbeat")
|
||||||
|
|
||||||
|
bridge.heartbeat.TrySending()
|
||||||
|
})
|
||||||
|
|
||||||
bridge.heartbeat.SetRollout(bridge.GetUpdateRollout())
|
bridge.heartbeat.SetRollout(bridge.GetUpdateRollout())
|
||||||
bridge.heartbeat.SetAutoStart(bridge.GetAutostart())
|
bridge.heartbeat.SetAutoStart(bridge.GetAutostart())
|
||||||
bridge.heartbeat.SetAutoUpdate(bridge.GetAutoUpdate())
|
bridge.heartbeat.SetAutoUpdate(bridge.GetAutoUpdate())
|
||||||
@ -113,7 +122,7 @@ func (bridge *Bridge) StartHeartbeat(manager telemetry.HeartbeatManager) {
|
|||||||
|
|
||||||
// Do not try to send if there is no user yet.
|
// Do not try to send if there is no user yet.
|
||||||
if nbAccount > 0 {
|
if nbAccount > 0 {
|
||||||
bridge.heartbeat.TrySending()
|
defer bridge.goHeartbeat()
|
||||||
}
|
}
|
||||||
}, bridge.usersLock)
|
}, bridge.usersLock)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -305,7 +305,7 @@ func (bridge *Bridge) SetTelemetryDisabled(isDisabled bool) error {
|
|||||||
}
|
}
|
||||||
// If telemetry is re-enabled locally, try to send the heartbeat.
|
// If telemetry is re-enabled locally, try to send the heartbeat.
|
||||||
if !isDisabled {
|
if !isDisabled {
|
||||||
bridge.heartbeat.TrySending()
|
defer bridge.goHeartbeat()
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -572,7 +572,7 @@ func (bridge *Bridge) addUserWithVault(
|
|||||||
}, bridge.usersLock)
|
}, bridge.usersLock)
|
||||||
|
|
||||||
// As we need at least one user to send heartbeat, try to send it.
|
// As we need at least one user to send heartbeat, try to send it.
|
||||||
bridge.heartbeat.TrySending()
|
defer bridge.goHeartbeat()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -162,7 +162,7 @@ func (heartbeat *Heartbeat) TrySending() {
|
|||||||
}
|
}
|
||||||
heartbeat.log.WithFields(logrus.Fields{
|
heartbeat.log.WithFields(logrus.Fields{
|
||||||
"metrics": heartbeat.metrics,
|
"metrics": heartbeat.metrics,
|
||||||
}).Debug("Heartbeat sent")
|
}).Info("Heartbeat sent")
|
||||||
|
|
||||||
if err := heartbeat.manager.SetLastHeartbeatSent(now); err != nil {
|
if err := heartbeat.manager.SetLastHeartbeatSent(now); err != nil {
|
||||||
heartbeat.log.WithError(err).Warn("Cannot save last heartbeat sent to the vault.")
|
heartbeat.log.WithError(err).Warn("Cannot save last heartbeat sent to the vault.")
|
||||||
|
|||||||
@ -601,7 +601,7 @@ func (user *User) Close() {
|
|||||||
func (user *User) IsTelemetryEnabled(ctx context.Context) bool {
|
func (user *User) IsTelemetryEnabled(ctx context.Context) bool {
|
||||||
settings, err := user.client.GetUserSettings(ctx)
|
settings, err := user.client.GetUserSettings(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
user.log.WithError(err).Warn("Failed to retrieve API user Settings")
|
user.log.WithError(err).Error("Failed to retrieve API user Settings")
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
return settings.Telemetry == proton.SettingEnabled
|
return settings.Telemetry == proton.SettingEnabled
|
||||||
@ -611,22 +611,17 @@ func (user *User) IsTelemetryEnabled(ctx context.Context) bool {
|
|||||||
func (user *User) SendTelemetry(ctx context.Context, data []byte) error {
|
func (user *User) SendTelemetry(ctx context.Context, data []byte) error {
|
||||||
var req proton.SendStatsReq
|
var req proton.SendStatsReq
|
||||||
if err := json.Unmarshal(data, &req); err != nil {
|
if err := json.Unmarshal(data, &req); err != nil {
|
||||||
user.log.WithError(err).Warn("Failed to send telemetry.")
|
user.log.WithError(err).Error("Failed to build telemetry request.")
|
||||||
if err := user.reporter.ReportMessageWithContext("Failed to send telemetry.", reporter.Context{
|
if err := user.reporter.ReportMessageWithContext("Failed to build telemetry request.", reporter.Context{
|
||||||
"error": err,
|
"error": err,
|
||||||
}); err != nil {
|
}); err != nil {
|
||||||
logrus.WithError(err).Error("Failed to report telemetry sending error")
|
logrus.WithError(err).Error("Failed to report telemetry request build error")
|
||||||
}
|
}
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
err := user.client.SendDataEvent(ctx, req)
|
err := user.client.SendDataEvent(ctx, req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
user.log.WithError(err).Warn("Failed to send telemetry.")
|
user.log.WithError(err).Error("Failed to send telemetry.")
|
||||||
if err := user.reporter.ReportMessageWithContext("Failed to send telemetry.", reporter.Context{
|
|
||||||
"error": err,
|
|
||||||
}); err != nil {
|
|
||||||
logrus.WithError(err).Error("Failed to report telemetry sending error")
|
|
||||||
}
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
Reference in New Issue
Block a user