diff --git a/arangod/RestHandler/RestVersionHandler.cpp b/arangod/RestHandler/RestVersionHandler.cpp index 28a29481ef..ee14799b32 100644 --- a/arangod/RestHandler/RestVersionHandler.cpp +++ b/arangod/RestHandler/RestVersionHandler.cpp @@ -28,8 +28,6 @@ //////////////////////////////////////////////////////////////////////////////// #include "RestVersionHandler.h" -#include "Basics/json.h" -#include "Basics/tri-strings.h" #include "Rest/AnyServer.h" #include "Rest/HttpRequest.h" #include "Rest/Version.h" @@ -130,39 +128,32 @@ bool RestVersionHandler::isDirect () const { //////////////////////////////////////////////////////////////////////////////// HttpHandler::status_t RestVersionHandler::execute () { - TRI_json_t result; + try { + VPackBuilder result; + result.add(VPackValue(VPackValueType::Object)); + result.add("server", VPackValue("arango")); + result.add("version", VPackValue(TRI_VERSION)); - TRI_InitObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, 3); + bool found; + char const* detailsStr = _request->value("details", found); - TRI_json_t server; - TRI_InitStringJson(&server, TRI_DuplicateStringZ(TRI_UNKNOWN_MEM_ZONE, "arango"), strlen("arango")); - TRI_Insert2ObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, "server", &server); + if (found && StringUtils::boolean(detailsStr)) { + result.add("details", VPackValue(VPackValueType::Object)); - TRI_json_t version; - TRI_InitStringJson(&version, TRI_DuplicateStringZ(TRI_UNKNOWN_MEM_ZONE, TRI_VERSION), strlen(TRI_VERSION)); - TRI_Insert2ObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, "version", &version); + Version::getVPack(result); - bool found; - char const* detailsStr = _request->value("details", found); - - if (found && StringUtils::boolean(detailsStr)) { - TRI_json_t details; - - TRI_InitObjectJson(TRI_UNKNOWN_MEM_ZONE, &details); - - Version::getJson(TRI_UNKNOWN_MEM_ZONE, &details); - - if (ArangoInstance != nullptr) { - std::string mode = ArangoInstance->modeString(); - TRI_Insert3ObjectJson(TRI_UNKNOWN_MEM_ZONE, &details, "mode", TRI_CreateStringCopyJson(TRI_UNKNOWN_MEM_ZONE, mode.c_str(), mode.size())); + if (ArangoInstance != nullptr) { + result.add("mode", VPackValue(ArangoInstance->modeString())); + } + result.close(); } - - TRI_Insert2ObjectJson(TRI_UNKNOWN_MEM_ZONE, &result, "details", &details); + result.close(); + VPackSlice s = result.slice(); + generateResult(s); + } + catch (...) { + // Ignore this error } - - generateResult(&result); - TRI_DestroyJson(TRI_UNKNOWN_MEM_ZONE, &result); - return status_t(HANDLER_DONE); } diff --git a/lib/Rest/Version.cpp b/lib/Rest/Version.cpp index ec7d342199..c18832b4c6 100644 --- a/lib/Rest/Version.cpp +++ b/lib/Rest/Version.cpp @@ -310,6 +310,23 @@ void Version::getJson (TRI_memory_zone_t* zone, TRI_json_t* dst) { } } +//////////////////////////////////////////////////////////////////////////////// +/// @brief VelocyPack all data +//////////////////////////////////////////////////////////////////////////////// + +void Version::getVPack (VPackBuilder& dst) { + for (auto& it : Values) { + std::string value = it.second; + triagens::basics::StringUtils::trimInPlace(value); + + if (! value.empty()) { + dst.add(it.first, VPackValue(value)); + } + } +} + + + // ----------------------------------------------------------------------------- // --SECTION-- public static variables // ----------------------------------------------------------------------------- diff --git a/lib/Rest/Version.h b/lib/Rest/Version.h index 93c2350680..06901e1548 100644 --- a/lib/Rest/Version.h +++ b/lib/Rest/Version.h @@ -32,6 +32,8 @@ #include "Basics/Common.h" +#include + // ----------------------------------------------------------------------------- // --SECTION-- forward declarations // ----------------------------------------------------------------------------- @@ -159,6 +161,12 @@ namespace triagens { static void getJson (struct TRI_memory_zone_s*, struct TRI_json_t*); +//////////////////////////////////////////////////////////////////////////////// +/// @brief VelocyPack all data +//////////////////////////////////////////////////////////////////////////////// + + static void getVPack (VPackBuilder&); + // ----------------------------------------------------------------------------- // --SECTION-- public static variables // -----------------------------------------------------------------------------