1
0
Fork 0

Merge branch 'devel' of https://github.com/triAGENS/ArangoDB into devel

This commit is contained in:
Jan Steemann 2014-10-22 19:06:03 +02:00
commit 1dafc31f2d
9 changed files with 91 additions and 12 deletions

View File

@ -4536,6 +4536,12 @@ AqlItemBlock* RemoteBlock::getSome (size_t atLeast,
} }
auto items = new triagens::aql::AqlItemBlock(responseBodyJson); auto items = new triagens::aql::AqlItemBlock(responseBodyJson);
ExecutionStats newStats(responseBodyJson.get("stats"));
_engine->_stats.addDelta(_deltaStats, newStats);
_deltaStats = newStats;
return items; return items;
} }

View File

@ -36,6 +36,7 @@
#include "Aql/ExecutionNode.h" #include "Aql/ExecutionNode.h"
#include "Aql/Range.h" #include "Aql/Range.h"
#include "Aql/WalkerWorker.h" #include "Aql/WalkerWorker.h"
#include "Aql/ExecutionStats.h"
#include "Utils/AqlTransaction.h" #include "Utils/AqlTransaction.h"
#include "Utils/transactions.h" #include "Utils/transactions.h"
#include "Utils/V8TransactionContext.h" #include "Utils/V8TransactionContext.h"
@ -1930,6 +1931,13 @@ namespace triagens {
std::string _queryId; std::string _queryId;
////////////////////////////////////////////////////////////////////////////////
/// @brief the ID of the query on the server as a string
////////////////////////////////////////////////////////////////////////////////
ExecutionStats _deltaStats;
}; };
} // namespace triagens::aql } // namespace triagens::aql

View File

@ -28,9 +28,10 @@
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
#include "Aql/ExecutionStats.h" #include "Aql/ExecutionStats.h"
#include "Utils/Exception.h"
using namespace triagens::aql; using namespace triagens::aql;
using Json = triagens::basics::Json; using Json = triagens::basics::Json;
using JsonHelper = triagens::basics::JsonHelper;
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- public methods // --SECTION-- public methods
@ -50,6 +51,24 @@ Json ExecutionStats::toJson () const {
return json; return json;
} }
ExecutionStats::ExecutionStats()
:writesExecuted(0),
writesIgnored(0),
scannedFull(0),
scannedIndex(0) {
}
ExecutionStats::ExecutionStats (triagens::basics::Json const& jsonStats) {
if (!jsonStats.isArray()) {
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_INTERNAL, "stats is not an Array");
}
writesExecuted = JsonHelper::checkAndGetNumericValue<int>(jsonStats.json(), "writesExecuted");
writesIgnored = JsonHelper::checkAndGetNumericValue<int>(jsonStats.json(), "writesIgnored");
scannedFull = JsonHelper::checkAndGetNumericValue<int>(jsonStats.json(), "scannedFull");
scannedIndex = JsonHelper::checkAndGetNumericValue<int>(jsonStats.json(), "scannedIndex");
}
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- END-OF-FILE // --SECTION-- END-OF-FILE
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------

View File

@ -38,35 +38,66 @@ namespace triagens {
struct ExecutionStats { struct ExecutionStats {
ExecutionStats ();
////////////////////////////////////////////////////////////////////////////////
/// @brief instanciate the statistics from JSON
////////////////////////////////////////////////////////////////////////////////
ExecutionStats (triagens::basics::Json const& jsonStats);
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief convert the statistics to JSON /// @brief convert the statistics to JSON
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
triagens::basics::Json toJson () const; triagens::basics::Json toJson () const;
////////////////////////////////////////////////////////////////////////////////
/// @brief sumarize two sets of ExecutionStats
////////////////////////////////////////////////////////////////////////////////
void add (ExecutionStats const& summand) {
writesExecuted += summand.writesExecuted;
writesIgnored += summand.writesIgnored;
scannedFull += summand.scannedFull;
scannedIndex += summand.scannedIndex;
}
////////////////////////////////////////////////////////////////////////////////
/// @brief sumarize the delta of two other sets of ExecutionStats to us
////////////////////////////////////////////////////////////////////////////////
void addDelta (ExecutionStats const& lastStats, ExecutionStats const& newStats) {
writesExecuted += newStats.writesExecuted - lastStats.writesExecuted;
writesIgnored += newStats.writesIgnored - lastStats.writesIgnored;
scannedFull += newStats.scannedFull - lastStats.scannedFull;
scannedIndex += newStats.scannedIndex - lastStats.scannedIndex;
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief number of successfully executed write operations /// @brief number of successfully executed write operations
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int64_t writesExecuted = 0; int64_t writesExecuted;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief number of ignored write operations (ignored due to errors) /// @brief number of ignored write operations (ignored due to errors)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int64_t writesIgnored = 0; int64_t writesIgnored;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief number of documents scanned (full-collection scan) /// @brief number of documents scanned (full-collection scan)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int64_t scannedFull = 0; int64_t scannedFull;
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief number of documents scanned (using indexes scan) /// @brief number of documents scanned (using indexes scan)
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
int64_t scannedIndex = 0; int64_t scannedIndex;
}; };

View File

@ -858,6 +858,14 @@ void Query::exitContext () {
} }
} }
////////////////////////////////////////////////////////////////////////////////
/// @brief returns statistics for current query.
////////////////////////////////////////////////////////////////////////////////
triagens::basics::Json Query::getStats() {
return _engine->_stats.toJson();
}
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
/// @brief fetch a boolean value from the options /// @brief fetch a boolean value from the options
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////

View File

@ -380,6 +380,12 @@ namespace triagens {
void exitContext (); void exitContext ();
////////////////////////////////////////////////////////////////////////////////
/// @brief returns statistics for current query.
////////////////////////////////////////////////////////////////////////////////
triagens::basics::Json getStats();
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------
// --SECTION-- private methods // --SECTION-- private methods
// ----------------------------------------------------------------------------- // -----------------------------------------------------------------------------

View File

@ -743,6 +743,7 @@ void RestAqlHandler::handleUseQuery (std::string const& operation,
else { else {
try { try {
answerBody = items->toJson(query->trx()); answerBody = items->toJson(query->trx());
answerBody.set("stats", query->getStats());
// std::cout << "ANSWERBODY: " << JsonHelper::toString(answerBody.json()) << "\n\n"; // std::cout << "ANSWERBODY: " << JsonHelper::toString(answerBody.json()) << "\n\n";
} }
catch (...) { catch (...) {

View File

@ -870,7 +870,7 @@ namespace triagens {
/// @brief checks whether *this is a Json that is equal to null. /// @brief checks whether *this is a Json that is equal to null.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool isNull () throw() { bool isNull () const throw() {
return _json != nullptr && _json->_type == TRI_JSON_NULL; return _json != nullptr && _json->_type == TRI_JSON_NULL;
} }
@ -878,7 +878,7 @@ namespace triagens {
/// @brief checks whether *this is a boolean Json. /// @brief checks whether *this is a boolean Json.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool isBoolean () throw() { bool isBoolean () const throw() {
return TRI_IsBooleanJson(_json); return TRI_IsBooleanJson(_json);
} }
@ -886,7 +886,7 @@ namespace triagens {
/// @brief checks whether *this is a number Json. /// @brief checks whether *this is a number Json.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool isNumber () throw() { bool isNumber () const throw() {
return TRI_IsNumberJson(_json); return TRI_IsNumberJson(_json);
} }
@ -894,7 +894,7 @@ namespace triagens {
/// @brief checks whether *this is a string Json. /// @brief checks whether *this is a string Json.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool isString () throw() { bool isString () const throw() {
return TRI_IsStringJson(_json); return TRI_IsStringJson(_json);
} }
@ -902,7 +902,7 @@ namespace triagens {
/// @brief checks whether *this is an array Json. /// @brief checks whether *this is an array Json.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool isArray () throw() { bool isArray () const throw() {
return TRI_IsArrayJson(_json); return TRI_IsArrayJson(_json);
} }
@ -910,7 +910,7 @@ namespace triagens {
/// @brief checks whether *this is a list Json. /// @brief checks whether *this is a list Json.
//////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////
bool isList () throw() { bool isList () const throw() {
return TRI_IsListJson(_json); return TRI_IsListJson(_json);
} }

View File

@ -2838,7 +2838,7 @@ static v8::Handle<v8::Value> JS_PBKDF2 (v8::Arguments const& argv) {
// extract arguments // extract arguments
if (argv.Length() < 4 || ! argv[0]->IsString() || ! argv[1]->IsString() || ! argv[2]->IsNumber() || ! argv[3]->IsNumber()) { if (argv.Length() < 4 || ! argv[0]->IsString() || ! argv[1]->IsString() || ! argv[2]->IsNumber() || ! argv[3]->IsNumber()) {
TRI_V8_EXCEPTION_USAGE(scope, "PBKDF2(<salt>, <password>, <iterations>, <keyLength>, <algorithm>)"); TRI_V8_EXCEPTION_USAGE(scope, "PBKDF2(<salt>, <password>, <iterations>, <keyLength>)");
} }
string salt = TRI_ObjectToString(argv[0]); string salt = TRI_ObjectToString(argv[0]);