Generate markdown table statistics for tag
This commit is contained in:
		
							
								
								
									
										2
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								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
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										4
									
								
								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=
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										48
									
								
								log.go
									
									
									
									
									
								
							
							
						
						
									
										48
									
								
								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
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										5
									
								
								main.go
									
									
									
									
									
								
							
							
						
						
									
										5
									
								
								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 {
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user