allow per-command analytics suppression (#3919)

* allow per-command analytics suppression

* rev the usage package dep
This commit is contained in:
Devon Carew 2016-05-15 20:06:27 -07:00
parent 4db64ace96
commit 483922d15c
5 changed files with 32 additions and 10 deletions

View file

@ -9,11 +9,9 @@ import '../runner/flutter_command.dart';
class ConfigCommand extends FlutterCommand {
ConfigCommand() {
String usageStatus = flutterUsage.enabled ? 'enabled' : 'disabled';
argParser.addFlag('analytics',
negatable: true,
help: 'Enable or disable reporting anonymously tool usage statistics and crash reports.\n(currently $usageStatus)');
help: 'Enable or disable reporting anonymously tool usage statistics and crash reports.');
}
@override
@ -28,6 +26,9 @@ class ConfigCommand extends FlutterCommand {
@override
final List<String> aliases = <String>['configure'];
@override
String get usageFooter => 'Analytics reporting is currently ${flutterUsage.enabled ? 'enabled' : 'disabled'}.';
@override
bool get requiresProjectRoot => false;

View file

@ -44,6 +44,10 @@ class FlutterCommandRunner extends CommandRunner {
negatable: true,
hide: !verboseHelp,
help: 'Whether to use terminal colors.');
argParser.addFlag('suppress-analytics',
negatable: false,
hide: !verboseHelp,
help: 'Suppress analytics reporting when this command runs.');
String packagesHelp;
if (FileSystemEntity.isFileSync('.packages'))
@ -128,10 +132,13 @@ class FlutterCommandRunner extends CommandRunner {
if (globalResults.wasParsed('color'))
logger.supportsColor = globalResults['color'];
// we must set Cache.flutterRoot early because other features use it
// (e.g. enginePath's initialiser uses it)
// We must set Cache.flutterRoot early because other features use it (e.g.
// enginePath's initialiser uses it).
Cache.flutterRoot = path.normalize(path.absolute(globalResults['flutter-root']));
if (globalResults['suppress-analytics'])
flutterUsage.suppressAnalytics = true;
_checkFlutterCopy();
PackageMap.instance = new PackageMap(path.normalize(path.absolute(

View file

@ -44,35 +44,43 @@ class Usage {
Analytics _analytics;
bool _printedUsage = false;
bool _suppressAnalytics = false;
bool get isFirstRun => _analytics.firstRun;
bool get enabled => _analytics.enabled;
bool get suppressAnalytics => _suppressAnalytics || _analytics.firstRun;
/// Suppress analytics for this session.
set suppressAnalytics(bool value) {
_suppressAnalytics = value;
}
/// Enable or disable reporting analytics.
set enabled(bool value) {
_analytics.enabled = value;
}
void sendCommand(String command) {
if (!isFirstRun)
if (!suppressAnalytics)
_analytics.sendScreenView(command);
}
void sendEvent(String category, String parameter) {
if (!isFirstRun)
if (!suppressAnalytics)
_analytics.sendEvent(category, parameter);
}
UsageTimer startTimer(String event) {
if (isFirstRun)
if (suppressAnalytics)
return new _MockUsageTimer();
else
return new UsageTimer._(event, _analytics.startTimer(event, category: 'flutter'));
}
void sendException(dynamic exception, StackTrace trace) {
if (!isFirstRun)
if (!suppressAnalytics)
_analytics.sendException('${exception.runtimeType}; ${sanitizeStacktrace(trace)}');
}

View file

@ -21,7 +21,7 @@ dependencies:
path: ^1.3.0
pub_semver: ^1.0.0
stack_trace: ^1.4.0
usage: ^2.2.0+1
usage: ^2.2.1
web_socket_channel: ^1.0.0
xml: ^2.4.1
yaml: ^2.1.3

View file

@ -120,6 +120,12 @@ class MockUsage implements Usage {
@override
bool get isFirstRun => false;
@override
bool get suppressAnalytics => false;
@override
set suppressAnalytics(bool value) { }
@override
bool get enabled => true;