From dc2f5af319fac0dfe05fddbe164190c9f92f5040 Mon Sep 17 00:00:00 2001 From: eliasyishak <42216813+eliasyishak@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:17:59 -0400 Subject: [PATCH 1/4] Update other call site where we write the session --- pkgs/unified_analytics/lib/src/session.dart | 3 ++- pkgs/unified_analytics/test/unified_analytics_test.dart | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/pkgs/unified_analytics/lib/src/session.dart b/pkgs/unified_analytics/lib/src/session.dart index d19b749c5e..5af1ba0687 100644 --- a/pkgs/unified_analytics/lib/src/session.dart +++ b/pkgs/unified_analytics/lib/src/session.dart @@ -49,7 +49,8 @@ class Session { if (now.difference(lastPingDateTime).inMinutes > kSessionDurationMinutes) { // Update the session file with the latest session id _sessionId = now.millisecondsSinceEpoch; - sessionFile.writeAsStringSync('{"session_id": $_sessionId}'); + sessionFile.writeAsStringSync( + '{"session_id": $_sessionId, "last_ping": $_sessionId}'); } else { // Update the last modified timestamp with the current timestamp so that // we can use it for the next _lastPing calculation diff --git a/pkgs/unified_analytics/test/unified_analytics_test.dart b/pkgs/unified_analytics/test/unified_analytics_test.dart index cf6711c874..55d20010c6 100644 --- a/pkgs/unified_analytics/test/unified_analytics_test.dart +++ b/pkgs/unified_analytics/test/unified_analytics_test.dart @@ -780,6 +780,8 @@ ${initialTool.label}=$dateStamp,$toolsMessageVersion start.millisecondsSinceEpoch); secondAnalytics.send(testEvent); + expect(sessionFile.readAsStringSync(), + '{"session_id": ${start.millisecondsSinceEpoch}, "last_ping": ${start.millisecondsSinceEpoch}}'); }); // Add time to the start time that is less than the duration @@ -817,6 +819,8 @@ ${initialTool.label}=$dateStamp,$toolsMessageVersion expect(sessionFile.lastModifiedSync().millisecondsSinceEpoch, end.millisecondsSinceEpoch, reason: 'The last modified value should have been updated'); + expect(sessionFile.readAsStringSync(), + '{"session_id": ${end.millisecondsSinceEpoch}, "last_ping": ${end.millisecondsSinceEpoch}}'); }); }); From 04062673da4d14ba63bb1f223da703a01ea66d04 Mon Sep 17 00:00:00 2001 From: eliasyishak <42216813+eliasyishak@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:19:44 -0400 Subject: [PATCH 2/4] Correct spelling for var --- pkgs/unified_analytics/lib/src/analytics.dart | 2 +- pkgs/unified_analytics/lib/src/initializer.dart | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/pkgs/unified_analytics/lib/src/analytics.dart b/pkgs/unified_analytics/lib/src/analytics.dart index 0a28a40c66..9187d02a52 100644 --- a/pkgs/unified_analytics/lib/src/analytics.dart +++ b/pkgs/unified_analytics/lib/src/analytics.dart @@ -640,7 +640,7 @@ class AnalyticsImpl implements Analytics { // Recreate the session and client id file; no need to // recreate the log file since it will only receives events // to persist from events sent - Initializer.createClientIdFile(clientFile: _clientIdFile); + Initializer.createClientIdFile(clientIdFile: _clientIdFile); Initializer.createSessionFile(sessionFile: _sessionHandler.sessionFile); // Reread the client ID string so an empty string is not being diff --git a/pkgs/unified_analytics/lib/src/initializer.dart b/pkgs/unified_analytics/lib/src/initializer.dart index a9d78cfc62..a40864fe1f 100644 --- a/pkgs/unified_analytics/lib/src/initializer.dart +++ b/pkgs/unified_analytics/lib/src/initializer.dart @@ -35,9 +35,9 @@ class Initializer { /// Creates the text file that will contain the client ID /// which will be used across all related tools for analytics /// reporting in GA. - static void createClientIdFile({required File clientFile}) { - clientFile.createSync(recursive: true); - clientFile.writeAsStringSync(Uuid().generateV4()); + static void createClientIdFile({required File clientIdFile}) { + clientIdFile.createSync(recursive: true); + clientIdFile.writeAsStringSync(Uuid().generateV4()); } /// Creates the configuration file with the default message @@ -120,7 +120,7 @@ class Initializer { final clientFile = fs.file( p.join(homeDirectory.path, kDartToolDirectoryName, kClientIdFileName)); if (!clientFile.existsSync()) { - createClientIdFile(clientFile: clientFile); + createClientIdFile(clientIdFile: clientFile); } // Begin initialization checks for the session file From 0a28ad424462f069fb0dbeed6c3b12b719a26df5 Mon Sep 17 00:00:00 2001 From: eliasyishak <42216813+eliasyishak@users.noreply.github.com> Date: Thu, 14 Mar 2024 17:21:12 -0400 Subject: [PATCH 3/4] Prep for publish --- pkgs/unified_analytics/CHANGELOG.md | 4 ++++ pkgs/unified_analytics/lib/src/constants.dart | 2 +- pkgs/unified_analytics/pubspec.yaml | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pkgs/unified_analytics/CHANGELOG.md b/pkgs/unified_analytics/CHANGELOG.md index 6827643e3d..c89094b814 100644 --- a/pkgs/unified_analytics/CHANGELOG.md +++ b/pkgs/unified_analytics/CHANGELOG.md @@ -1,3 +1,7 @@ +## 5.8.8 + +- [Bug fix](https://github.com/dart-lang/tools/issues/252) rewrite the other call site for the session file + ## 5.8.7 - [Bug fix](https://github.com/dart-lang/tools/issues/252) to rewrite the `last_ping` key into the session json file diff --git a/pkgs/unified_analytics/lib/src/constants.dart b/pkgs/unified_analytics/lib/src/constants.dart index 9b0c72bfe8..9dd56812f3 100644 --- a/pkgs/unified_analytics/lib/src/constants.dart +++ b/pkgs/unified_analytics/lib/src/constants.dart @@ -82,7 +82,7 @@ const int kLogFileLength = 2500; const String kLogFileName = 'dart-flutter-telemetry.log'; /// The current version of the package, should be in line with pubspec version. -const String kPackageVersion = '5.8.7'; +const String kPackageVersion = '5.8.8'; /// The minimum length for a session. const int kSessionDurationMinutes = 30; diff --git a/pkgs/unified_analytics/pubspec.yaml b/pkgs/unified_analytics/pubspec.yaml index fa53caafb4..9788d8f13a 100644 --- a/pkgs/unified_analytics/pubspec.yaml +++ b/pkgs/unified_analytics/pubspec.yaml @@ -4,7 +4,7 @@ description: >- to Google Analytics. # When updating this, keep the version consistent with the changelog and the # value in lib/src/constants.dart. -version: 5.8.7 +version: 5.8.8 repository: https://github.com/dart-lang/tools/tree/main/pkgs/unified_analytics environment: From 561e61ee4632fdf3ef40074709e13807bb445d8f Mon Sep 17 00:00:00 2001 From: eliasyishak <42216813+eliasyishak@users.noreply.github.com> Date: Thu, 14 Mar 2024 22:06:59 -0400 Subject: [PATCH 4/4] Use a utility function to create session file --- pkgs/unified_analytics/lib/src/initializer.dart | 8 +------- pkgs/unified_analytics/lib/src/session.dart | 4 ++-- pkgs/unified_analytics/lib/src/utils.dart | 10 ++++++++++ 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/pkgs/unified_analytics/lib/src/initializer.dart b/pkgs/unified_analytics/lib/src/initializer.dart index a40864fe1f..a4d453a69c 100644 --- a/pkgs/unified_analytics/lib/src/initializer.dart +++ b/pkgs/unified_analytics/lib/src/initializer.dart @@ -82,14 +82,8 @@ class Initializer { required File sessionFile, DateTime? sessionIdOverride, }) { - final now = sessionIdOverride ?? clock.now(); sessionFile.createSync(recursive: true); - - // `last_ping` has been deprecated, remains included for backward - // compatibility - sessionFile - .writeAsStringSync('{"session_id": ${now.millisecondsSinceEpoch}, ' - '"last_ping": ${now.millisecondsSinceEpoch}}'); + writeSessionContents(sessionFile: sessionFile); } /// This will check that there is a client ID populated in diff --git a/pkgs/unified_analytics/lib/src/session.dart b/pkgs/unified_analytics/lib/src/session.dart index 5af1ba0687..540f1fdbd0 100644 --- a/pkgs/unified_analytics/lib/src/session.dart +++ b/pkgs/unified_analytics/lib/src/session.dart @@ -12,6 +12,7 @@ import 'constants.dart'; import 'error_handler.dart'; import 'event.dart'; import 'initializer.dart'; +import 'utils.dart'; class Session { final Directory homeDirectory; @@ -49,8 +50,7 @@ class Session { if (now.difference(lastPingDateTime).inMinutes > kSessionDurationMinutes) { // Update the session file with the latest session id _sessionId = now.millisecondsSinceEpoch; - sessionFile.writeAsStringSync( - '{"session_id": $_sessionId, "last_ping": $_sessionId}'); + writeSessionContents(sessionFile: sessionFile); } else { // Update the last modified timestamp with the current timestamp so that // we can use it for the next _lastPing calculation diff --git a/pkgs/unified_analytics/lib/src/utils.dart b/pkgs/unified_analytics/lib/src/utils.dart index 55b59f3502..7886c2f9f7 100644 --- a/pkgs/unified_analytics/lib/src/utils.dart +++ b/pkgs/unified_analytics/lib/src/utils.dart @@ -310,6 +310,16 @@ String truncateStringToLength(String str, int maxLength) { return str.substring(0, maxLength); } +/// Writes the JSON string payload to the provided [sessionFile]. +/// +/// The `last_ping` key:value pair has been deprecated, it remains included +/// for backward compatibility. +void writeSessionContents({required File sessionFile}) { + final now = clock.now(); + sessionFile.writeAsStringSync('{"session_id": ${now.millisecondsSinceEpoch}, ' + '"last_ping": ${now.millisecondsSinceEpoch}}'); +} + /// A UUID generator. /// /// This will generate unique IDs in the format: