| // Copyright 2014 The Flutter 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:convert'; |
| import 'dart:io'; |
| |
| import 'package:args/args.dart'; |
| |
| import 'package:flutter_devicelab/framework/ab.dart'; |
| import 'package:flutter_devicelab/framework/utils.dart'; |
| |
| String kRawSummaryOpt = 'raw-summary'; |
| String kTabTableOpt = 'tsv-table'; |
| String kAsciiTableOpt = 'ascii-table'; |
| |
| void _usage(String error) { |
| stderr.writeln(error); |
| stderr.writeln('Usage:\n'); |
| stderr.writeln(_argParser.usage); |
| exitCode = 1; |
| } |
| |
| Future<void> main(List<String> rawArgs) async { |
| ArgResults args; |
| try { |
| args = _argParser.parse(rawArgs); |
| } on FormatException catch (error) { |
| _usage('${error.message}\n'); |
| return; |
| } |
| |
| final List<String> jsonFiles = args.rest.isNotEmpty ? args.rest : <String>[ 'ABresults.json' ]; |
| |
| for (final String filename in jsonFiles) { |
| final File file = File(filename); |
| if (!file.existsSync()) { |
| _usage('File "$filename" does not exist'); |
| return; |
| } |
| |
| ABTest test; |
| try { |
| test = ABTest.fromJsonMap( |
| const JsonDecoder().convert(await file.readAsString()) as Map<String, dynamic> |
| ); |
| } catch(error) { |
| _usage('Could not parse json file "$filename"'); |
| return; |
| } |
| |
| if (args[kRawSummaryOpt] as bool) { |
| section('Raw results for "$filename"'); |
| print(test.rawResults()); |
| } |
| if (args[kTabTableOpt] as bool) { |
| section('A/B comparison for "$filename"'); |
| print(test.printSummary()); |
| } |
| if (args[kAsciiTableOpt] as bool) { |
| section('Formatted summary for "$filename"'); |
| print(test.asciiSummary()); |
| } |
| } |
| } |
| |
| /// Command-line options for the `summarize.dart` command. |
| final ArgParser _argParser = ArgParser() |
| ..addFlag( |
| kAsciiTableOpt, |
| defaultsTo: true, |
| help: 'Prints the summary in a table formatted nicely for terminal output.', |
| ) |
| ..addFlag( |
| kTabTableOpt, |
| defaultsTo: true, |
| help: 'Prints the summary in a table with tabs for easy spreadsheet entry.', |
| ) |
| ..addFlag( |
| kRawSummaryOpt, |
| defaultsTo: true, |
| help: 'Prints all per-run data collected by the A/B test formatted with\n' |
| 'tabs for easy spreadsheet entry.', |
| ); |