From f611290b530123ee2f0a3fda7c440d85dd080a30 Mon Sep 17 00:00:00 2001 From: Elias Yishak <42216813+eliasyishak@users.noreply.github.com> Date: Fri, 15 Mar 2024 09:32:35 -0400 Subject: [PATCH] Update other session file create callsite (#256) * Update other call site where we write the session * Correct spelling for var * Prep for publish * Use a utility function to create session file --- pkgs/unified_analytics/CHANGELOG.md | 4 ++++ pkgs/unified_analytics/lib/src/analytics.dart | 2 +- pkgs/unified_analytics/lib/src/constants.dart | 2 +- pkgs/unified_analytics/lib/src/initializer.dart | 16 +++++----------- pkgs/unified_analytics/lib/src/session.dart | 3 ++- pkgs/unified_analytics/lib/src/utils.dart | 10 ++++++++++ pkgs/unified_analytics/pubspec.yaml | 2 +- .../test/unified_analytics_test.dart | 4 ++++ 8 files changed, 28 insertions(+), 15 deletions(-) diff --git a/pkgs/unified_analytics/CHANGELOG.md b/pkgs/unified_analytics/CHANGELOG.md index 6827643e..c89094b8 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/analytics.dart b/pkgs/unified_analytics/lib/src/analytics.dart index 0a28a40c..9187d02a 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/constants.dart b/pkgs/unified_analytics/lib/src/constants.dart index 9b0c72bf..9dd56812 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/lib/src/initializer.dart b/pkgs/unified_analytics/lib/src/initializer.dart index a9d78cfc..a4d453a6 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 @@ -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 @@ -120,7 +114,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 diff --git a/pkgs/unified_analytics/lib/src/session.dart b/pkgs/unified_analytics/lib/src/session.dart index d19b749c..540f1fdb 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,7 +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}'); + 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 55b59f35..7886c2f9 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: diff --git a/pkgs/unified_analytics/pubspec.yaml b/pkgs/unified_analytics/pubspec.yaml index fa53caaf..9788d8f1 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: diff --git a/pkgs/unified_analytics/test/unified_analytics_test.dart b/pkgs/unified_analytics/test/unified_analytics_test.dart index cf6711c8..55d20010 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}}'); }); });