Skip to content

Commit

Permalink
feat(BRIDGE-97): added repair button telemetry
Browse files Browse the repository at this point in the history
  • Loading branch information
ElectroNafta committed Jun 14, 2024
1 parent 56d4bfb commit 85a91c5
Show file tree
Hide file tree
Showing 4 changed files with 117 additions and 3 deletions.
2 changes: 1 addition & 1 deletion internal/bridge/bridge.go
Original file line number Diff line number Diff line change
Expand Up @@ -573,7 +573,7 @@ func (bridge *Bridge) Repair() {
wg.Add(1)
go func(userID string) {
defer wg.Done()
if err = bridgeUser.ResyncIMAP(); err != nil {
if err = bridgeUser.TriggerRepair(); err != nil {
logPkg.WithError(err).Error("Failed re-syncing IMAP for userID", userID)
}
}(userID)
Expand Down
43 changes: 43 additions & 0 deletions internal/telemetry/repair.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
// Copyright (c) 2024 Proton AG
//
// This file is part of Proton Mail Bridge.
//
// Proton Mail Bridge is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Proton Mail Bridge is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.

package telemetry

type RepairData struct {
MeasurementGroup string
Event string
Values map[string]string
Dimensions map[string]string
}

func NewRepairTriggerData() RepairData {
return RepairData{
MeasurementGroup: "bridge.any.repair",
Event: "repair_trigger",
Values: map[string]string{},
Dimensions: map[string]string{},
}
}

func NewRepairDeferredTriggerData() RepairData {
return RepairData{
MeasurementGroup: "bridge.any.repair",
Event: "repair_deferred_trigger",
Values: map[string]string{},
Dimensions: map[string]string{},
}
}
65 changes: 65 additions & 0 deletions internal/user/repair_telemetry.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
// Copyright (c) 2024 Proton AG
//
// This file is part of Proton Mail Bridge.
//
// Proton Mail Bridge is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Proton Mail Bridge is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Proton Mail Bridge. If not, see <https://www.gnu.org/licenses/>.

package user

import (
"context"
"encoding/json"

"github.com/ProtonMail/proton-bridge/v3/internal/telemetry"
)

func (user *User) SendRepairTrigger(ctx context.Context) {
if !user.IsTelemetryEnabled(ctx) {
return
}

triggerData := telemetry.NewRepairTriggerData()
data, err := json.Marshal(triggerData)
if err != nil {
user.log.WithError(err).Error("Failed to parse repair trigger data.")
return
}

if err := user.SendTelemetry(ctx, data); err != nil {
user.log.WithError(err).Error("Failed to send repair trigger event.")
return
}

user.log.Info("Repair trigger event successfully sent.")
}

func (user *User) SendRepairDeferredTrigger(ctx context.Context) {
if !user.IsTelemetryEnabled(ctx) {
return
}

deferredTriggerData := telemetry.NewRepairDeferredTriggerData()
data, err := json.Marshal(deferredTriggerData)
if err != nil {
user.log.WithError(err).Error("Failed to parse deferred repair trigger data.")
return
}

if err := user.SendTelemetry(ctx, data); err != nil {
user.log.WithError(err).Error("Failed to send deferred repair trigger event.")
return
}

user.log.Info("Deferred repair trigger event successfully sent.")
}
10 changes: 8 additions & 2 deletions internal/user/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -727,12 +727,18 @@ func (user *User) VerifyResyncAndExecute() {
user.log.WithError(err).Error("Failed to disable re-sync flag in user vault. UserID:", user.ID())
}

if err := user.ResyncIMAP(); err != nil {
user.SendRepairDeferredTrigger(context.Background())
if err := user.resyncIMAP(); err != nil {
user.log.WithError(err).Error("Failed re-syncing IMAP for userID", user.ID())
}
}
}

func (user *User) ResyncIMAP() error {
func (user *User) TriggerRepair() error {
user.SendRepairTrigger(context.Background())
return user.resyncIMAP()
}

func (user *User) resyncIMAP() error {
return user.imapService.Resync(context.Background())
}

0 comments on commit 85a91c5

Please sign in to comment.