Skip to content

Commit 86ff3fc

Browse files
(WIP) Adapt handlers to use AsioFuture where sensible
1 parent 6d6dc7d commit 86ff3fc

File tree

3 files changed

+54
-34
lines changed

3 files changed

+54
-34
lines changed

lib/remote/configpackageshandler.cpp

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
#include "remote/httputility.hpp"
77
#include "remote/filterutility.hpp"
88
#include "base/exception.hpp"
9+
#include "base/io-future.hpp"
910

1011
using namespace icinga;
1112

@@ -20,23 +21,25 @@ bool ConfigPackagesHandler::HandleRequest(
2021
{
2122
namespace http = boost::beast::http;
2223

23-
auto url = request.Url();
24-
auto user = request.User();
25-
auto params = request.Params();
26-
27-
if (url->GetPath().size() > 4)
28-
return false;
29-
30-
if (request.method() == http::verb::get)
31-
HandleGet(request, response);
32-
else if (request.method() == http::verb::post)
33-
HandlePost(request, response);
34-
else if (request.method() == http::verb::delete_)
35-
HandleDelete(request, response);
36-
else
37-
return false;
38-
39-
return true;
24+
return QueueAsioFutureCallback([&]() {
25+
auto url = request.Url();
26+
auto user = request.User();
27+
auto params = request.Params();
28+
29+
if (url->GetPath().size() > 4)
30+
return false;
31+
32+
if (request.method() == http::verb::get)
33+
HandleGet(request, response);
34+
else if (request.method() == http::verb::post)
35+
HandlePost(request, response);
36+
else if (request.method() == http::verb::delete_)
37+
HandleDelete(request, response);
38+
else
39+
return false;
40+
41+
return true;
42+
})->Get(yc);
4043
}
4144

4245
void ConfigPackagesHandler::HandleGet(const HttpRequest& request, HttpResponse& response)

lib/remote/configstageshandler.cpp

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "base/application.hpp"
99
#include "base/defer.hpp"
1010
#include "base/exception.hpp"
11+
#include "base/io-future.hpp"
1112

1213
using namespace icinga;
1314

@@ -27,23 +28,27 @@ bool ConfigStagesHandler::HandleRequest(
2728
{
2829
namespace http = boost::beast::http;
2930

30-
auto url = request.Url();
31-
auto user = request.User();
32-
auto params = request.Params();
31+
auto future = QueueAsioFutureCallback([&]() {
32+
auto url = request.Url();
33+
auto user = request.User();
34+
auto params = request.Params();
3335

34-
if (url->GetPath().size() > 5)
35-
return false;
36+
if (url->GetPath().size() > 5)
37+
return false;
3638

37-
if (request.method() == http::verb::get)
38-
HandleGet(request, response);
39-
else if (request.method() == http::verb::post)
40-
HandlePost(request, response);
41-
else if (request.method() == http::verb::delete_)
42-
HandleDelete(request, response);
43-
else
44-
return false;
39+
if (request.method() == http::verb::get)
40+
HandleGet(request, response);
41+
else if (request.method() == http::verb::post)
42+
HandlePost(request, response);
43+
else if (request.method() == http::verb::delete_)
44+
HandleDelete(request, response);
45+
else
46+
return false;
47+
48+
return true;
49+
});
4550

46-
return true;
51+
return future->Get(yc);
4752
}
4853

4954
void ConfigStagesHandler::HandleGet(const HttpRequest& request, HttpResponse& response)

lib/remote/createobjecthandler.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,17 @@
99
#include "remote/apiaction.hpp"
1010
#include "remote/zone.hpp"
1111
#include "base/configtype.hpp"
12+
#include "base/io-future.hpp"
1213
#include <set>
1314

1415
using namespace icinga;
1516

1617
REGISTER_URLHANDLER("/v1/objects", CreateObjectHandler);
1718

18-
bool CreateObjectHandler::HandleRequest(
19+
static bool HandleRequestImpl(
1920
const WaitGroup::Ptr& waitGroup,
2021
const HttpRequest& request,
21-
HttpResponse& response,
22-
boost::asio::yield_context& yc
22+
HttpResponse& response
2323
)
2424
{
2525
namespace http = boost::beast::http;
@@ -162,3 +162,15 @@ bool CreateObjectHandler::HandleRequest(
162162

163163
return true;
164164
}
165+
166+
bool CreateObjectHandler::HandleRequest(
167+
const WaitGroup::Ptr& waitGroup,
168+
const HttpRequest& request,
169+
HttpResponse& response,
170+
boost::asio::yield_context& yc
171+
)
172+
{
173+
return QueueAsioFutureCallback([&](){
174+
return HandleRequestImpl(waitGroup, request, response);
175+
})->Get(yc);
176+
}

0 commit comments

Comments
 (0)