1
0
Fork 0

The RestVersionHandler now uses VPack instead of TRI_json_t

This commit is contained in:
Michael Hackstein 2015-11-06 15:02:13 +01:00
parent 454b3f0d7a
commit 42cf09e7f0
3 changed files with 45 additions and 29 deletions

View File

@ -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);
}

View File

@ -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
// -----------------------------------------------------------------------------

View File

@ -32,6 +32,8 @@
#include "Basics/Common.h"
#include <velocypack/velocypack-aliases.h>
// -----------------------------------------------------------------------------
// --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
// -----------------------------------------------------------------------------