From eb9ed9057120dae51121e91a34ba3680ec81efa8 Mon Sep 17 00:00:00 2001 From: Mikhail Klementev Date: Fri, 16 Aug 2019 20:11:35 +0000 Subject: [PATCH] Generate markdown table statistics for tag --- go.mod | 2 ++ go.sum | 4 ++++ log.go | 48 ++++++++++++++++++++++++++++++++++++++++++++---- main.go | 5 +++++ 4 files changed, 55 insertions(+), 4 deletions(-) diff --git a/go.mod b/go.mod index a7df120..3d6b674 100644 --- a/go.mod +++ b/go.mod @@ -7,9 +7,11 @@ replace code.dumpstack.io/tools/out-of-tree/config => ./config require ( github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc // indirect github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf // indirect + github.com/mattn/go-runewidth v0.0.4 // indirect github.com/mattn/go-sqlite3 v1.11.0 github.com/naoina/go-stringutil v0.1.0 // indirect github.com/naoina/toml v0.1.1 + github.com/olekukonko/tablewriter v0.0.1 github.com/otiai10/copy v1.0.1 github.com/remeh/sizedwaitgroup v0.0.0-20180822144253-5e7302b12cce github.com/zcalusic/sysinfo v0.0.0-20190429151633-fbadb57345c2 diff --git a/go.sum b/go.sum index 713ca15..0340555 100644 --- a/go.sum +++ b/go.sum @@ -3,12 +3,16 @@ github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5Vpd github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/mattn/go-runewidth v0.0.4 h1:2BvfKmzob6Bmd4YsL0zygOqfdFnK7GR4QL06Do4/p7Y= +github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.11.0 h1:LDdKkqtYlom37fkvqs8rMPFKAMe8+SgjbwZ6ex1/A/Q= github.com/mattn/go-sqlite3 v1.11.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.1 h1:PT/lllxVVN0gzzSqSlHEmP8MJB4MY2U7STGxiouV4X8= github.com/naoina/toml v0.1.1/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= +github.com/olekukonko/tablewriter v0.0.1 h1:b3iUnf1v+ppJiOfNX4yxxqfWKMQPZR5yoh8urCTFX88= +github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/otiai10/copy v1.0.1 h1:gtBjD8aq4nychvRZ2CyJvFWAw0aja+VHazDdruZKGZA= github.com/otiai10/copy v1.0.1/go.mod h1:8bMCJrAqOtN/d9oyh5HR7HhLQMvcGMpGdwRDYsfOCHc= github.com/otiai10/mint v1.2.3/go.mod h1:YnfyPNhBvnY8bW4SGQHCs/aAFhkgySlMZbrF5U0bOVw= diff --git a/log.go b/log.go index 92e028e..e07b74c 100644 --- a/log.go +++ b/log.go @@ -10,9 +10,12 @@ import ( "fmt" "log" "math" + "os" + + "github.com/olekukonko/tablewriter" + "gopkg.in/logrusorgru/aurora.v1" "code.dumpstack.io/tools/out-of-tree/config" - "gopkg.in/logrusorgru/aurora.v1" ) func logLogEntry(l logEntry) { @@ -146,7 +149,9 @@ type runstat struct { All, BuildOK, RunOK, TestOK, Timeout, Panic int } -func logJsonHandler(db *sql.DB, path, tag string) (err error) { +func getStats(db *sql.DB, path, tag string) ( + distros map[string]map[string]map[string]runstat, err error) { + var les []logEntry ka, kaErr := config.ReadArtifactConfig(path + "/.out-of-tree.toml") @@ -159,7 +164,7 @@ func logJsonHandler(db *sql.DB, path, tag string) (err error) { return } - distros := make(map[string]map[string]map[string]runstat) + distros = make(map[string]map[string]map[string]runstat) for _, l := range les { _, ok := distros[l.DistroType.String()] @@ -194,12 +199,47 @@ func logJsonHandler(db *sql.DB, path, tag string) (err error) { distros[l.DistroType.String()][l.DistroRelease][l.KernelRelease] = rs } + return +} + +func logJsonHandler(db *sql.DB, path, tag string) (err error) { + distros, err := getStats(db, path, tag) + if err != nil { + return + } + bytes, err := json.Marshal(&distros) if err != nil { return } fmt.Println(string(bytes)) - + return +} + +func logMarkdownHandler(db *sql.DB, path, tag string) (err error) { + distros, err := getStats(db, path, tag) + if err != nil { + return + } + + table := tablewriter.NewWriter(os.Stdout) + table.SetHeader([]string{"Distro", "Release", "Kernel", "Reliability"}) + table.SetBorders(tablewriter.Border{ + Left: true, Top: false, Right: true, Bottom: false}) + table.SetCenterSeparator("|") + + for distro, releases := range distros { + for release, kernels := range releases { + for kernel, stats := range kernels { + all := float64(stats.All) + ok := float64(stats.TestOK) + r := fmt.Sprintf("%6.02f%%", (ok/all)*100) + table.Append([]string{distro, release, kernel, r}) + } + } + } + + table.Render() return } diff --git a/main.go b/main.go index 912b0d5..633e615 100644 --- a/main.go +++ b/main.go @@ -198,6 +198,9 @@ func main() { logJsonCommand := logCommand.Command("json", "Generate json statistics") logJsonTag := logJsonCommand.Flag("tag", "Filter tag").Required().String() + logMarkdownCommand := logCommand.Command("markdown", "Generate markdown statistics") + logMarkdownTag := logMarkdownCommand.Flag("tag", "Filter tag").Required().String() + err = checkRequiredUtils() if err != nil { log.Fatalln(err) @@ -282,6 +285,8 @@ func main() { err = logDumpHandler(db, *logDumpID) case logJsonCommand.FullCommand(): err = logJsonHandler(db, *path, *logJsonTag) + case logMarkdownCommand.FullCommand(): + err = logMarkdownHandler(db, *path, *logMarkdownTag) } if err != nil {