mirror of https://gitee.com/bigwinds/arangodb
fix db._engineStats()
This commit is contained in:
parent
e40d191434
commit
f1763e491d
|
@ -22,6 +22,7 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "MMFilesV8Functions.h"
|
||||
#include "Aql/Functions.h"
|
||||
#include "Basics/Exceptions.h"
|
||||
#include "Cluster/ClusterMethods.h"
|
||||
#include "Cluster/ServerState.h"
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#ifndef ARANGOD_MMFILES_MMFILES_V8_FUNCTIONS_H
|
||||
#define ARANGOD_MMFILES_MMFILES_V8_FUNCTIONS_H 1
|
||||
|
||||
#include "Aql/Functions.h"
|
||||
#include "Basics/Common.h"
|
||||
|
||||
namespace arangodb {
|
||||
|
||||
|
|
|
@ -1212,7 +1212,7 @@ RocksDBReplicationManager* RocksDBEngine::replicationManager() const {
|
|||
return _replicationManager.get();
|
||||
}
|
||||
|
||||
void RocksDBEngine::rocksdbProperties(VPackBuilder &builder) {
|
||||
void RocksDBEngine::getStatistics(VPackBuilder& builder) const {
|
||||
builder.openObject();
|
||||
// add int properties
|
||||
auto c1 = [&](std::string const& s) {
|
||||
|
|
|
@ -89,6 +89,8 @@ class RocksDBEngine final : public StorageEngine {
|
|||
// create storage-engine specific view
|
||||
PhysicalView* createPhysicalView(LogicalView*, VPackSlice const&) override;
|
||||
|
||||
void getStatistics(VPackBuilder& builder) const override;
|
||||
|
||||
// inventory functionality
|
||||
// -----------------------
|
||||
|
||||
|
@ -270,8 +272,6 @@ class RocksDBEngine final : public StorageEngine {
|
|||
RocksDBCounterManager* counterManager() const;
|
||||
RocksDBReplicationManager* replicationManager() const;
|
||||
|
||||
void rocksdbProperties(VPackBuilder &builder);
|
||||
|
||||
private:
|
||||
/// single rocksdb database used in this storage engine
|
||||
rocksdb::TransactionDB* _db;
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "RocksDBV8Functions.h"
|
||||
#include "Aql/Functions.h"
|
||||
#include "Basics/Exceptions.h"
|
||||
#include "Basics/Result.h"
|
||||
#include "Cluster/ServerState.h"
|
||||
|
@ -103,28 +104,6 @@ static void JS_PropertiesWal(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
TRI_V8_TRY_CATCH_END
|
||||
}
|
||||
|
||||
/// return rocksdb properties
|
||||
static void JS_EngineStats(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
||||
TRI_V8_TRY_CATCH_BEGIN(isolate);
|
||||
v8::HandleScope scope(isolate);
|
||||
|
||||
if (ServerState::instance()->isCoordinator()) {
|
||||
TRI_V8_THROW_EXCEPTION(TRI_ERROR_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
RocksDBEngine* engine =
|
||||
dynamic_cast<RocksDBEngine*>(EngineSelectorFeature::ENGINE);
|
||||
if (engine == nullptr) {
|
||||
TRI_V8_THROW_EXCEPTION(TRI_ERROR_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
VPackBuilder builder;
|
||||
engine->rocksdbProperties(builder);
|
||||
v8::Handle<v8::Value> result = TRI_VPackToV8(isolate, builder.slice());
|
||||
TRI_V8_RETURN(result);
|
||||
TRI_V8_TRY_CATCH_END
|
||||
}
|
||||
|
||||
static void JS_RecalculateCounts(
|
||||
v8::FunctionCallbackInfo<v8::Value> const& args) {
|
||||
TRI_V8_TRY_CATCH_BEGIN(isolate);
|
||||
|
@ -140,8 +119,8 @@ static void JS_RecalculateCounts(
|
|||
|
||||
auto physical = toRocksDBCollection(collection);
|
||||
|
||||
v8::Handle<v8::Value> result = v8::Integer::New(
|
||||
isolate, static_cast<uint32_t>(physical->recalculateCounts()));
|
||||
v8::Handle<v8::Value> result = v8::Number::New(
|
||||
isolate, static_cast<double>(physical->recalculateCounts()));
|
||||
|
||||
TRI_V8_RETURN(result);
|
||||
TRI_V8_TRY_CATCH_END
|
||||
|
@ -158,22 +137,16 @@ void RocksDBV8Functions::registerResources() {
|
|||
v8::Handle<v8::ObjectTemplate>::New(isolate, v8g->VocbaseColTempl);
|
||||
TRI_ASSERT(!rt.IsEmpty());
|
||||
|
||||
v8::Handle<v8::ObjectTemplate> db =
|
||||
v8::Handle<v8::ObjectTemplate>::New(isolate, v8g->VocbaseTempl);
|
||||
TRI_ASSERT(!db.IsEmpty());
|
||||
|
||||
TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING("recalculateCount"),
|
||||
JS_RecalculateCounts, true);
|
||||
|
||||
// add global WAL handling functions
|
||||
TRI_AddGlobalFunctionVocbase(isolate, TRI_V8_ASCII_STRING("WAL_FLUSH"),
|
||||
JS_FlushWal, true);
|
||||
TRI_AddGlobalFunctionVocbase(isolate,
|
||||
TRI_V8_ASCII_STRING("WAL_WAITCOLLECTOR"),
|
||||
TRI_AddGlobalFunctionVocbase(isolate, TRI_V8_ASCII_STRING("WAL_WAITCOLLECTOR"),
|
||||
JS_WaitCollectorWal, true);
|
||||
TRI_AddGlobalFunctionVocbase(isolate, TRI_V8_ASCII_STRING("WAL_PROPERTIES"),
|
||||
JS_PropertiesWal, true);
|
||||
TRI_AddGlobalFunctionVocbase(isolate, TRI_V8_ASCII_STRING("WAL_TRANSACTIONS"),
|
||||
JS_TransactionsWal, true);
|
||||
TRI_AddMethodVocbase(isolate, rt, TRI_V8_ASCII_STRING("recalculateCount"),
|
||||
JS_RecalculateCounts);
|
||||
TRI_AddMethodVocbase(isolate, db, TRI_V8_ASCII_STRING("_engineStats"),
|
||||
JS_EngineStats);
|
||||
}
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
#ifndef ARANGOD_ROCKSDB_ROCKSDB_V8_FUNCTIONS_H
|
||||
#define ARANGOD_ROCKSDB_ROCKSDB_V8_FUNCTIONS_H 1
|
||||
|
||||
#include "Aql/Functions.h"
|
||||
#include "Basics/Common.h"
|
||||
|
||||
namespace arangodb {
|
||||
|
||||
|
|
|
@ -430,6 +430,11 @@ class StorageEngine : public application_features::ApplicationFeature {
|
|||
builder.close(); // supports
|
||||
builder.close(); // object
|
||||
}
|
||||
|
||||
virtual void getStatistics(VPackBuilder& builder) const {
|
||||
builder.openObject();
|
||||
builder.close();
|
||||
}
|
||||
|
||||
protected:
|
||||
void registerCollection(TRI_vocbase_t* vocbase,
|
||||
|
|
|
@ -2887,6 +2887,7 @@ static void JS_CompletionsVocbase(
|
|||
result->Set(j++, TRI_V8_ASCII_STRING("_dropDatabase()"));
|
||||
result->Set(j++, TRI_V8_ASCII_STRING("_dropView()"));
|
||||
result->Set(j++, TRI_V8_ASCII_STRING("_engine()"));
|
||||
result->Set(j++, TRI_V8_ASCII_STRING("_engineStats()"));
|
||||
result->Set(j++, TRI_V8_ASCII_STRING("_executeTransaction()"));
|
||||
result->Set(j++, TRI_V8_ASCII_STRING("_exists()"));
|
||||
result->Set(j++, TRI_V8_ASCII_STRING("_id"));
|
||||
|
|
|
@ -1517,12 +1517,11 @@ static void JS_ObjectHash(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static v8::Handle<v8::Object> WrapVocBase(v8::Isolate* isolate,
|
||||
TRI_vocbase_t const* database) {
|
||||
TRI_vocbase_t* database) {
|
||||
TRI_GET_GLOBALS();
|
||||
|
||||
v8::Handle<v8::Object> result =
|
||||
WrapClass(isolate, v8g->VocbaseTempl, WRP_VOCBASE_TYPE,
|
||||
const_cast<TRI_vocbase_t*>(database));
|
||||
WrapClass(isolate, v8g->VocbaseTempl, WRP_VOCBASE_TYPE, database);
|
||||
return result;
|
||||
}
|
||||
|
||||
|
@ -1687,10 +1686,10 @@ static void MapGetVocBase(v8::Local<v8::String> const name,
|
|||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief return the name of the storage engine
|
||||
/// @brief return the name and capabilities of the storage engine
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void JS_EngineServer(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
||||
static void JS_Engine(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
||||
TRI_V8_TRY_CATCH_BEGIN(isolate);
|
||||
v8::HandleScope scope(isolate);
|
||||
|
||||
|
@ -1704,6 +1703,28 @@ static void JS_EngineServer(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
|||
TRI_V8_TRY_CATCH_END
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief return statistics for the storage engine
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
static void JS_EngineStats(v8::FunctionCallbackInfo<v8::Value> const& args) {
|
||||
TRI_V8_TRY_CATCH_BEGIN(isolate);
|
||||
v8::HandleScope scope(isolate);
|
||||
|
||||
if (ServerState::instance()->isCoordinator()) {
|
||||
TRI_V8_THROW_EXCEPTION(TRI_ERROR_NOT_IMPLEMENTED);
|
||||
}
|
||||
|
||||
// return engine data
|
||||
StorageEngine* engine = EngineSelectorFeature::ENGINE;
|
||||
VPackBuilder builder;
|
||||
engine->getStatistics(builder);
|
||||
|
||||
v8::Handle<v8::Value> result = TRI_VPackToV8(isolate, builder.slice());
|
||||
TRI_V8_RETURN(result);
|
||||
TRI_V8_TRY_CATCH_END
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// @brief was docuBlock databaseVersion
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
@ -2607,19 +2628,14 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
|
|||
// register the database
|
||||
v8g->_vocbase = vocbase;
|
||||
|
||||
v8::Handle<v8::ObjectTemplate> ArangoNS;
|
||||
v8::Handle<v8::ObjectTemplate> rt;
|
||||
v8::Handle<v8::FunctionTemplate> ft;
|
||||
v8::Handle<v8::Template> pt;
|
||||
|
||||
// .............................................................................
|
||||
// generate the TRI_vocbase_t template
|
||||
// .............................................................................
|
||||
|
||||
ft = v8::FunctionTemplate::New(isolate);
|
||||
v8::Handle<v8::FunctionTemplate> ft = v8::FunctionTemplate::New(isolate);
|
||||
ft->SetClassName(TRI_V8_ASCII_STRING("ArangoDatabase"));
|
||||
|
||||
ArangoNS = ft->InstanceTemplate();
|
||||
v8::Handle<v8::ObjectTemplate> ArangoNS = ft->InstanceTemplate();
|
||||
ArangoNS->SetInternalFieldCount(2);
|
||||
ArangoNS->SetNamedPropertyHandler(MapGetVocBase);
|
||||
|
||||
|
@ -2627,7 +2643,9 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
|
|||
// JS_CompletionsVocbase, too for the auto-completion
|
||||
|
||||
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_engine"),
|
||||
JS_EngineServer);
|
||||
JS_Engine);
|
||||
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_engineStats"),
|
||||
JS_EngineStats);
|
||||
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_version"),
|
||||
JS_VersionServer);
|
||||
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_id"),
|
||||
|
@ -2651,6 +2669,11 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
|
|||
JS_UseDatabase);
|
||||
TRI_AddMethodVocbase(isolate, ArangoNS, TRI_V8_ASCII_STRING("_flushCache"),
|
||||
JS_FakeFlushCache, true);
|
||||
|
||||
v8g->VocbaseTempl.Reset(isolate, ArangoNS);
|
||||
TRI_AddGlobalFunctionVocbase(isolate,
|
||||
TRI_V8_ASCII_STRING("ArangoDatabase"),
|
||||
ft->GetFunction());
|
||||
|
||||
TRI_InitV8Statistics(isolate, context);
|
||||
|
||||
|
@ -2659,11 +2682,6 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
|
|||
TRI_InitV8Collections(context, vocbase, v8g, isolate, ArangoNS);
|
||||
TRI_InitV8Views(context, vocbase, v8g, isolate, ArangoNS);
|
||||
|
||||
v8g->VocbaseTempl.Reset(isolate, ArangoNS);
|
||||
TRI_AddGlobalFunctionVocbase(isolate,
|
||||
TRI_V8_ASCII_STRING("ArangoDatabase"),
|
||||
ft->GetFunction());
|
||||
|
||||
TRI_InitV8cursor(context, v8g);
|
||||
|
||||
// .............................................................................
|
||||
|
@ -2767,7 +2785,7 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
|
|||
|
||||
TRI_AddGlobalFunctionVocbase(isolate,
|
||||
TRI_V8_ASCII_STRING("DECODE_REV"),
|
||||
JS_DecodeRev);
|
||||
JS_DecodeRev, true);
|
||||
|
||||
TRI_AddGlobalFunctionVocbase(isolate,
|
||||
TRI_V8_ASCII_STRING("ARANGODB_CONTEXT"),
|
||||
|
@ -2780,12 +2798,12 @@ void TRI_InitV8VocBridge(v8::Isolate* isolate, v8::Handle<v8::Context> context,
|
|||
|
||||
v8::Handle<v8::Object> v = WrapVocBase(isolate, vocbase);
|
||||
if (v.IsEmpty()) {
|
||||
LOG_TOPIC(ERR, arangodb::Logger::FIXME) << "out of memory when initializing VocBase";
|
||||
} else {
|
||||
TRI_AddGlobalVariableVocbase(isolate, TRI_V8_ASCII_STRING("db"),
|
||||
v);
|
||||
LOG_TOPIC(FATAL, arangodb::Logger::FIXME) << "out of memory when initializing VocBase";
|
||||
FATAL_ERROR_ABORT();
|
||||
}
|
||||
|
||||
TRI_AddGlobalVariableVocbase(isolate, TRI_V8_ASCII_STRING("db"), v);
|
||||
|
||||
// add collections cache object
|
||||
context->Global()->ForceSet(TRI_V8_ASCII_STRING("__dbcache__"),
|
||||
v8::Object::New(isolate), v8::DontEnum);
|
||||
|
|
Loading…
Reference in New Issue