mirror of https://gitee.com/bigwinds/arangodb
AdminLogHandler and DebugHelperHandler now use generateResult for VelocyPack insted of TRI_json_t
This commit is contained in:
parent
746c1a2573
commit
bcc79cc1cf
|
@ -288,11 +288,7 @@ HttpHandler::status_t RestAdminLogHandler::execute () {
|
||||||
return status_t(HANDLER_DONE);
|
return status_t(HANDLER_DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::vector<TRI_log_buffer_t*> clean;
|
||||||
TRI_vector_t clean;
|
|
||||||
|
|
||||||
TRI_InitVector(&clean, TRI_UNKNOWN_MEM_ZONE, sizeof(TRI_log_buffer_t));
|
|
||||||
|
|
||||||
for (size_t i = 0; i < TRI_LengthVector(logs); ++i) {
|
for (size_t i = 0; i < TRI_LengthVector(logs); ++i) {
|
||||||
TRI_log_buffer_t* buf = (TRI_log_buffer_t*) TRI_AtVector(logs, i);
|
TRI_log_buffer_t* buf = (TRI_log_buffer_t*) TRI_AtVector(logs, i);
|
||||||
|
|
||||||
|
@ -303,93 +299,84 @@ HttpHandler::status_t RestAdminLogHandler::execute () {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
clean.emplace_back(buf);
|
||||||
TRI_PushBackVector(&clean, buf);
|
|
||||||
}
|
}
|
||||||
|
VPackBuilder result;
|
||||||
|
result.add(VPackValue(VPackValueType::Object));
|
||||||
|
size_t length = clean.size();
|
||||||
|
try {
|
||||||
|
result.add("totalAmount", VPackValue(static_cast<double>(length)));
|
||||||
|
|
||||||
|
if (offset >= length) {
|
||||||
TRI_json_t result;
|
length = 0;
|
||||||
TRI_InitObjectJson(TRI_UNKNOWN_MEM_ZONE, &result);
|
offset = 0;
|
||||||
|
}
|
||||||
// create the 4 vectors for the result parts
|
else if (offset > 0) {
|
||||||
TRI_json_t* lid = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
length -= static_cast<size_t>(offset);
|
||||||
TRI_json_t* level = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
|
||||||
TRI_json_t* timestamp = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
|
||||||
TRI_json_t* text = TRI_CreateArrayJson(TRI_UNKNOWN_MEM_ZONE);
|
|
||||||
|
|
||||||
TRI_Insert3ObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, "totalAmount", TRI_CreateNumberJson(TRI_UNKNOWN_MEM_ZONE, (double) TRI_LengthVector(&clean)));
|
|
||||||
|
|
||||||
size_t length = TRI_LengthVector(&clean);
|
|
||||||
|
|
||||||
if (offset >= length) {
|
|
||||||
length = 0;
|
|
||||||
offset = 0;
|
|
||||||
}
|
|
||||||
else if (offset > 0) {
|
|
||||||
length -= static_cast<size_t>(offset);
|
|
||||||
}
|
|
||||||
|
|
||||||
// restrict to at most <size> elements
|
|
||||||
if (length > size) {
|
|
||||||
length = static_cast<size_t>(size);
|
|
||||||
}
|
|
||||||
|
|
||||||
qsort(((char*) TRI_BeginVector(&clean)) + offset * sizeof(TRI_log_buffer_t),
|
|
||||||
length,
|
|
||||||
sizeof(TRI_log_buffer_t),
|
|
||||||
(sortAscending ? LidCompareAsc : LidCompareDesc));
|
|
||||||
|
|
||||||
for (size_t i = 0; i < length; ++i) {
|
|
||||||
TRI_log_buffer_t* buf = (TRI_log_buffer_t*) TRI_AtVector(&clean, (size_t) (offset + i));
|
|
||||||
uint32_t l = 0;
|
|
||||||
|
|
||||||
switch (buf->_level) {
|
|
||||||
case TRI_LOG_LEVEL_FATAL: l = 0; break;
|
|
||||||
case TRI_LOG_LEVEL_ERROR: l = 1; break;
|
|
||||||
case TRI_LOG_LEVEL_WARNING: l = 2; break;
|
|
||||||
case TRI_LOG_LEVEL_INFO: l = 3; break;
|
|
||||||
case TRI_LOG_LEVEL_DEBUG: l = 4; break;
|
|
||||||
case TRI_LOG_LEVEL_TRACE: l = 5; break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// put the data into the individual vectors
|
// restrict to at most <size> elements
|
||||||
if (lid != nullptr) {
|
if (length > size) {
|
||||||
TRI_PushBack3ArrayJson(TRI_UNKNOWN_MEM_ZONE, lid, TRI_CreateNumberJson(TRI_UNKNOWN_MEM_ZONE, (double) buf->_lid));
|
length = static_cast<size_t>(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (level != nullptr) {
|
std::sort(clean.begin() + offset, clean.begin() + offset + length, (sortAscending ? LidCompareAsc : LidCompareDesc));
|
||||||
TRI_PushBack3ArrayJson(TRI_UNKNOWN_MEM_ZONE, level, TRI_CreateNumberJson(TRI_UNKNOWN_MEM_ZONE, (double) l));
|
|
||||||
|
// For now we build the arrays one ofter the other
|
||||||
|
// first lid
|
||||||
|
result.add("lid", VPackValue(VPackValueType::Array));
|
||||||
|
for (size_t i = 0; i < length; ++i) {
|
||||||
|
TRI_log_buffer_t* buf = clean.at(i + static_cast<size_t>(offset));
|
||||||
|
result.add(VPackValue(buf->_lid));
|
||||||
}
|
}
|
||||||
|
result.close();
|
||||||
|
|
||||||
if (timestamp != nullptr) {
|
// second level
|
||||||
TRI_PushBack3ArrayJson(TRI_UNKNOWN_MEM_ZONE, timestamp, TRI_CreateNumberJson(TRI_UNKNOWN_MEM_ZONE, (double) buf->_timestamp));
|
result.add("level", VPackValue(VPackValueType::Array));
|
||||||
|
for (size_t i = 0; i < length; ++i) {
|
||||||
|
TRI_log_buffer_t* buf = clean.at(i + static_cast<size_t>(offset));
|
||||||
|
uint32_t l = 0;
|
||||||
|
|
||||||
|
switch (buf->_level) {
|
||||||
|
case TRI_LOG_LEVEL_FATAL: l = 0; break;
|
||||||
|
case TRI_LOG_LEVEL_ERROR: l = 1; break;
|
||||||
|
case TRI_LOG_LEVEL_WARNING: l = 2; break;
|
||||||
|
case TRI_LOG_LEVEL_INFO: l = 3; break;
|
||||||
|
case TRI_LOG_LEVEL_DEBUG: l = 4; break;
|
||||||
|
case TRI_LOG_LEVEL_TRACE: l = 5; break;
|
||||||
|
}
|
||||||
|
result.add(VPackValue(l));
|
||||||
}
|
}
|
||||||
|
result.close();
|
||||||
|
|
||||||
if (text != nullptr) {
|
// third timestamp
|
||||||
TRI_PushBack3ArrayJson(TRI_UNKNOWN_MEM_ZONE, text, TRI_CreateStringCopyJson(TRI_UNKNOWN_MEM_ZONE, buf->_text, strlen(buf->_text)));
|
result.add("timestamp", VPackValue(VPackValueType::Array));
|
||||||
|
for (size_t i = 0; i < length; ++i) {
|
||||||
|
TRI_log_buffer_t* buf = clean.at(i + static_cast<size_t>(offset));
|
||||||
|
result.add(VPackValue(static_cast<double>(buf->_timestamp)));
|
||||||
}
|
}
|
||||||
}
|
result.close();
|
||||||
|
|
||||||
TRI_FreeBufferLogging(logs);
|
// forth text
|
||||||
TRI_DestroyVector(&clean);
|
result.add("text", VPackValue(VPackValueType::Array));
|
||||||
|
for (size_t i = 0; i < length; ++i) {
|
||||||
|
TRI_log_buffer_t* buf = clean.at(i + static_cast<size_t>(offset));
|
||||||
|
result.add(VPackValue(buf->_text));
|
||||||
|
}
|
||||||
|
result.close();
|
||||||
|
|
||||||
// now put the 4 vectors into the result
|
result.close(); // Close the result object
|
||||||
if (lid != nullptr) {
|
|
||||||
TRI_Insert3ObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, "lid", lid);
|
|
||||||
}
|
|
||||||
if (level != nullptr) {
|
|
||||||
TRI_Insert3ObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, "level", level);
|
|
||||||
}
|
|
||||||
if (timestamp != nullptr) {
|
|
||||||
TRI_Insert3ObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, "timestamp", timestamp);
|
|
||||||
}
|
|
||||||
if (text != nullptr) {
|
|
||||||
TRI_Insert3ObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, "text", text);
|
|
||||||
}
|
|
||||||
|
|
||||||
generateResult(&result);
|
TRI_FreeBufferLogging(logs);
|
||||||
|
|
||||||
TRI_DestroyJson(TRI_UNKNOWN_MEM_ZONE, &result);
|
VPackSlice slice(result.start());
|
||||||
|
generateResult(slice);
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
|
// Not Enough memory to build everything up
|
||||||
|
// Has been ignored thus far
|
||||||
|
// So ignore again
|
||||||
|
}
|
||||||
|
|
||||||
return status_t(HANDLER_DONE);
|
return status_t(HANDLER_DONE);
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,20 +72,8 @@ bool RestDebugHelperHandler::isDirect () const {
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
HttpHandler::status_t RestDebugHelperHandler::execute () {
|
HttpHandler::status_t RestDebugHelperHandler::execute () {
|
||||||
TRI_json_t result;
|
|
||||||
|
|
||||||
RequestStatisticsAgentSetIgnore(this);
|
RequestStatisticsAgentSetIgnore(this);
|
||||||
|
|
||||||
TRI_InitObjectJson(TRI_CORE_MEM_ZONE, &result, 3);
|
|
||||||
|
|
||||||
TRI_json_t server;
|
|
||||||
TRI_InitStringJson(&server, TRI_DuplicateStringZ(TRI_CORE_MEM_ZONE, "arango"), strlen("arango"));
|
|
||||||
TRI_Insert2ObjectJson(TRI_CORE_MEM_ZONE, &result, "server", &server);
|
|
||||||
|
|
||||||
TRI_json_t version;
|
|
||||||
TRI_InitStringJson(&version, TRI_DuplicateStringZ(TRI_CORE_MEM_ZONE, TRI_VERSION), strlen(TRI_VERSION));
|
|
||||||
TRI_Insert2ObjectJson(TRI_CORE_MEM_ZONE, &result, "version", &version);
|
|
||||||
|
|
||||||
bool found;
|
bool found;
|
||||||
char const* sleepStr = _request->value("sleep", found);
|
char const* sleepStr = _request->value("sleep", found);
|
||||||
auto s = static_cast<unsigned long>(StringUtils::doubleDecimal(sleepStr) * 1000.0 * 1000.0);
|
auto s = static_cast<unsigned long>(StringUtils::doubleDecimal(sleepStr) * 1000.0 * 1000.0);
|
||||||
|
@ -105,17 +93,20 @@ HttpHandler::status_t RestDebugHelperHandler::execute () {
|
||||||
_dispatcherThread->unblock();
|
_dispatcherThread->unblock();
|
||||||
}
|
}
|
||||||
|
|
||||||
TRI_json_t sleepNumber;
|
try {
|
||||||
TRI_InitNumberJson(&sleepNumber, s / 1000000.0);
|
VPackBuilder result;
|
||||||
TRI_Insert2ObjectJson(TRI_CORE_MEM_ZONE, &result, "sleep", &sleepNumber);
|
result.add(VPackValue(VPackValueType::Object));
|
||||||
|
result.add("server", VPackValue("arango"));
|
||||||
TRI_json_t blockFlag;
|
result.add("version", VPackValue(TRI_VERSION));
|
||||||
TRI_InitBooleanJson(&blockFlag, block);
|
result.add("sleep", VPackValue(s / 1000000.0));
|
||||||
TRI_Insert2ObjectJson(TRI_CORE_MEM_ZONE, &result, "block", &blockFlag);
|
result.add("block", VPackValue(block));
|
||||||
|
result.close();
|
||||||
generateResult(&result);
|
VPackSlice slice(result.start());
|
||||||
TRI_DestroyJson(TRI_CORE_MEM_ZONE, &result);
|
generateResult(slice);
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
|
// Ignore the error
|
||||||
|
}
|
||||||
return status_t(HANDLER_DONE);
|
return status_t(HANDLER_DONE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue