diff --git a/openapi.yml b/openapi.yml index 191177b..1d32b6b 100644 --- a/openapi.yml +++ b/openapi.yml @@ -1,12 +1,36 @@ openapi: "3.0.2" info: - title: API Title + title: BeamMP-Server version: "1.0" + description: | + The BeamMP-Server optionally runs an HTTP server + which can be used to query information about the server's + status, health, players, etc. servers: - - url: https://localhost:8000/v1 + - url: http://localhost:{port}/v1 + description: local BeamMP-Server + variables: + port: + default: "8000" paths: + /ready: + get: + summary: whether the server has started fully + description: | + True once all subsystems have started up. + This doesn't tell you whether they're healthy, + check /health for that information. + responses: + "200": + description: OK + content: + "text/plain": + schema: + type: boolean + /health: get: + summary: health of the server's systems responses: "200": description: OK diff --git a/src/Http.cpp b/src/Http.cpp index 828ab22..87bfe07 100644 --- a/src/Http.cpp +++ b/src/Http.cpp @@ -157,6 +157,25 @@ void Http::Server::THttpServerInstance::operator()() try { HttpLibServerInstance->Get("/", [](const httplib::Request&, httplib::Response& res) { res.set_content("

Hello World!

BeamMP Server can now serve HTTP requests!

", "text/html"); }); + HttpLibServerInstance->Get(API_V1 "/ready", [](const httplib::Request&, httplib::Response& res) { + auto Statuses = Application::GetSubsystemStatuses(); + bool Started = true; + for (const auto& NameStatusPair : Statuses) { + switch (NameStatusPair.second) { + case Application::Status::Starting: + case Application::Status::ShuttingDown: + case Application::Status::Shutdown: + Started = false; + break; + case Application::Status::Good: + case Application::Status::Bad: + break; + } + } + res.status = 200; + res.set_content(Started ? "true" : "false", "text/plain"); + }); + HttpLibServerInstance->Get(API_V1 "/health", [](const httplib::Request&, httplib::Response& res) { size_t SystemsGood = 0; size_t SystemsBad = 0;