mirror of https://gitee.com/bigwinds/arangodb
320 lines
9.5 KiB
JavaScript
320 lines
9.5 KiB
JavaScript
/*jshint -W051:true */
|
|
'use strict';
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief module "internal"
|
|
///
|
|
/// @file
|
|
///
|
|
/// DISCLAIMER
|
|
///
|
|
/// Copyright 2004-2013 triAGENS GmbH, Cologne, Germany
|
|
///
|
|
/// Licensed under the Apache License, Version 2.0 (the "License");
|
|
/// you may not use this file except in compliance with the License.
|
|
/// You may obtain a copy of the License at
|
|
///
|
|
/// http://www.apache.org/licenses/LICENSE-2.0
|
|
///
|
|
/// Unless required by applicable law or agreed to in writing, software
|
|
/// distributed under the License is distributed on an "AS IS" BASIS,
|
|
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
/// See the License for the specific language governing permissions and
|
|
/// limitations under the License.
|
|
///
|
|
/// Copyright holder is triAGENS GmbH, Cologne, Germany
|
|
///
|
|
/// @author Dr. Frank Celler
|
|
/// @author Copyright 2010-2013, triAGENS GmbH, Cologne, Germany
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- Module "internal"
|
|
// -----------------------------------------------------------------------------
|
|
|
|
(function () {
|
|
|
|
var exports = require("internal");
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief hide global variables
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
if (global.ArangoConnection) {
|
|
exports.ArangoConnection = global.ArangoConnection;
|
|
delete global.ArangoConnection;
|
|
}
|
|
|
|
if (global.SYS_ARANGO) {
|
|
exports.arango = global.SYS_ARANGO;
|
|
delete global.SYS_ARANGO;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- private functions
|
|
// -----------------------------------------------------------------------------
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief write-ahead log functionality
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.wal = {
|
|
flush: function (waitForSync, waitForCollector) {
|
|
if (exports.arango) {
|
|
var wfs = waitForSync ? "true" : "false";
|
|
var wfc = waitForCollector ? "true" : "false";
|
|
exports.arango.PUT("/_admin/wal/flush?waitForSync=" + wfs + "&waitForCollector=" + wfc, "");
|
|
return;
|
|
}
|
|
|
|
throw "not connected";
|
|
},
|
|
|
|
properties: function (value) {
|
|
if (exports.arango) {
|
|
if (value !== undefined) {
|
|
return exports.arango.PUT("/_admin/wal/properties", JSON.stringify(value));
|
|
}
|
|
|
|
return exports.arango.GET("/_admin/wal/properties", "");
|
|
}
|
|
|
|
throw "not connected";
|
|
}
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief reloads the AQL user functions
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.reloadAqlFunctions = function () {
|
|
if (exports.arango) {
|
|
exports.arango.POST("/_admin/aql/reload", "");
|
|
return;
|
|
}
|
|
|
|
throw "not connected";
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief rebuilds the routing cache
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.reloadRouting = function () {
|
|
if (exports.arango) {
|
|
exports.arango.POST("/_admin/routing/reload", "");
|
|
return;
|
|
}
|
|
|
|
throw "not connected";
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief rebuilds the routing cache
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.routingCache = function () {
|
|
if (exports.arango) {
|
|
return exports.arango.GET("/_admin/routing/routes", "");
|
|
|
|
}
|
|
|
|
throw "not connected";
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief rebuilds the authentication cache
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.reloadAuth = function () {
|
|
if (exports.arango) {
|
|
exports.arango.POST("/_admin/auth/reload", "");
|
|
return;
|
|
}
|
|
|
|
throw "not connected";
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief execute javascript file on the server
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.executeServer = function (body) {
|
|
if (exports.arango) {
|
|
return exports.arango.POST("/_admin/execute", body);
|
|
}
|
|
|
|
throw "not connected";
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief logs a request in curl format
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.appendCurlRequest = function (appender) {
|
|
return function (method, url, body, headers) {
|
|
var response;
|
|
var curl;
|
|
var i;
|
|
|
|
if ((typeof body !== 'string') && (body !== undefined)) {
|
|
body = exports.inspect(body);
|
|
}
|
|
|
|
curl = "shell> curl ";
|
|
|
|
if (method === 'POST') {
|
|
response = exports.arango.POST_RAW(url, body, headers);
|
|
curl += "-X " + method + " ";
|
|
}
|
|
else if (method === 'PUT') {
|
|
response = exports.arango.PUT_RAW(url, body, headers);
|
|
curl += "-X " + method + " ";
|
|
}
|
|
else if (method === 'GET') {
|
|
response = exports.arango.GET_RAW(url, headers);
|
|
}
|
|
else if (method === 'DELETE') {
|
|
response = exports.arango.DELETE_RAW(url, headers);
|
|
curl += "-X " + method + " ";
|
|
}
|
|
else if (method === 'PATCH') {
|
|
response = exports.arango.PATCH_RAW(url, body, headers);
|
|
curl += "-X " + method + " ";
|
|
}
|
|
else if (method === 'HEAD') {
|
|
response = exports.arango.HEAD_RAW(url, headers);
|
|
curl += "-X " + method + " ";
|
|
}
|
|
else if (method === 'OPTION') {
|
|
response = exports.arango.OPTION_RAW(url, body, headers);
|
|
curl += "-X " + method + " ";
|
|
}
|
|
if (headers !== undefined && headers !== "") {
|
|
for (i in headers) {
|
|
if (headers.hasOwnProperty(i)) {
|
|
curl += "--header \'" + i + ": " + headers[i] + "\' ";
|
|
}
|
|
}
|
|
}
|
|
|
|
if (body !== undefined && body !== "") {
|
|
curl += "--data-binary @- ";
|
|
}
|
|
|
|
curl += "--dump - http://localhost:8529" + url;
|
|
|
|
appender(curl);
|
|
|
|
if (body !== undefined && body !== "" && body) {
|
|
appender(" <<EOF\n");
|
|
appender(body);
|
|
appender("\nEOF");
|
|
}
|
|
appender("\n\n");
|
|
return response;
|
|
};
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief logs a raw response
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.appendRawResponse = function (appender) {
|
|
return function (response) {
|
|
var key;
|
|
var headers = response.headers;
|
|
|
|
// generate header
|
|
appender("HTTP/1.1 " + headers['http/1.1'] + "\n");
|
|
|
|
for (key in headers) {
|
|
if (headers.hasOwnProperty(key)) {
|
|
if (key !== 'http/1.1' && key !== 'server' && key !== 'connection'
|
|
&& key !== 'content-length') {
|
|
appender(key + ": " + headers[key] + "\n");
|
|
}
|
|
}
|
|
}
|
|
|
|
appender("\n");
|
|
|
|
// append body
|
|
if (response.body !== undefined) {
|
|
appender(exports.inspect(response.body));
|
|
appender("\n");
|
|
}
|
|
};
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief logs a response in JSON
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.appendJsonResponse = function (appender) {
|
|
return function (response) {
|
|
var rawAppend = exports.appendRawResponse(appender);
|
|
|
|
// copy original body (this is necessary because "response" is passed by reference)
|
|
var copy = response.body;
|
|
// overwrite body with parsed JSON && append
|
|
response.body = JSON.parse(response.body);
|
|
rawAppend(response);
|
|
// restore original body
|
|
response.body = copy;
|
|
};
|
|
};
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- public functions
|
|
// -----------------------------------------------------------------------------
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief log function
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
exports.log = function (level, msg) {
|
|
exports.output(level, ": ", msg, "\n");
|
|
};
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sprintf wrapper
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
try {
|
|
if (typeof window !== 'undefined') {
|
|
exports.sprintf = function (format) {
|
|
var n = arguments.length;
|
|
if (n === 0) {
|
|
return "";
|
|
}
|
|
if (n <= 1) {
|
|
return String(format);
|
|
}
|
|
|
|
var i;
|
|
var args = [ ];
|
|
for (i = 1; i < arguments.length; ++i) {
|
|
args.push(arguments[i]);
|
|
}
|
|
i = 0;
|
|
|
|
return format.replace(/%[dfs]/, function () {
|
|
return String(args[i++]);
|
|
});
|
|
};
|
|
}
|
|
}
|
|
catch (e) {}
|
|
|
|
}());
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- END-OF-FILE
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// Local Variables:
|
|
// mode: outline-minor
|
|
// outline-regexp: "/// @brief\\|/// @addtogroup\\|/// @page\\|// --SECTION--\\|/// @\\}\\|/\\*jslint"
|
|
// End:
|