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()
}