diff --git a/db.go b/db.go index d3980f0..6b2ae5a 100644 --- a/db.go +++ b/db.go @@ -156,6 +156,28 @@ func getAllArtifactLogs(db *sql.DB, num int, ka config.Artifact) ( return } +func getLogByID(db *sql.DB, id int) (le logEntry, err error) { + stmt, err := db.Prepare("SELECT id, time, name, type, " + + "distro_type, distro_release, kernel_release, " + + "build_ok, run_ok, test_ok, " + + "build_output, run_output, test_output, " + + "kernel_panic, timeout_kill " + + "FROM log WHERE id=$1") + if err != nil { + return + } + defer stmt.Close() + + err = stmt.QueryRow(id).Scan(&le.ID, &le.Timestamp, + &le.Name, &le.Type, + &le.DistroType, &le.DistroRelease, &le.KernelRelease, + &le.Build.Ok, &le.Run.Ok, &le.Test.Ok, + &le.Build.Output, &le.Run.Output, &le.Test.Output, + &le.KernelPanic, &le.KilledByTimeout, + ) + return +} + func createSchema(db *sql.DB) (err error) { err = createLogTable(db) if err != nil { diff --git a/log.go b/log.go index 16802bf..889e23f 100644 --- a/log.go +++ b/log.go @@ -92,3 +92,42 @@ func logHandler(db *sql.DB, path string, num int, rate bool) (err error) { return } + +func logDumpHandler(db *sql.DB, id int) (err error) { + l, err := getLogByID(db, id) + if err != nil { + return + } + + fmt.Println("ID:", l.ID) + fmt.Println("Date:", l.Timestamp) + fmt.Println() + + fmt.Println("Type:", l.Type.String()) + fmt.Println("Name:", l.Name) + fmt.Println() + + fmt.Println("Distro:", l.DistroType.String(), l.DistroRelease) + fmt.Println("Kernel:", l.KernelRelease) + fmt.Println() + + fmt.Println("Build ok:", l.Build.Ok) + if l.Type == config.KernelModule { + fmt.Println("Insmod ok:", l.Run.Ok) + } + fmt.Println("Test ok:", l.Test.Ok) + fmt.Println() + + fmt.Printf("Build output:\n%s\n", l.Build.Output) + fmt.Println() + + if l.Type == config.KernelModule { + fmt.Printf("Insmod output:\n%s\n", l.Run.Output) + fmt.Println() + } + + fmt.Printf("Test output:\n%s\n", l.Test.Output) + fmt.Println() + + return +} diff --git a/main.go b/main.go index f3411d2..fa50628 100644 --- a/main.go +++ b/main.go @@ -158,9 +158,15 @@ func main() { bootstrapCommand := app.Command("bootstrap", "Create directories && download images") - logCommand := app.Command("log", "Query logs") - logNum := logCommand.Flag("num", "How much lines").Default("50").Int() - logRate := logCommand.Flag("rate", "Show artifact success rate").Bool() + logCommand := app.Command("log", "Logs") + + logQueryCommand := logCommand.Command("query", "Query logs") + logNum := logQueryCommand.Flag("num", "How much lines").Default("50").Int() + logRate := logQueryCommand.Flag("rate", "Show artifact success rate").Bool() + + logDumpCommand := logCommand.Command("dump", + "Show all info for log entry with ID") + logDumpID := logDumpCommand.Arg("ID", "").Required().Int() err = checkRequiredUtils() if err != nil { @@ -240,8 +246,10 @@ func main() { *dockerTimeout) case bootstrapCommand.FullCommand(): err = bootstrapHandler() - case logCommand.FullCommand(): + case logQueryCommand.FullCommand(): err = logHandler(db, *path, *logNum, *logRate) + case logDumpCommand.FullCommand(): + err = logDumpHandler(db, *logDumpID) } if err != nil {