/*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(" <