Add analytics events for google login

This commit is contained in:
Tulir Asokan 2024-03-11 15:55:24 +02:00
parent 159bc453ec
commit ea507552b0
2 changed files with 17 additions and 4 deletions

View file

@ -501,7 +501,7 @@ Loop:
jsonResponse(w, http.StatusOK, LoginResponse{Status: "qr", Code: item.qr}) jsonResponse(w, http.StatusOK, LoginResponse{Status: "qr", Code: item.qr})
case item.err != nil: case item.err != nil:
log.Err(item.err).Msg("Got error in QR channel") log.Err(item.err).Msg("Got error in QR channel")
Analytics.Track(user.MXID, "$login_failure") Analytics.Track(user.MXID, "$login_failure", map[string]any{"mode": "qr"})
var resp LoginResponse var resp LoginResponse
switch { switch {
case errors.Is(item.err, ErrLoginTimeout): case errors.Is(item.err, ErrLoginTimeout):
@ -513,7 +513,7 @@ Loop:
jsonResponse(w, http.StatusOK, resp) jsonResponse(w, http.StatusOK, resp)
case item.success: case item.success:
log.Debug().Msg("Got pair success in QR channel") log.Debug().Msg("Got pair success in QR channel")
Analytics.Track(user.MXID, "$login_success") Analytics.Track(user.MXID, "$login_success", map[string]any{"mode": "qr"})
jsonResponse(w, http.StatusOK, LoginResponse{Status: "success"}) jsonResponse(w, http.StatusOK, LoginResponse{Status: "success"})
default: default:
log.Error().Any("item_data", item).Msg("Unknown item in QR channel") log.Error().Any("item_data", item).Msg("Unknown item in QR channel")

17
user.go
View file

@ -416,7 +416,7 @@ func (user *User) Login(maxAttempts int) (<-chan qrChannelItem, error) {
user.loginInProgress.Store(false) user.loginInProgress.Store(false)
return nil, fmt.Errorf("failed to connect to Google Messages: %w", err) return nil, fmt.Errorf("failed to connect to Google Messages: %w", err)
} }
Analytics.Track(user.MXID, "$login_start") Analytics.Track(user.MXID, "$login_start", map[string]any{"mode": "qr"})
ch := make(chan qrChannelItem, maxAttempts+2) ch := make(chan qrChannelItem, maxAttempts+2)
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
user.cancelLogin = cancel user.cancelLogin = cancel
@ -555,12 +555,25 @@ func (user *User) LoginGoogle(ctx context.Context, cookies map[string]string, em
authData := libgm.NewAuthData() authData := libgm.NewAuthData()
authData.Cookies = cookies authData.Cookies = cookies
user.createClient(authData) user.createClient(authData)
Analytics.Track(user.MXID, "$login_start") Analytics.Track(user.MXID, "$login_start", map[string]any{"mode": "google"})
err := user.Client.DoGaiaPairing(ctx, emojiCallback) err := user.Client.DoGaiaPairing(ctx, emojiCallback)
if err != nil { if err != nil {
user.unlockedDeleteConnection() user.unlockedDeleteConnection()
switch {
case errors.Is(err, libgm.ErrNoDevicesFound):
Analytics.Track(user.MXID, "$login_failure", map[string]any{"mode": "google", "error": "no devices"})
case errors.Is(err, libgm.ErrIncorrectEmoji):
Analytics.Track(user.MXID, "$login_failure", map[string]any{"mode": "google", "error": "incorrect emoji"})
case errors.Is(err, libgm.ErrPairingCancelled):
Analytics.Track(user.MXID, "$login_failure", map[string]any{"mode": "google", "error": "cancelled"})
case errors.Is(err, libgm.ErrPairingTimeout):
Analytics.Track(user.MXID, "$login_failure", map[string]any{"mode": "google", "error": "timeout"})
default:
Analytics.Track(user.MXID, "$login_failure", map[string]any{"mode": "google", "error": "unknown"})
}
return err return err
} }
Analytics.Track(user.MXID, "$login_success", map[string]any{"mode": "google"})
return nil return nil
} }