From a5f332b99101adf8b59eb0f9c93750855b6ad54a Mon Sep 17 00:00:00 2001 From: bel Date: Sat, 13 Apr 2024 10:46:37 -0600 Subject: [PATCH] ready to dev --- report.go | 47 +++++++++++++++++++++++++++++++++++++++++++++++ report.tmpl | 12 ++++++++++++ report_test.go | 29 +++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 report.go create mode 100644 report.tmpl create mode 100644 report_test.go 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) +}