mirror of
https://github.com/Icinga/icinga2.git
synced 2025-07-24 22:24:44 +02:00
Refactor EventsHandler to stream responses via HttpResponse::Write()
This commit is contained in:
parent
19b392c3c4
commit
5ff416f725
@ -98,32 +98,23 @@ bool EventsHandler::HandleRequest(
|
||||
|
||||
EventsSubscriber subscriber (std::move(eventTypes), request.GetLastParameter("filter"), l_ApiQuery);
|
||||
|
||||
server.StartStreaming();
|
||||
|
||||
response.result(http::status::ok);
|
||||
response.set(http::field::content_type, "application/json");
|
||||
response.StartStreaming();
|
||||
|
||||
IoBoundWorkSlot dontLockTheIoThread (yc);
|
||||
|
||||
http::async_write(stream, response, yc);
|
||||
stream.async_flush(yc);
|
||||
|
||||
asio::const_buffer newLine ("\n", 1);
|
||||
auto writer = std::make_shared<BeastHttpMessageAdapter<HttpResponse>>(response);
|
||||
JsonEncoder encoder(writer);
|
||||
|
||||
for (;;) {
|
||||
auto event (subscriber.GetInbox()->Shift(yc));
|
||||
auto event(subscriber.GetInbox()->Shift(yc));
|
||||
|
||||
if (event) {
|
||||
String body = JsonEncode(event);
|
||||
|
||||
boost::algorithm::replace_all(body, "\n", "");
|
||||
|
||||
asio::const_buffer payload (body.CStr(), body.GetLength());
|
||||
|
||||
asio::async_write(stream, payload, yc);
|
||||
asio::async_write(stream, newLine, yc);
|
||||
stream.async_flush(yc);
|
||||
} else if (server.Disconnected()) {
|
||||
if (event && response.IsWritable()) {
|
||||
encoder.Encode(event);
|
||||
response.body() << '\n';
|
||||
response.Write(yc);
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user