frm/cmd/dev_server/main.go

104 lines
2.5 KiB
Go
Raw Permalink Normal View History

2024-11-05 16:18:04 +00:00
package main
import (
"context"
"fmt"
2025-01-23 14:31:12 +00:00
"log"
2024-11-05 16:18:04 +00:00
"log/slog"
"net/http"
"os"
"time"
"github.com/acaloiaro/frm"
2024-12-17 17:25:33 +00:00
"github.com/acaloiaro/frm/routers/frmchi"
2024-11-05 16:18:04 +00:00
"github.com/go-chi/chi/v5"
"github.com/go-chi/httplog/v2"
)
var (
listenAddress = "0.0.0.0:3000"
requestLogger *httplog.Logger
logOptions *slog.HandlerOptions
logger *slog.Logger
)
func initLogging() {
initAppLogger()
initRequestLogger()
}
func initAppLogger() {
logLevel := os.Getenv("LOG_LEVEL")
logOptions = &slog.HandlerOptions{Level: slog.LevelDebug}
if logLevel == "INFO" {
logOptions.Level = slog.LevelInfo
}
logger = slog.New(slog.NewTextHandler(os.Stdout, logOptions))
}
func initRequestLogger() {
requestLogger = httplog.NewLogger("web", httplog.Options{
LogLevel: logOptions.Level.Level().Level(),
Concise: true,
RequestHeaders: false,
MessageFieldName: "message",
TimeFieldFormat: time.RFC3339,
Tags: map[string]string{
"env": "dev",
},
QuietDownRoutes: []string{
"/ping",
"/js/htmx.js",
"/js/htmx-response-targets.js",
"/js/hyperscript.js",
"/js/choices.min.js",
"/css/styles.css",
"/css/choices.min.css",
},
QuietDownPeriod: 24 * 60 * 60 * time.Second,
})
}
func main() {
initLogging()
logger.Info("frm dev server started")
chiRouter := chi.NewRouter()
chiRouter.Use(httplog.RequestLogger(requestLogger))
2025-01-25 15:39:54 +00:00
chiRouter.Get("/ping", func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
const workspaceParamName = "frm_workspace_id"
f, err := frm.New(frm.Args{
PostgresURL: os.Getenv("POSTGRES_URL"),
2025-01-09 19:11:53 +00:00
PostgresDisableSSL: true,
WorkspaceIDUrlParam: workspaceParamName, // name of the chi URL parameter name
2025-01-09 19:11:53 +00:00
BuilderMountPoint: fmt.Sprintf("/frm/{%s}/build", workspaceParamName),
CollectorMountPoint: fmt.Sprintf("/frm/{%s}/collect", workspaceParamName),
2025-02-06 21:24:38 +00:00
CollectorFooter: `<a href="https://github.com/acaloiaro/frm" class="text-gray-500">Feedback powered by <span class="underline">frm</span></a>`,
2025-01-23 14:31:12 +00:00
Reciever: func(ctx context.Context, submission frm.FormSubmission) (err error) {
log.Println("GOT SUBMISSION!", submission)
return
},
2024-11-05 16:18:04 +00:00
})
if err != nil {
panic(err)
}
err = f.Init(context.Background())
if err != nil {
panic(err)
}
2025-01-09 19:11:53 +00:00
frmchi.Mount(chiRouter, f)
2024-11-05 16:18:04 +00:00
s := &http.Server{
Handler: chiRouter,
2024-11-05 16:18:04 +00:00
Addr: listenAddress,
ReadTimeout: time.Duration(10 * time.Second),
WriteTimeout: time.Duration(10 * time.Second),
}
err = s.ListenAndServe()
slog.Error("server exited", "error", err)
os.Exit(1)
}