mirror of https://gitee.com/bigwinds/arangodb
make arangovpack work without any config file specified (#5224)
This commit is contained in:
parent
2870b8f586
commit
a7555e0bf3
|
@ -1,6 +1,9 @@
|
||||||
devel
|
devel
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
* added `--json` option to arangovpack, allowing to treat its input as plain JSON data
|
||||||
|
make arangovpack work without any configuration file
|
||||||
|
|
||||||
* added experimental arangodb startup option `--javascript.enabled` to enable/disable the initialization
|
* added experimental arangodb startup option `--javascript.enabled` to enable/disable the initialization
|
||||||
of the V8 JavaScript engine. Only expected to work on single-servers and agency deployments
|
of the V8 JavaScript engine. Only expected to work on single-servers and agency deployments
|
||||||
|
|
||||||
|
|
|
@ -113,6 +113,7 @@ VPackFeature::VPackFeature(application_features::ApplicationServer* server,
|
||||||
: ApplicationFeature(server, "VPack"),
|
: ApplicationFeature(server, "VPack"),
|
||||||
_result(result),
|
_result(result),
|
||||||
_prettyPrint(true),
|
_prettyPrint(true),
|
||||||
|
_jsonInput(false),
|
||||||
_hexInput(false),
|
_hexInput(false),
|
||||||
_printNonJson(true) {
|
_printNonJson(true) {
|
||||||
requiresElevatedPrivileges(false);
|
requiresElevatedPrivileges(false);
|
||||||
|
@ -133,6 +134,9 @@ void VPackFeature::collectOptions(
|
||||||
options->addOption(
|
options->addOption(
|
||||||
"--hex", "read hex-encoded input",
|
"--hex", "read hex-encoded input",
|
||||||
new BooleanParameter(&_hexInput));
|
new BooleanParameter(&_hexInput));
|
||||||
|
options->addOption(
|
||||||
|
"--json", "treat input as JSON",
|
||||||
|
new BooleanParameter(&_jsonInput));
|
||||||
options->addOption(
|
options->addOption(
|
||||||
"--print-non-json", "print non-JSON types",
|
"--print-non-json", "print non-JSON types",
|
||||||
new BooleanParameter(&_printNonJson));
|
new BooleanParameter(&_printNonJson));
|
||||||
|
@ -169,17 +173,32 @@ void VPackFeature::start() {
|
||||||
(_printNonJson ? VPackOptions::ConvertUnsupportedType : VPackOptions::FailOnUnsupportedType);
|
(_printNonJson ? VPackOptions::ConvertUnsupportedType : VPackOptions::FailOnUnsupportedType);
|
||||||
options.customTypeHandler = &customTypeHandler;
|
options.customTypeHandler = &customTypeHandler;
|
||||||
|
|
||||||
try {
|
VPackSlice slice;
|
||||||
VPackValidator validator(&options);
|
std::shared_ptr<VPackBuilder> builder;
|
||||||
validator.validate(s.c_str(), s.size(), false);
|
|
||||||
} catch (std::exception const& ex) {
|
|
||||||
std::cerr << "Invalid VPack input while processing infile '" << _inputFile
|
|
||||||
<< "': " << ex.what() << std::endl;
|
|
||||||
*_result = TRI_ERROR_INTERNAL;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
VPackSlice const slice(s.c_str());
|
if (_jsonInput) {
|
||||||
|
try {
|
||||||
|
builder = VPackParser::fromJson(s);
|
||||||
|
slice = builder->slice();
|
||||||
|
} catch (std::exception const& ex) {
|
||||||
|
std::cerr << "Invalid JSON input while processing infile '" << _inputFile
|
||||||
|
<< "': " << ex.what() << std::endl;
|
||||||
|
*_result = TRI_ERROR_INTERNAL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
try {
|
||||||
|
VPackValidator validator(&options);
|
||||||
|
validator.validate(s.c_str(), s.size(), false);
|
||||||
|
} catch (std::exception const& ex) {
|
||||||
|
std::cerr << "Invalid VPack input while processing infile '" << _inputFile
|
||||||
|
<< "': " << ex.what() << std::endl;
|
||||||
|
*_result = TRI_ERROR_INTERNAL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
slice = VPackSlice(s.data());
|
||||||
|
}
|
||||||
|
|
||||||
VPackBuffer<char> buffer(4096);
|
VPackBuffer<char> buffer(4096);
|
||||||
VPackCharBufferSink sink(&buffer);
|
VPackCharBufferSink sink(&buffer);
|
||||||
|
@ -220,10 +239,10 @@ void VPackFeature::start() {
|
||||||
|
|
||||||
// cppcheck-suppress *
|
// cppcheck-suppress *
|
||||||
if (!toStdOut) {
|
if (!toStdOut) {
|
||||||
std::cout << "Successfully converted JSON infile '" << _inputFile << "'"
|
std::cout << "Successfully processed infile '" << _inputFile << "'"
|
||||||
<< std::endl;
|
<< std::endl;
|
||||||
std::cout << "VPack Infile size: " << s.size() << std::endl;
|
std::cout << "Infile size: " << s.size() << std::endl;
|
||||||
std::cout << "JSON Outfile size: " << buffer.size() << std::endl;
|
std::cout << "Outfile size: " << buffer.size() << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
*_result = TRI_ERROR_NO_ERROR;
|
*_result = TRI_ERROR_NO_ERROR;
|
||||||
|
|
|
@ -44,6 +44,7 @@ class VPackFeature final
|
||||||
std::string _inputFile;
|
std::string _inputFile;
|
||||||
std::string _outputFile;
|
std::string _outputFile;
|
||||||
bool _prettyPrint;
|
bool _prettyPrint;
|
||||||
|
bool _jsonInput;
|
||||||
bool _hexInput;
|
bool _hexInput;
|
||||||
bool _printNonJson;
|
bool _printNonJson;
|
||||||
};
|
};
|
||||||
|
|
|
@ -50,7 +50,8 @@ int main(int argc, char* argv[]) {
|
||||||
|
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
server.addFeature(new ConfigFeature(&server, "arangovpack"));
|
// default is to use no config file
|
||||||
|
server.addFeature(new ConfigFeature(&server, "arangovpack", "none"));
|
||||||
server.addFeature(new LoggerFeature(&server, false));
|
server.addFeature(new LoggerFeature(&server, false));
|
||||||
server.addFeature(new RandomFeature(&server));
|
server.addFeature(new RandomFeature(&server));
|
||||||
server.addFeature(new ShellColorsFeature(&server));
|
server.addFeature(new ShellColorsFeature(&server));
|
||||||
|
|
|
@ -41,9 +41,10 @@ using namespace arangodb::rest;
|
||||||
using namespace arangodb::options;
|
using namespace arangodb::options;
|
||||||
|
|
||||||
ConfigFeature::ConfigFeature(application_features::ApplicationServer* server,
|
ConfigFeature::ConfigFeature(application_features::ApplicationServer* server,
|
||||||
std::string const& progname)
|
std::string const& progname,
|
||||||
|
std::string const& configFilename)
|
||||||
: ApplicationFeature(server, "Config"),
|
: ApplicationFeature(server, "Config"),
|
||||||
_file(""),
|
_file(configFilename),
|
||||||
_checkConfiguration(false),
|
_checkConfiguration(false),
|
||||||
_progname(progname) {
|
_progname(progname) {
|
||||||
setOptional(false);
|
setOptional(false);
|
||||||
|
|
|
@ -29,7 +29,8 @@ namespace arangodb {
|
||||||
class ConfigFeature final : public application_features::ApplicationFeature {
|
class ConfigFeature final : public application_features::ApplicationFeature {
|
||||||
public:
|
public:
|
||||||
ConfigFeature(application_features::ApplicationServer* server,
|
ConfigFeature(application_features::ApplicationServer* server,
|
||||||
std::string const& progname);
|
std::string const& progname,
|
||||||
|
std::string const& configFilename = "");
|
||||||
|
|
||||||
public:
|
public:
|
||||||
void collectOptions(std::shared_ptr<options::ProgramOptions>) override final;
|
void collectOptions(std::shared_ptr<options::ProgramOptions>) override final;
|
||||||
|
|
|
@ -130,7 +130,7 @@ static void throwFileReadError(std::string const& filename) {
|
||||||
strerror(res));
|
strerror(res));
|
||||||
LOG_TOPIC(TRACE, arangodb::Logger::FIXME) << message;
|
LOG_TOPIC(TRACE, arangodb::Logger::FIXME) << message;
|
||||||
|
|
||||||
THROW_ARANGO_EXCEPTION(TRI_ERROR_SYS_ERROR);
|
THROW_ARANGO_EXCEPTION_MESSAGE(TRI_ERROR_SYS_ERROR, message);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void fillStringBuffer(int fd, std::string const& filename,
|
static void fillStringBuffer(int fd, std::string const& filename,
|
||||||
|
|
Loading…
Reference in New Issue