blob: a3687cdea73d2971b693acb7fa49a5b258b5b4b7 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'dart:io';
import 'package:meta/meta.dart';
import 'package:fxutils/fxutils.dart';
const String analyticsScript = 'tools/devshell/lib/metrics_custom_report.sh';
/// Connection for `fx test` to log metrics to Google Analytics.
class AnalyticsReporter {
/// Object that knows the location of all relevant Fuchsia artifacts. Used
/// to turn relative paths into absolute paths.
final IFxEnv fxEnv;
/// Shell script able to send metrics to Google Analytics.
///
/// Likely `tools/devshell/lib/metrics_custom_report.sh`
final String reporterCmd;
AnalyticsReporter({
@required this.fxEnv,
this.reporterCmd = analyticsScript,
});
/// No-op constructor useful for tests or when certain flags are passed,
/// (e.g., `--dryrun`).
AnalyticsReporter.noop()
: reporterCmd = null,
fxEnv = null;
Future<void> report({
@required String subcommand,
@required String action,
String label,
}) async {
if (reporterCmd == null) {
return;
}
List<String> args = [
'${fxEnv.fuchsiaDir}/$reporterCmd',
subcommand,
action,
];
if (label != null && label != '') {
args.add(label);
}
ProcessResult result = await Process.run('bash', args);
if (result.exitCode != 0) {
print(
'Error ${result.exitCode} when running `bash ${args.join(' ')}`:'
'${result.stderr}',
);
}
}
}