90 lines
1.7 KiB
Go
90 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"html/template"
|
|
"io/ioutil"
|
|
"os"
|
|
"path"
|
|
"sort"
|
|
"strings"
|
|
|
|
report "github.com/thebaer/life-report"
|
|
)
|
|
|
|
func main() {
|
|
if len(os.Args) < 2 {
|
|
fmt.Print(`usage: lifereport [directory]
|
|
directory: path to a folder of reports
|
|
`)
|
|
return
|
|
}
|
|
|
|
dir := os.Args[1]
|
|
files, err := ioutil.ReadDir(dir)
|
|
if err != nil {
|
|
fmt.Print("Unable to read directory: %v\n", err)
|
|
return
|
|
}
|
|
|
|
t, err := template.ParseFiles("../report.tmpl")
|
|
if err != nil {
|
|
fmt.Printf("Unable to parse template: %v\n", err)
|
|
return
|
|
}
|
|
|
|
var reports []report.Report
|
|
|
|
for _, file := range files {
|
|
if file.Name() == "template.json" || !strings.HasSuffix(file.Name(), ".json") {
|
|
continue
|
|
}
|
|
|
|
f, err := os.Open(path.Join(dir, file.Name()))
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stdout, "Unable to open file: %v\n", err)
|
|
continue
|
|
}
|
|
if strings.HasPrefix(file.Name(), ".") {
|
|
f.Close()
|
|
continue
|
|
}
|
|
|
|
r, err := report.ParseReport(f)
|
|
if err != nil {
|
|
f.Close()
|
|
fmt.Fprintf(os.Stdout, "Unable to parse report %s: %v\n", file.Name(), err)
|
|
continue
|
|
}
|
|
f.Close()
|
|
|
|
outName := strings.Replace(file.Name(), ".json", ".html", 1)
|
|
o, err := os.Create(path.Join(dir, outName))
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stdout, "Unable to write report %s: %v\n", outName, err)
|
|
continue
|
|
}
|
|
|
|
t.Execute(o, r)
|
|
o.Close()
|
|
|
|
r.File = outName
|
|
reports = append(reports, *r)
|
|
}
|
|
|
|
// Create index file
|
|
i, err := os.Create(path.Join(dir, "index.html"))
|
|
if err != nil {
|
|
fmt.Fprintf(os.Stdout, "Unable to write index: %v\n", err)
|
|
return
|
|
}
|
|
it, err := template.ParseFiles("../index.tmpl")
|
|
if err != nil {
|
|
fmt.Printf("Unable to parse index template: %v\n", err)
|
|
return
|
|
}
|
|
sort.Sort(sort.Reverse(report.ByNum(reports)))
|
|
it.Execute(i, reports)
|
|
i.Close()
|
|
}
|