+66
-2
@@ -1,6 +1,10 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
_ "embed"
|
||||
"html/template"
|
||||
"net/http"
|
||||
|
||||
"context"
|
||||
"database/sql"
|
||||
"flag"
|
||||
@@ -73,8 +77,68 @@ func (s S) init(ctx context.Context) error {
|
||||
return ctx.Err()
|
||||
}
|
||||
|
||||
func (S) listen(ctx context.Context) error {
|
||||
return ctx.Err()
|
||||
//go:embed index.html.tmpl
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user