mirror of https://gitee.com/bigwinds/arangodb
adding initial arangoexport
This commit is contained in:
parent
27c35dd782
commit
ff73c5bdc0
|
@ -96,6 +96,7 @@ set(ARANGODB_FRIENDLY_STRING "ArangoDB - the multi-model database")
|
|||
set(ARANGO_BENCH_FRIENDLY_STRING "arangobench - stress test program")
|
||||
set(ARANGO_DUMP_FRIENDLY_STRING "arangodump - export")
|
||||
set(ARANGO_RESTORE_FRIENDLY_STRING "arangrestore - importer")
|
||||
set(ARANGO_EXPORT_FRIENDLY_STRING "arangoexport - dataexporter")
|
||||
set(ARANGO_IMP_FRIENDLY_STRING "arangoimp - TSV/CSV/JSON importer")
|
||||
set(ARANGOSH_FRIENDLY_STRING "arangosh - commandline client")
|
||||
set(ARANGO_VPACK_FRIENDLY_STRING "arangovpack - vpack printer")
|
||||
|
@ -108,6 +109,7 @@ set(LIB_ARANGO_V8 arango_v8)
|
|||
set(BIN_ARANGOBENCH arangobench)
|
||||
set(BIN_ARANGOD arangod)
|
||||
set(BIN_ARANGODUMP arangodump)
|
||||
set(BIN_ARANGOEXPORT arangoexport)
|
||||
set(BIN_ARANGOIMP arangoimp)
|
||||
set(BIN_ARANGORESTORE arangorestore)
|
||||
set(BIN_ARANGOSH arangosh)
|
||||
|
|
|
@ -97,6 +97,52 @@ else ()
|
|||
add_dependencies(arangodump zlibstatic)
|
||||
endif ()
|
||||
|
||||
################################################################################
|
||||
## arangoexport
|
||||
################################################################################
|
||||
|
||||
if (MSVC)
|
||||
generate_product_version(ProductVersionFiles_arangoexport
|
||||
NAME arangoexport
|
||||
FILE_DESCRIPTION ${ARANGO_EXPORT_FRIENDLY_STRING}
|
||||
ICON ${ARANGO_ICON}
|
||||
VERSION_MAJOR ${CPACK_PACKAGE_VERSION_MAJOR}
|
||||
VERSION_MINOR ${CPACK_PACKAGE_VERSION_MINOR}
|
||||
VERSION_PATCH ${CPACK_PACKAGE_VERSION_PATCH}
|
||||
VERSION_REVISION ${BUILD_ID}
|
||||
)
|
||||
endif ()
|
||||
|
||||
add_executable(${BIN_ARANGOEXPORT}
|
||||
${ProductVersionFiles_arangoexport}
|
||||
${PROJECT_SOURCE_DIR}/lib/Basics/WorkMonitorDummy.cpp
|
||||
Export/ExportFeature.cpp
|
||||
Export/arangoexport.cpp
|
||||
Shell/ClientFeature.cpp
|
||||
Shell/ConsoleFeature.cpp
|
||||
V8Client/ArangoClientHelper.cpp
|
||||
)
|
||||
|
||||
target_link_libraries(${BIN_ARANGOEXPORT}
|
||||
${LIB_ARANGO}
|
||||
${MSVC_LIBS}
|
||||
${SYSTEM_LIBRARIES}
|
||||
boost_system
|
||||
boost_boost
|
||||
)
|
||||
|
||||
install(
|
||||
TARGETS ${BIN_ARANGOEXPORT}
|
||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR})
|
||||
|
||||
install_config(arangoexport)
|
||||
|
||||
if (NOT USE_PRECOMPILED_V8)
|
||||
add_dependencies(arangoexport zlibstatic v8_build) # v8_build includes ICU build
|
||||
else ()
|
||||
add_dependencies(arangoexport zlibstatic) # v8_build includes ICU build
|
||||
endif ()
|
||||
|
||||
################################################################################
|
||||
## arangoimp
|
||||
################################################################################
|
||||
|
|
|
@ -0,0 +1,121 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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 Manuel Baesler
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "ExportFeature.h"
|
||||
|
||||
#include "ApplicationFeatures/ApplicationServer.h"
|
||||
#include "Basics/FileUtils.h"
|
||||
#include "Basics/StringUtils.h"
|
||||
#include "Logger/Logger.h"
|
||||
#include "ProgramOptions/ProgramOptions.h"
|
||||
#include "Shell/ClientFeature.h"
|
||||
#include "SimpleHttpClient/GeneralClientConnection.h"
|
||||
#include "SimpleHttpClient/SimpleHttpClient.h"
|
||||
|
||||
using namespace arangodb;
|
||||
using namespace arangodb::basics;
|
||||
using namespace arangodb::httpclient;
|
||||
using namespace arangodb::options;
|
||||
|
||||
ExportFeature::ExportFeature(application_features::ApplicationServer* server,
|
||||
int* result)
|
||||
: ApplicationFeature(server, "Export"),
|
||||
_result(result) {
|
||||
requiresElevatedPrivileges(false);
|
||||
setOptional(false);
|
||||
startsAfter("Client");
|
||||
startsAfter("Config");
|
||||
startsAfter("Logger");
|
||||
}
|
||||
|
||||
void ExportFeature::collectOptions(
|
||||
std::shared_ptr<options::ProgramOptions> options) {
|
||||
}
|
||||
|
||||
void ExportFeature::validateOptions(
|
||||
std::shared_ptr<options::ProgramOptions> options) {
|
||||
auto const& positionals = options->processingResult()._positionals;
|
||||
size_t n = positionals.size();
|
||||
|
||||
/* if (1 == n) {
|
||||
// only take positional file name attribute into account if user
|
||||
// did not specify the --file option as well
|
||||
if (!options->processingResult().touched("--file")) {
|
||||
_filename = positionals[0];
|
||||
}
|
||||
} else if (1 < n) {
|
||||
LOG(FATAL) << "expecting at most one filename, got " +
|
||||
StringUtils::join(positionals, ", ");
|
||||
FATAL_ERROR_EXIT();
|
||||
} */
|
||||
}
|
||||
|
||||
void ExportFeature::start() {
|
||||
ClientFeature* client = application_features::ApplicationServer::getFeature<ClientFeature>("Client");
|
||||
|
||||
int ret = EXIT_SUCCESS;
|
||||
*_result = ret;
|
||||
|
||||
std::unique_ptr<SimpleHttpClient> httpClient;
|
||||
|
||||
try {
|
||||
httpClient = client->createHttpClient();
|
||||
} catch (...) {
|
||||
LOG(FATAL) << "cannot create server connection, giving up!";
|
||||
FATAL_ERROR_EXIT();
|
||||
}
|
||||
|
||||
httpClient->setLocationRewriter(static_cast<void*>(client), &rewriteLocation);
|
||||
httpClient->setUserNamePassword("/", client->username(), client->password());
|
||||
|
||||
// must stay here in order to establish the connection
|
||||
httpClient->getServerVersion();
|
||||
|
||||
if (!httpClient->isConnected()) {
|
||||
LOG(ERR) << "Could not connect to endpoint '" << client->endpoint()
|
||||
<< "', database: '" << client->databaseName() << "', username: '"
|
||||
<< client->username() << "'";
|
||||
LOG(FATAL) << httpClient->getErrorMessage() << "'";
|
||||
FATAL_ERROR_EXIT();
|
||||
}
|
||||
|
||||
// successfully connected
|
||||
std::cout << "Connected to ArangoDB '"
|
||||
<< httpClient->getEndpointSpecification() << "', version "
|
||||
<< httpClient->getServerVersion() << ", database: '"
|
||||
<< client->databaseName() << "', username: '" << client->username()
|
||||
<< "'" << std::endl;
|
||||
|
||||
|
||||
collectionExport(httpClient.get());
|
||||
graphExport(httpClient.get());
|
||||
|
||||
*_result = ret;
|
||||
}
|
||||
|
||||
void ExportFeature::collectionExport(SimpleHttpClient* httpClient) {
|
||||
|
||||
}
|
||||
|
||||
void ExportFeature::graphExport(SimpleHttpClient* httpClient) {
|
||||
|
||||
}
|
|
@ -0,0 +1,60 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// 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 Manuel Baesler
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef ARANGODB_EXPORT_EXPORT_FEATURE_H
|
||||
#define ARANGODB_EXPORT_EXPORT_FEATURE_H 1
|
||||
|
||||
#include "ApplicationFeatures/ApplicationFeature.h"
|
||||
#include "V8Client/ArangoClientHelper.h"
|
||||
|
||||
namespace arangodb {
|
||||
namespace httpclient {
|
||||
class GeneralClientConnection;
|
||||
class SimpleHttpClient;
|
||||
class SimpleHttpResult;
|
||||
}
|
||||
|
||||
class ExportFeature final : public application_features::ApplicationFeature,
|
||||
public ArangoClientHelper {
|
||||
public:
|
||||
ExportFeature(application_features::ApplicationServer* server,
|
||||
int* result);
|
||||
|
||||
public:
|
||||
void collectOptions(std::shared_ptr<options::ProgramOptions>) override;
|
||||
void validateOptions(
|
||||
std::shared_ptr<options::ProgramOptions> options) override;
|
||||
void start() override;
|
||||
|
||||
private:
|
||||
void collectionExport(httpclient::SimpleHttpClient* httpClient);
|
||||
void graphExport(httpclient::SimpleHttpClient* httpClient);
|
||||
|
||||
|
||||
private:
|
||||
// ...
|
||||
|
||||
int* _result;
|
||||
};
|
||||
}
|
||||
|
||||
#endif
|
|
@ -0,0 +1,83 @@
|
|||
////////////////////////////////////////////////////////////////////////////////
|
||||
/// DISCLAIMER
|
||||
///
|
||||
/// Copyright 2014-2016 ArangoDB GmbH, Cologne, Germany
|
||||
/// Copyright 2004-2014 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 ArangoDB GmbH, Cologne, Germany
|
||||
///
|
||||
/// @author Dr. Frank Celler
|
||||
////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "Basics/Common.h"
|
||||
#include "Basics/directories.h"
|
||||
|
||||
#include "ApplicationFeatures/ConfigFeature.h"
|
||||
#include "ApplicationFeatures/GreetingsFeature.h"
|
||||
#include "ApplicationFeatures/ShutdownFeature.h"
|
||||
#include "ApplicationFeatures/TempFeature.h"
|
||||
#include "ApplicationFeatures/VersionFeature.h"
|
||||
#include "Basics/ArangoGlobalContext.h"
|
||||
#include "Export/ExportFeature.h"
|
||||
#include "Logger/Logger.h"
|
||||
#include "Logger/LoggerFeature.h"
|
||||
#include "ProgramOptions/ProgramOptions.h"
|
||||
#include "Random/RandomFeature.h"
|
||||
#include "Shell/ClientFeature.h"
|
||||
#include "Ssl/SslFeature.h"
|
||||
|
||||
using namespace arangodb;
|
||||
using namespace arangodb::application_features;
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
ArangoGlobalContext context(argc, argv, BIN_DIRECTORY);
|
||||
context.installHup();
|
||||
|
||||
std::shared_ptr<options::ProgramOptions> options(new options::ProgramOptions(
|
||||
argv[0], "Usage: arangoexport [<options>]", "For more information use:", BIN_DIRECTORY));
|
||||
|
||||
ApplicationServer server(options, BIN_DIRECTORY);
|
||||
|
||||
int ret;
|
||||
|
||||
server.addFeature(new ClientFeature(&server));
|
||||
server.addFeature(new ConfigFeature(&server, "arangoexport"));
|
||||
server.addFeature(new GreetingsFeature(&server, "arangoexport"));
|
||||
server.addFeature(new ExportFeature(&server, &ret));
|
||||
server.addFeature(new LoggerFeature(&server, false));
|
||||
server.addFeature(new RandomFeature(&server));
|
||||
server.addFeature(new ShutdownFeature(&server, {"Export"}));
|
||||
server.addFeature(new SslFeature(&server));
|
||||
server.addFeature(new TempFeature(&server, "arangoexport"));
|
||||
server.addFeature(new VersionFeature(&server));
|
||||
|
||||
try {
|
||||
server.run(argc, argv);
|
||||
if (server.helpShown()) {
|
||||
// --help was displayed
|
||||
ret = EXIT_SUCCESS;
|
||||
}
|
||||
} catch (std::exception const& ex) {
|
||||
LOG(ERR) << "arangoexport terminated because of an unhandled exception: "
|
||||
<< ex.what();
|
||||
ret = EXIT_FAILURE;
|
||||
} catch (...) {
|
||||
LOG(ERR) << "arangoexport terminated because of an unhandled exception of "
|
||||
"unknown type";
|
||||
ret = EXIT_FAILURE;
|
||||
}
|
||||
|
||||
return context.exit(ret);
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
# config file for arangoexport
|
||||
|
||||
[server]
|
||||
endpoint = tcp://127.0.0.1:8529
|
||||
authentication = true
|
||||
# username = root
|
||||
# password =
|
||||
|
||||
[log]
|
||||
file = -
|
|
@ -0,0 +1,7 @@
|
|||
[server]
|
||||
authentication = false
|
||||
# username = root
|
||||
# password =
|
||||
|
||||
[log]
|
||||
file = -
|
Loading…
Reference in New Issue