diff --git a/Justfile b/Justfile index f138cb7..62a9a5a 100644 --- a/Justfile +++ b/Justfile @@ -7,6 +7,10 @@ start: build-client start-server start-server: gleam run -m subway_gleam/server +[working-directory: 'server'] +start-prof: + gleam run -m server_prof + # TODO: automate this somehow? # also maybe move into submodules # maybe use make? diff --git a/server/dev/server_prof.gleam b/server/dev/server_prof.gleam index 12b30c9..5155888 100644 --- a/server/dev/server_prof.gleam +++ b/server/dev/server_prof.gleam @@ -3,7 +3,9 @@ import gleam/string import subway_gleam/server pub fn main() { - start(server.main) |> string.inspect |> io.println + start(fn() { server.start(sleeping_after: Ok(30 * 1000)) }) + |> string.inspect + |> io.println } @external(erlang, "server_prof_ffi", "start") diff --git a/server/src/subway_gleam/server.gleam b/server/src/subway_gleam/server.gleam index 7c4e699..c30fedf 100644 --- a/server/src/subway_gleam/server.gleam +++ b/server/src/subway_gleam/server.gleam @@ -1,4 +1,5 @@ import gleam/erlang/process +import gleam/float import gleam/http/request import gleam/http/response import gleam/int @@ -30,6 +31,12 @@ import subway_gleam/shared/route/stop as shared_stop import subway_gleam/shared/route/train as shared_train pub fn main() -> Nil { + start(sleeping_after: Error(Nil)) +} + +// The sleeping_after parameter exists so that the server automatically shuts +// down after a given amount of time when profiling. +pub fn start(sleeping_after sleep_after_ms: Result(Int, Nil)) -> Nil { wisp.configure_logger() configure_logger() @@ -86,9 +93,20 @@ pub fn main() -> Nil { |> mist.start } - log.debug("Main process sleeping forever...", with: log.new_context()) - - process.sleep_forever() + case sleep_after_ms { + Ok(ms) -> { + let sec = int.to_float(ms) /. 1000.0 + log.debug( + "Main process sleeping for " <> float.to_string(sec) <> "sec...", + with: log.new_context(), + ) + process.sleep(ms) + } + Error(Nil) -> { + log.debug("Main process sleeping forever...", with: log.new_context()) + process.sleep_forever() + } + } } // This is done b/c wisp doesn't support some features (e.g. websockets,