execute template w queries
cicd / ci (push) Failing after 36s

This commit is contained in:
bel
2026-06-28 00:14:25 -06:00
parent 52c00adfe7
commit 2e339cff36
+66 -2
View File
@@ -1,6 +1,10 @@
package main package main
import ( import (
_ "embed"
"html/template"
"net/http"
"context" "context"
"database/sql" "database/sql"
"flag" "flag"
@@ -73,8 +77,68 @@ func (s S) init(ctx context.Context) error {
return ctx.Err() return ctx.Err()
} }
func (S) listen(ctx context.Context) error { //go:embed index.html.tmpl
return ctx.Err() var IndexTemplate string
func (s S) listen(ctx context.Context) error {
t := template.New("template")
t.Funcs(map[string]any{
"query": func(q string) ([]map[string]any, error) {
rows, err := s.QueryContext(ctx, q)
if err != nil {
return nil, err
}
defer rows.Close()
columns, err := rows.Columns()
if err != nil {
return nil, err
}
results := []map[string]any{}
for rows.Next() {
var scanners []any
for range columns {
var a any
scanners = append(scanners, &a)
}
if err := rows.Scan(scanners...); err != nil {
return nil, err
}
result := map[string]any{}
for i, column := range columns {
result[column] = scanners[i]
}
results = append(results, result)
}
return results, rows.Err()
},
})
t, err := t.Parse(IndexTemplate)
if err != nil {
return err
}
server := &http.Server{
Addr: ":10000",
Handler: http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
if err := t.Execute(w, map[string]any{
"DB": s.DB,
}); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
}
}),
}
go func() {
<-ctx.Done()
server.Close()
}()
if err := server.ListenAndServe(); err != nil && ctx.Err() == nil {
return err
}
return nil
} }
func (s S) pingAndRecord(ctx context.Context) error { func (s S) pingAndRecord(ctx context.Context) error {