| // 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. | |
| package main | |
| import ( | |
| "bytes" | |
| "encoding/json" | |
| "flag" | |
| "fmt" | |
| "io/ioutil" | |
| "os" | |
| "go.fuchsia.dev/fuchsia/tools/testing/testparser" | |
| ) | |
| func usage() { | |
| fmt.Printf(`testparser [-file <path>] | |
| Reads test logs from either <path> or stdin, and writes a JSON formatted summary to stdout | |
| of any error messages parsed from the logs. | |
| `) | |
| } | |
| func indentJSON(jsonBytes []byte) ([]byte, error) { | |
| buffer := bytes.NewBuffer([]byte{}) | |
| err := json.Indent(buffer, jsonBytes, "", "\t") | |
| return buffer.Bytes(), err | |
| } | |
| func main() { | |
| var inputPath = flag.String("file", "", "Path to a file to be parsed. Optional; defaults to stdin.") | |
| flag.Usage = usage | |
| // Parse any global flags (e.g. those for glog) | |
| flag.Parse() | |
| var inputBytes []byte | |
| var err error | |
| if *inputPath != "" { | |
| inputBytes, err = ioutil.ReadFile(*inputPath) | |
| if err != nil { | |
| fmt.Fprintf(os.Stderr, "Error reading input path %s: %s\n", *inputPath, err) | |
| os.Exit(1) | |
| } | |
| } else { | |
| inputBytes, err = ioutil.ReadAll(os.Stdin) | |
| if err != nil { | |
| fmt.Fprintf(os.Stderr, "Error reading input: %s\n", err) | |
| os.Exit(1) | |
| } | |
| } | |
| result := testparser.Parse(inputBytes) | |
| jsonData, err := json.Marshal(result) | |
| if err != nil { | |
| fmt.Fprintf(os.Stderr, "Error marshaling JSON: %s\n", err) | |
| os.Exit(1) | |
| } | |
| indentedData, err := indentJSON(jsonData) | |
| if err != nil { | |
| fmt.Fprintf(os.Stderr, "Error indenting JSON: %s\n", err) | |
| os.Exit(1) | |
| } | |
| os.Stdout.Write(indentedData) | |
| } |