mirror of https://gitee.com/bigwinds/arangodb
556 lines
21 KiB
C++
556 lines
21 KiB
C++
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief arango shell client base
|
|
///
|
|
/// @file
|
|
///
|
|
/// DISCLAIMER
|
|
///
|
|
/// Copyright 2004-2012 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 2012, triAGENS GmbH, Cologne, Germany
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef TRIAGENS_ARANGO_SHELL_ARANGO_CLIENT_H
|
|
#define TRIAGENS_ARANGO_SHELL_ARANGO_CLIENT_H 1
|
|
|
|
#include "Basics/Common.h"
|
|
|
|
#include "Rest/Endpoint.h"
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- forward declarations
|
|
// -----------------------------------------------------------------------------
|
|
|
|
namespace triagens {
|
|
namespace basics {
|
|
class ProgramOptionsDescription;
|
|
class ProgramOptions;
|
|
}
|
|
|
|
namespace rest {
|
|
class Endpoint;
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- class ArangoClient
|
|
// -----------------------------------------------------------------------------
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @addtogroup ArangoShell
|
|
/// @{
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
namespace arango {
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief arango shell client base
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
class ArangoClient {
|
|
private:
|
|
ArangoClient (const ArangoClient&);
|
|
ArangoClient operator= (const ArangoClient&);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- public constants
|
|
// -----------------------------------------------------------------------------
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @addtogroup ArangoShell
|
|
/// @{
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public:
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief default request timeout
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static double const DEFAULT_REQUEST_TIMEOUT;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief default number of retries
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static size_t const DEFAULT_RETRIES;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief default connection timeout
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static double const DEFAULT_CONNECTION_TIMEOUT;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color red
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_RED;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color blod red
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BOLD_RED;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color green
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_GREEN;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color bold green
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BOLD_GREEN;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color blue
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BLUE;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color bold blue
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BOLD_BLUE;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color yellow
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_YELLOW;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color yellow
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BOLD_YELLOW;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color white
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_WHITE;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color bold white
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BOLD_WHITE;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color black
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BLACK;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color bold black
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BOLD_BLACK;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color blink
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BLINK;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color bright
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_BRIGHT;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief color reset
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
static char const * COLOR_RESET;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- constructors and destructors
|
|
// -----------------------------------------------------------------------------
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @addtogroup ArangoShell
|
|
/// @{
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public:
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief constructor
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
ArangoClient ();
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- public methods
|
|
// -----------------------------------------------------------------------------
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @addtogroup ArangoShell
|
|
/// @{
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
public:
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sets up the general and logging options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void setupGeneral (triagens::basics::ProgramOptionsDescription& description);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sets up the color options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void setupColors (triagens::basics::ProgramOptionsDescription& description);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sets up the auto-complete options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void setupAutoComplete (triagens::basics::ProgramOptionsDescription& description);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sets up the pretty-printing options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void setupPrettyPrint (triagens::basics::ProgramOptionsDescription& description);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sets up the pager options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void setupPager (triagens::basics::ProgramOptionsDescription& description);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sets up the server options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void setupServer (triagens::basics::ProgramOptionsDescription& description);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief parses command line and config file and prepares logging
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void parse (triagens::basics::ProgramOptions&,
|
|
triagens::basics::ProgramOptionsDescription& description,
|
|
int argc,
|
|
char* argv[],
|
|
string const& initFilename);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief starts pager
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void startPager ();
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief stops pager
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void stopPager ();
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief print to pager
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void internalPrint (const char* format, const char* str = 0);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief print info message
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void printWelcomeInfo ();
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief print bye-bye
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void printByeBye ();
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief creates an new endpoint
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void createEndpoint ();
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief creates an new endpoint
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void createEndpoint (string const& definition);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief quiet start
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool quiet () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief deactivate colors
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool colors () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief gets the auto completion flag
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool autoComplete () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief use pretty print
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool prettyPrint () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief gets the output pager
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string const& outputPager () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief gets use pager
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool usePager () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sets use pager
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void setUsePager (bool);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief gets endpoint to connect to as string
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string const& endpointString () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief sets endpoint to connect to as string
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
void setEndpointString (string const&);
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief endpoint
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
triagens::rest::Endpoint* endpointServer() const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief user to send to endpoint
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string const& username () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief password to send to endpoint
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string const& password () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief connect timeout (in seconds)
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
double connectTimeout () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief request timeout (in seconds)
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
double requestTimeout () const;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- private variables
|
|
// -----------------------------------------------------------------------------
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @addtogroup ArangoShell
|
|
/// @{
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief configuration file
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string _configFile;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief log level
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string _logLevel;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief quiet start
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _quiet;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief use color options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _colorOptions;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief deactivate colors
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _noColors;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief use auto-complete options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _autoCompleteOptions;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief disable auto completion
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _noAutoComplete;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief use pretty-print options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _prettyPrintOptions;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief use pretty print
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _prettyPrint;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief use pager options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _pagerOptions;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief the output pager
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string _outputPager;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief the pager FILE
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
FILE* _pager;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief use pager
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _usePager;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief use server options
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _serverOptions;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief endpoint to connect to as string
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string _endpointString;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief endpoint
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
triagens::rest::Endpoint* _endpointServer;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief user to send to endpoint
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string _username;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief password to send to endpoint
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
string _password;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief whether or not a password was specified on the command line
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
bool _hasPassword;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief connect timeout (in seconds)
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
double _connectTimeout;
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @brief request timeout (in seconds)
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
double _requestTimeout;
|
|
};
|
|
}
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// @}
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#endif
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// --SECTION-- END-OF-FILE
|
|
// -----------------------------------------------------------------------------
|
|
|
|
// Local Variables:
|
|
// mode: outline-minor
|
|
// outline-regexp: "^\\(/// @brief\\|/// {@inheritDoc}\\|/// @addtogroup\\|/// @page\\|// --SECTION--\\|/// @\\}\\)"
|
|
// End:
|