initial commit
This commit is contained in:
@@ -0,0 +1,61 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"encoding/csv"
|
||||
"encoding/json"
|
||||
"flag"
|
||||
"log/slog"
|
||||
"os"
|
||||
"slices"
|
||||
)
|
||||
|
||||
func main() {
|
||||
var outf string
|
||||
flag.StringVar(&outf, "o", "idle_single_mode.csv", "output CSV `file`")
|
||||
flag.Parse()
|
||||
|
||||
out, err := os.Create(outf)
|
||||
if err != nil {
|
||||
slog.Error("create output", slog.Any("err", err))
|
||||
os.Exit(1)
|
||||
}
|
||||
b := bufio.NewWriter(out)
|
||||
defer b.Flush()
|
||||
w := csv.NewWriter(b)
|
||||
defer w.Flush()
|
||||
if err := w.Write(headers); err != nil {
|
||||
slog.Error("write header", slog.Any("err", err))
|
||||
}
|
||||
|
||||
files := flag.Args()
|
||||
slices.Sort(files)
|
||||
for _, in := range files {
|
||||
dofile(w, in)
|
||||
}
|
||||
}
|
||||
|
||||
func dofile(w *csv.Writer, name string) {
|
||||
log := slog.With(slog.String("file", name))
|
||||
log.Info("process")
|
||||
f, err := os.Open(name)
|
||||
if err != nil {
|
||||
log.Error("open", slog.Any("err", err))
|
||||
return
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
var ism WorkIdleSingleMode
|
||||
d := json.NewDecoder(f)
|
||||
d.DisallowUnknownFields()
|
||||
if err := d.Decode(&ism); err != nil {
|
||||
log.Error("decode", slog.Any("err", err))
|
||||
return
|
||||
}
|
||||
|
||||
for row := range ismRows(name, ism.ProgressLog) {
|
||||
if err := w.Write(row.csv()); err != nil {
|
||||
log.Error("write row", slog.Any("err", err))
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user