Shuffle analytics (#3185)
diff --git a/lib/src/solver/result.dart b/lib/src/solver/result.dart
index 8d4e891..cec4f75 100644
--- a/lib/src/solver/result.dart
+++ b/lib/src/solver/result.dart
@@ -134,31 +134,39 @@
final analytics = pubAnalytics.analytics;
if (analytics == null) return;
+ final dependenciesForAnalytics = <PackageId>[];
for (final package in packages) {
final source = package.source;
// Only send analytics for packages from pub.dev.
if (source is HostedSource &&
(runningFromTest ||
package.description['url'] == HostedSource.pubDevUrl)) {
- final dependencyKind = const {
- DependencyType.dev: 'dev',
- DependencyType.direct: 'direct',
- DependencyType.none: 'transitive'
- }[_root.dependencyType(package.name)]!;
- analytics.sendEvent(
- 'pub-get',
- package.name,
- label: package.version.canonicalizedVersion,
- value: 1,
- parameters: {
- 'ni': '1', // We consider a pub-get a non-interactive event.
- pubAnalytics.dependencyKindCustomDimensionName: dependencyKind,
- },
- );
- log.fine(
- 'Sending analytics hit for "pub-get" of ${package.name} version ${package.version} as dependency-kind $dependencyKind');
+ dependenciesForAnalytics.add(package);
}
}
+ // Randomize the dependencies, such that even if some analytics events don't
+ // get sent, the results will still be representative.
+ shuffle(dependenciesForAnalytics);
+ for (final package in dependenciesForAnalytics) {
+ final dependencyKind = const {
+ DependencyType.dev: 'dev',
+ DependencyType.direct: 'direct',
+ DependencyType.none: 'transitive'
+ }[_root.dependencyType(package.name)]!;
+ analytics.sendEvent(
+ 'pub-get',
+ package.name,
+ label: package.version.canonicalizedVersion,
+ value: 1,
+ parameters: {
+ 'ni': '1', // We consider a pub-get a non-interactive event.
+ pubAnalytics.dependencyKindCustomDimensionName: dependencyKind,
+ },
+ );
+ log.fine(
+ 'Sending analytics hit for "pub-get" of ${package.name} version ${package.version} as dependency-kind $dependencyKind');
+ }
+
analytics.sendTiming(
'resolution',
resolutionTime.inMilliseconds,