String body = boost::algorithm::join(m_DataBuffer, "\n");
m_DataBuffer.clear();
- /* Elasticsearch 6.x requires a new line. This is compatible to 5.x.
- * Tested with 6.0.0 and 5.6.4.
- */
- body += "\n";
-
SendRequest(body);
}
try {
resp.Parse(context, true);
- while (resp.Parse(context, true) && !resp.Complete)
- ; /* Do nothing */
} catch (const std::exception& ex) {
Log(LogWarning, "ElasticsearchWriter")
- << "Failed to parse HTTP response from host '" << GetHost() << "' port '" << GetPort() << "': " << DiagnosticInformation(ex, false);
+ << "Cannot read from HTTP API on host '" << GetHost() << "' port '" << GetPort() << "'.";
throw ex;
}
- if (!resp.Complete) {
- Log(LogWarning, "ElasticsearchWriter")
- << "Failed to read a complete HTTP response from the Elasticsearch server.";
- return;
- }
-
if (resp.StatusCode > 299) {
if (resp.StatusCode == 401) {
/* More verbose error logging with Elasticsearch is hidden behind a proxy. */
Log(LogWarning, "ElasticsearchWriter")
<< "Unexpected response code " << resp.StatusCode;
+ /* Finish parsing the headers and body. */
+ while (!resp.Complete)
+ resp.Parse(context, true);
+
String contentType = resp.Headers->Get("content-type");
if (contentType != "application/json") {
Log(LogCritical, "ElasticsearchWriter")
<< "Elasticsearch error message:\n" << error;
-
- return;
}
}