Skip to content

Commit ac6409b

Browse files
authored
Swap crash reporting with unified analytics (#148525)
Fixes: flutter/flutter#147260 (this is a remake of flutter/flutter#147296; in hindsight I could have force-pushed there instead but �)
1 parent 4c35ab5 commit ac6409b

File tree

3 files changed

+27
-23
lines changed

3 files changed

+27
-23
lines changed

packages/flutter_tools/lib/runner.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,10 @@ Future<int> _handleToolError(
201201
globals.analytics.send(Event.exception(exception: error.runtimeType.toString()));
202202
await asyncGuard(() async {
203203
final CrashReportSender crashReportSender = CrashReportSender(
204-
usage: globals.flutterUsage,
205204
platform: globals.platform,
206205
logger: globals.logger,
207206
operatingSystemUtils: globals.os,
207+
analytics: globals.analytics,
208208
);
209209
await crashReportSender.sendReport(
210210
error: error,

packages/flutter_tools/lib/src/reporting/crash_reporting.dart

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import 'dart:async';
66

77
import 'package:file/file.dart';
88
import 'package:http/http.dart' as http;
9+
import 'package:unified_analytics/unified_analytics.dart';
910

1011
import '../base/file_system.dart';
1112
import '../base/io.dart';
@@ -15,7 +16,6 @@ import '../base/platform.dart';
1516
import '../doctor.dart';
1617
import '../project.dart';
1718
import 'github_template.dart';
18-
import 'reporting.dart';
1919

2020
/// Tells crash backend that the error is from the Flutter CLI.
2121
const String _kProductId = 'Flutter_Tools';
@@ -105,21 +105,21 @@ class CrashReporter {
105105
class CrashReportSender {
106106
CrashReportSender({
107107
http.Client? client,
108-
required Usage usage,
109108
required Platform platform,
110109
required Logger logger,
111110
required OperatingSystemUtils operatingSystemUtils,
111+
required Analytics analytics,
112112
}) : _client = client ?? http.Client(),
113-
_usage = usage,
114113
_platform = platform,
115114
_logger = logger,
116-
_operatingSystemUtils = operatingSystemUtils;
115+
_operatingSystemUtils = operatingSystemUtils,
116+
_analytics = analytics;
117117

118118
final http.Client _client;
119-
final Usage _usage;
120119
final Platform _platform;
121120
final Logger _logger;
122121
final OperatingSystemUtils _operatingSystemUtils;
122+
final Analytics _analytics;
123123

124124
bool _crashReportSent = false;
125125

@@ -154,7 +154,7 @@ class CrashReportSender {
154154
final String flutterVersion = getFlutterVersion();
155155

156156
// We don't need to report exceptions happening on user branches
157-
if (_usage.suppressAnalytics || RegExp(r'^\[user-branch\]\/').hasMatch(flutterVersion)) {
157+
if (!_analytics.okToSend || RegExp(r'^\[user-branch\]\/').hasMatch(flutterVersion)) {
158158
return;
159159
}
160160

@@ -168,7 +168,7 @@ class CrashReportSender {
168168
);
169169

170170
final http.MultipartRequest req = http.MultipartRequest('POST', uri);
171-
req.fields['uuid'] = _usage.clientId;
171+
req.fields['uuid'] = _analytics.clientId;
172172
req.fields['product'] = _kProductId;
173173
req.fields['version'] = flutterVersion;
174174
req.fields['osName'] = _platform.operatingSystem;

packages/flutter_tools/test/general.shard/crash_reporting_test.dart

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,30 @@ import 'package:flutter_tools/src/base/platform.dart';
1313
import 'package:flutter_tools/src/doctor.dart';
1414
import 'package:flutter_tools/src/project.dart';
1515
import 'package:flutter_tools/src/reporting/crash_reporting.dart';
16-
import 'package:flutter_tools/src/reporting/reporting.dart';
1716
import 'package:http/http.dart';
1817
import 'package:http/testing.dart';
1918
import 'package:test/fake.dart';
19+
import 'package:unified_analytics/unified_analytics.dart';
2020

2121
import '../src/common.dart';
2222
import '../src/fake_process_manager.dart';
23+
import '../src/fakes.dart';
2324

2425
void main() {
2526
late BufferLogger logger;
26-
late FileSystem fs;
27-
late TestUsage testUsage;
27+
late MemoryFileSystem fs;
2828
late Platform platform;
2929
late OperatingSystemUtils operatingSystemUtils;
3030
late StackTrace stackTrace;
31+
late FakeAnalytics fakeAnalytics;
3132

3233
setUp(() async {
3334
logger = BufferLogger.test();
3435
fs = MemoryFileSystem.test();
35-
testUsage = TestUsage();
36+
fakeAnalytics = getInitializedFakeAnalyticsInstance(
37+
fs: fs,
38+
fakeFlutterVersion: FakeFlutterVersion(),
39+
);
3640

3741
platform = FakePlatform(environment: <String, String>{});
3842
operatingSystemUtils = OperatingSystemUtils(
@@ -63,7 +67,7 @@ void main() {
6367
'version': 'test-version',
6468
},
6569
));
66-
expect(crashInfo.fields?['uuid'], testUsage.clientId);
70+
expect(crashInfo.fields?['uuid'], fakeAnalytics.clientId);
6771
expect(crashInfo.fields?['product'], 'Flutter_Tools');
6872
expect(crashInfo.fields?['version'], 'test-version');
6973
expect(crashInfo.fields?['osName'], 'linux');
@@ -104,14 +108,14 @@ void main() {
104108
});
105109

106110
testWithoutContext('suppress analytics', () async {
107-
testUsage.suppressAnalytics = true;
111+
fakeAnalytics.suppressTelemetry();
108112

109113
final CrashReportSender crashReportSender = CrashReportSender(
110114
client: CrashingCrashReportSender(const SocketException('no internets')),
111-
usage: testUsage,
112115
platform: platform,
113116
logger: logger,
114117
operatingSystemUtils: operatingSystemUtils,
118+
analytics: fakeAnalytics,
115119
);
116120

117121
await crashReportSender.sendReport(
@@ -126,18 +130,18 @@ void main() {
126130

127131
group('allow analytics', () {
128132
setUp(() async {
129-
testUsage.suppressAnalytics = false;
133+
await fakeAnalytics.setTelemetry(true);
130134
});
131135

132136
testWithoutContext('should send crash reports', () async {
133137
final RequestInfo requestInfo = RequestInfo();
134138

135139
final CrashReportSender crashReportSender = CrashReportSender(
136140
client: MockCrashReportSender(requestInfo),
137-
usage: testUsage,
138141
platform: platform,
139142
logger: logger,
140143
operatingSystemUtils: operatingSystemUtils,
144+
analytics: fakeAnalytics,
141145
);
142146

143147
await crashReportSender.sendReport(
@@ -153,10 +157,10 @@ void main() {
153157
testWithoutContext('should print an explanatory message when there is a SocketException', () async {
154158
final CrashReportSender crashReportSender = CrashReportSender(
155159
client: CrashingCrashReportSender(const SocketException('no internets')),
156-
usage: testUsage,
157160
platform: platform,
158161
logger: logger,
159162
operatingSystemUtils: operatingSystemUtils,
163+
analytics: fakeAnalytics,
160164
);
161165

162166
await crashReportSender.sendReport(
@@ -172,10 +176,10 @@ void main() {
172176
testWithoutContext('should print an explanatory message when there is an HttpException', () async {
173177
final CrashReportSender crashReportSender = CrashReportSender(
174178
client: CrashingCrashReportSender(const HttpException('no internets')),
175-
usage: testUsage,
176179
platform: platform,
177180
logger: logger,
178181
operatingSystemUtils: operatingSystemUtils,
182+
analytics: fakeAnalytics,
179183
);
180184

181185
await crashReportSender.sendReport(
@@ -191,10 +195,10 @@ void main() {
191195
testWithoutContext('should print an explanatory message when there is a ClientException', () async {
192196
final CrashReportSender crashReportSender = CrashReportSender(
193197
client: CrashingCrashReportSender(const HttpException('no internets')),
194-
usage: testUsage,
195198
platform: platform,
196199
logger: logger,
197200
operatingSystemUtils: operatingSystemUtils,
201+
analytics: fakeAnalytics,
198202
);
199203

200204
await crashReportSender.sendReport(
@@ -212,10 +216,10 @@ void main() {
212216

213217
final CrashReportSender crashReportSender = CrashReportSender(
214218
client: MockCrashReportSender(requestInfo),
215-
usage: testUsage,
216219
platform: platform,
217220
logger: logger,
218221
operatingSystemUtils: operatingSystemUtils,
222+
analytics: fakeAnalytics,
219223
);
220224

221225
await crashReportSender.sendReport(
@@ -266,10 +270,10 @@ void main() {
266270

267271
final CrashReportSender crashReportSender = CrashReportSender(
268272
client: mockClient,
269-
usage: testUsage,
270273
platform: platform,
271274
logger: logger,
272275
operatingSystemUtils: operatingSystemUtils,
276+
analytics: fakeAnalytics,
273277
);
274278

275279
await crashReportSender.sendReport(
@@ -303,10 +307,10 @@ void main() {
303307

304308
final CrashReportSender crashReportSender = CrashReportSender(
305309
client: mockClient,
306-
usage: testUsage,
307310
platform: environmentPlatform,
308311
logger: logger,
309312
operatingSystemUtils: operatingSystemUtils,
313+
analytics: fakeAnalytics,
310314
);
311315

312316
await crashReportSender.sendReport(

0 commit comments

Comments
 (0)