ready to dev
parent
258a51af0b
commit
a5f332b991
|
|
@ -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,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,12 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<header>
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/water.css@2/out/water.css">
|
||||||
|
</header>
|
||||||
|
<body>
|
||||||
|
<h1>Since {{ .since }}</h1>
|
||||||
|
</body>
|
||||||
|
<footer>
|
||||||
|
</footer>
|
||||||
|
</html>
|
||||||
|
|
@ -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)
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue