WIP: uncommitted changes before archiving
💘 Generated with Crush Assisted-by: GLM-4.7 via Crush <crush@charm.land>
This commit is contained in:
49
bin/main.ml
49
bin/main.ml
@@ -4,10 +4,17 @@ open Dream
|
||||
open Lwt.Infix
|
||||
|
||||
let () =
|
||||
let env = Dream.run ~interface:"0.0.0.0" ~port:8080 @@ fun _ ->
|
||||
(* CORS middleware *)
|
||||
let cors =
|
||||
Dream.middleware
|
||||
(* Create database pool *)
|
||||
ignore (Database.create_pool ());
|
||||
|
||||
(* Initialize database schema *)
|
||||
Lwt.catch
|
||||
(fun () -> Database.init_schema ())
|
||||
(fun _exn -> Lwt.return_unit) (* Continue even if init fails *)
|
||||
|
||||
(* CORS middleware *)
|
||||
let cors =
|
||||
Dream.middleware
|
||||
@@ fun next req ->
|
||||
let origin = Dream.header "Origin" req |> Option.value ~default:"*" in
|
||||
Dream.respond_with_headers
|
||||
@@ -18,23 +25,23 @@ let () =
|
||||
("Access-Control-Allow-Credentials", "true");
|
||||
]
|
||||
@@ fun res -> next req res
|
||||
in
|
||||
in
|
||||
|
||||
(* Logging middleware *)
|
||||
let logger =
|
||||
Dream.middleware
|
||||
(* Logging middleware *)
|
||||
let logger =
|
||||
Dream.middleware
|
||||
@@ fun next req ->
|
||||
Lwt.finalize
|
||||
(fun () ->
|
||||
Logs.app (fun m -> m "%s %s" (Dream.method_str req) (Dream.target req));
|
||||
next req)
|
||||
(fun () -> Lwt.return_unit)
|
||||
in
|
||||
in
|
||||
|
||||
(* Routes *)
|
||||
let router =
|
||||
Dream.group
|
||||
[
|
||||
(* Routes *)
|
||||
let router =
|
||||
Dream.group
|
||||
[
|
||||
(* Health check *)
|
||||
Dream.get "/health" @@ fun _ ->
|
||||
Lwt.return @@ Dream.json `Ok (Yojson.Basic.(assoc ["status", `String "healthy"]));
|
||||
@@ -64,7 +71,7 @@ let () =
|
||||
Dream.get "/stats/summary" Website_monitor_api.get_stats_summary;
|
||||
]);
|
||||
|
||||
(* Admin dashboard routes - server-side rendered with server-reason-react *)
|
||||
(* Admin dashboard routes *)
|
||||
Dream.get "/" Website_monitor_ui.serve_dashboard;
|
||||
Dream.get "/dashboard" Website_monitor_ui.serve_dashboard;
|
||||
Dream.get "/dashboard/websites" Website_monitor_ui.serve_websites_page;
|
||||
@@ -74,18 +81,14 @@ let () =
|
||||
(* Static assets *)
|
||||
Dream.get "/static/*" (Dream.static ~loader:(Dream.filesystem "") "");
|
||||
]
|
||||
in
|
||||
|
||||
(* Apply middlewares and router *)
|
||||
Dream.logger ~level:`Debug
|
||||
@@ cors
|
||||
@@ logger
|
||||
@@ router
|
||||
|
||||
in
|
||||
|
||||
(* Start monitoring scheduler *)
|
||||
Website_monitor_scheduler.start ();
|
||||
|
||||
(* Run the server *)
|
||||
env
|
||||
Dream.run ~interface:"0.0.0.0" ~port:8080
|
||||
@@ Dream.logger ~level:`Debug
|
||||
@@ cors
|
||||
@@ logger
|
||||
@@ router
|
||||
|
||||
Reference in New Issue
Block a user