//////////////////////////////////////////////////////////////////////////////// /// DISCLAIMER /// /// Copyright 2016 ArangoDB 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 ArangoDB GmbH, Cologne, Germany /// /// @author Dr. Frank Celler //////////////////////////////////////////////////////////////////////////////// #ifndef ARANGODB_APPLICATION_FEATURES_CLIENT_FEATURE_H #define ARANGODB_APPLICATION_FEATURES_CLIENT_FEATURE_H 1 #include "ApplicationFeatures/ApplicationFeature.h" #include "ApplicationFeatures/HttpEndpointProvider.h" namespace arangodb { class Endpoint; namespace httpclient { class GeneralClientConnection; class SimpleHttpClient; } class ClientFeature final : public application_features::ApplicationFeature, public HttpEndpointProvider { public: constexpr static double const DEFAULT_REQUEST_TIMEOUT = 1200.0; constexpr static double const DEFAULT_CONNECTION_TIMEOUT = 5.0; constexpr static size_t const DEFAULT_RETRIES = 2; constexpr static double const LONG_TIMEOUT = 86400.0; public: ClientFeature(application_features::ApplicationServer* server, double connectionTimeout = DEFAULT_CONNECTION_TIMEOUT, double requestTimeout = DEFAULT_REQUEST_TIMEOUT); public: void collectOptions(std::shared_ptr) override final; void validateOptions(std::shared_ptr) override final; void prepare() override final; public: std::string const& databaseName() const { return _databaseName; } bool authentication() const { return _authentication; } std::string const& endpoint() const { return _endpoint; } void setEndpoint(std::string const& value) { _endpoint = value; } std::string const& username() const { return _username; } void setUsername(std::string const& value) { _username = value; } std::string const& password() const { return _password; } void setPassword(std::string const& value) { _password = value; } double connectionTimeout() const { return _connectionTimeout; } double requestTimeout() const { return _requestTimeout; } uint64_t maxPacketSize() const { return _maxPacketSize; } uint64_t sslProtocol() const { return _sslProtocol; } public: std::unique_ptr createConnection(); std::unique_ptr createConnection( std::string const& definition); std::unique_ptr createHttpClient(); std::unique_ptr createHttpClient( std::string const& definition); std::vector httpEndpoints() override; void setDatabaseName(std::string const& databaseName) { _databaseName = databaseName; } void setRetries(size_t retries) { _retries = retries; } void setWarn(bool warn) { _warn = warn; } static int runMain(int argc, char* argv[], std::function const& mainFunc); private: std::string _databaseName; bool _authentication; std::string _endpoint; std::string _username; std::string _password; double _connectionTimeout; double _requestTimeout; uint64_t _maxPacketSize; uint64_t _sslProtocol; private: size_t _retries; bool _warn; bool _haveServerPassword; }; } #endif