| /* |
| * Copyright (C) 2016 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.bugreport; |
| |
| import com.android.bugreport.bugreport.Bugreport; |
| import com.android.bugreport.bugreport.BugreportParser; |
| import com.android.bugreport.html.Renderer; |
| import com.android.bugreport.inspector.Inspector; |
| import com.android.bugreport.logcat.LogcatParser; |
| import com.android.bugreport.monkey.MonkeyLogParser; |
| import com.android.bugreport.util.Lines; |
| |
| import java.io.BufferedReader; |
| import java.io.FileReader; |
| import java.io.IOException; |
| |
| /** |
| * Main entry point. |
| */ |
| public class Main { |
| /** |
| * Main entry point. |
| */ |
| public static void main(String[] args) { |
| System.exit(run(args)); |
| } |
| |
| /** |
| * Parse the args and run it. |
| * |
| * @return the process exit code. |
| */ |
| public static int run(String[] args) { |
| // Parse args |
| final Options options = Options.parseArgs(args); |
| if (options.errorIndex >= 0) { |
| return usage(); |
| } |
| |
| // Run |
| return run(options); |
| } |
| |
| /** |
| * Prints the usage message to stderr and returns 1. |
| */ |
| private static int usage() { |
| System.err.println("usage: bugreport --monkey MONKEYLOG --html HTML --logcat SYSTEMLOG" |
| + " BUGREPORT\n"); |
| return 1; |
| } |
| |
| /** |
| * Run the tool with the given files. |
| * |
| * @return the process exit code. |
| */ |
| public static int run(Options options) { |
| Bugreport bugreport = null; |
| |
| // Parse bugreport file |
| try { |
| final BugreportParser parser = new BugreportParser(); |
| bugreport = parser.parse(Lines.readLines(options.bugreport)); |
| } catch (IOException ex) { |
| System.err.println("Error reading monkey file: " + options.bugreport); |
| System.err.println("Error: " + ex.getMessage()); |
| return 1; |
| } |
| |
| // Also parse the monkey log if we have one. That parser will merge |
| // into the Bugreport we already parsed. |
| if (options.monkey != null) { |
| try { |
| final MonkeyLogParser parser = new MonkeyLogParser(); |
| parser.parse(bugreport, Lines.readLines(options.monkey)); |
| } catch (IOException ex) { |
| System.err.println("Error reading bugreport file: " + options.bugreport); |
| System.err.println("Error: " + ex.getMessage()); |
| return 1; |
| } |
| } |
| |
| // Also parse the logcat if we have one. That parser will merge |
| // into the Bugreport we already parsed. |
| if (options.logcat != null) { |
| try { |
| final LogcatParser parser = new LogcatParser(); |
| bugreport.logcat = parser.parse(Lines.readLines(options.logcat)); |
| } catch (IOException ex) { |
| System.err.println("Error reading bugreport file: " + options.bugreport); |
| System.err.println("Error: " + ex.getMessage()); |
| return 1; |
| } |
| } |
| |
| // Inspect the Failure and see if we can figure out what's going on. |
| // Fills in the additional fields in the Anr object. |
| Inspector.inspect(bugreport); |
| |
| // For now, since all we do is ANRs, just bail out if there wasn't one. |
| if (bugreport.anr == null) { |
| System.err.println("No anr!"); |
| return 0; |
| } |
| |
| // Write the html |
| try { |
| Renderer renderer = new Renderer(); |
| renderer.render(options.html, bugreport); |
| } catch (IOException ex) { |
| System.err.println("Error reading output file: " + options.html); |
| System.err.println("Error: " + ex.getMessage()); |
| return 1; |
| } |
| |
| return 0; |
| } |
| } |
| |