1
0
Fork 0
arangodb/js/client/bootstrap/modules/internal.js

319 lines
8.8 KiB
JavaScript

/*jshint -W051:true */
/*eslint-disable */
(function () {
'use strict';
/*eslint-enable */
////////////////////////////////////////////////////////////////////////////////
/// @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
////////////////////////////////////////////////////////////////////////////////
var exports = require('internal');
////////////////////////////////////////////////////////////////////////////////
/// @brief hide global variables
////////////////////////////////////////////////////////////////////////////////
if (global.ArangoConnection) {
exports.ArangoConnection = global.ArangoConnection;
}
if (global.SYS_ARANGO) {
exports.arango = global.SYS_ARANGO;
delete global.SYS_ARANGO;
}
////////////////////////////////////////////////////////////////////////////////
/// @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';
},
transactions: function () {
if (exports.arango) {
return exports.arango.GET('/_admin/wal/transactions', '');
}
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 (shellAppender,jsonAppender, rawAppender) {
return function (method, url, body, headers) {
var response;
var curl;
var i;
var jsonBody = false;
if ((typeof body !== 'string') && (body !== undefined)) {
jsonBody = true;
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;
shellAppender(curl);
if (body !== undefined && body !== '' && body) {
rawAppender(' <<EOF\n');
if (jsonBody) {
jsonAppender(body);
}
else {
rawAppender(body);
}
rawAppender('\nEOF');
}
rawAppender('\n\n');
return response;
};
};
////////////////////////////////////////////////////////////////////////////////
/// @brief logs a raw response
////////////////////////////////////////////////////////////////////////////////
exports.appendRawResponse = function (appender, syntaxAppender) {
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) {
syntaxAppender(exports.inspect(response.body));
appender('\n');
}
};
};
////////////////////////////////////////////////////////////////////////////////
/// @brief logs a response in JSON
////////////////////////////////////////////////////////////////////////////////
exports.appendJsonResponse = function (appender, syntaxAppender) {
return function (response) {
var syntaxAppend = exports.appendRawResponse(syntaxAppender, syntaxAppender);
// 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);
syntaxAppend(response);
// restore original body
response.body = copy;
};
};
////////////////////////////////////////////////////////////////////////////////
/// @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) {
// noop
}
}());