diff --git a/report.go b/report.go new file mode 100644 index 0000000..861d4bb --- /dev/null +++ b/report.go @@ -0,0 +1,47 @@ +package main + +import ( + "context" + _ "embed" + "io" + "text/template" + "time" +) + +//go:embed report.tmpl +var reportTMPL string + +func ReportSince(ctx context.Context, w io.Writer, s Storage, t time.Time) error { + tmpl, err := template.New("report").Parse(reportTMPL) + if err != nil { + return err + } + + messages, err := s.MessagesSince(ctx, t) + if err != nil { + return err + } + + threads, err := s.ThreadsSince(ctx, t) + if err != nil { + return err + } + + eventNames, err := s.EventNamesSince(ctx, t) + if err != nil { + return err + } + + events, err := s.EventsSince(ctx, t) + if err != nil { + return err + } + + return tmpl.Execute(w, map[string]any{ + "since": t.Format("2006-01-02"), + "messages": messages, + "threads": threads, + "events": events, + "eventNames": eventNames, + }) +} diff --git a/report.tmpl b/report.tmpl new file mode 100644 index 0000000..928106d --- /dev/null +++ b/report.tmpl @@ -0,0 +1,12 @@ + + +
+ + +
+ +

Since {{ .since }}

+ + + diff --git a/report_test.go b/report_test.go new file mode 100644 index 0000000..3063e17 --- /dev/null +++ b/report_test.go @@ -0,0 +1,29 @@ +package main + +import ( + "bytes" + "context" + "os" + "path" + "testing" + "time" +) + +func TestReport(t *testing.T) { + ctx, can := context.WithTimeout(context.Background(), time.Minute) + defer can() + + w := bytes.NewBuffer(nil) + + db := NewRAM() + FillWithTestdata(ctx, db, renderAssetPattern, renderDatacenterPattern) + s := NewStorage(db) + + if err := ReportSince(ctx, w, s, time.Now().Add(-1*time.Hour*24*365*20)); err != nil { + t.Fatal(err) + } + + p := path.Join(os.TempDir(), "test_report.html") + os.WriteFile(p, w.Bytes(), os.ModePerm) + t.Log(p) +}