diff --git a/lib/internal/process/report.js b/lib/internal/process/report.js index 9889f913c3f81f..2ca7557620c0b2 100644 --- a/lib/internal/process/report.js +++ b/lib/internal/process/report.js @@ -60,6 +60,13 @@ const report = { validateBoolean(b, 'compact'); nr.setCompact(b); }, + get disableNetwork() { + return nr.getDisableNetwork(); + }, + set disableNetwork(b) { + validateBoolean(b, 'disableNetwork'); + nr.setDisableNetwork(b); + }, get signal() { return nr.getSignal(); }, diff --git a/src/node_options.cc b/src/node_options.cc index 7b5152172c5ce7..c807cc9bd6d90f 100644 --- a/src/node_options.cc +++ b/src/node_options.cc @@ -950,6 +950,11 @@ PerProcessOptionsParser::PerProcessOptionsParser( "generate diagnostic report on fatal (internal) errors", &PerProcessOptions::report_on_fatalerror, kAllowedInEnvvar); + AddOption("--report-disable-network", + "disable network interface diagnostics." + " (default: false)", + &PerProcessOptions::report_disable_network, + kAllowedInEnvvar); #ifdef NODE_HAVE_I18N_SUPPORT AddOption("--icu-data-dir", diff --git a/src/node_options.h b/src/node_options.h index 915151b7dc2904..374b27769b4ca9 100644 --- a/src/node_options.h +++ b/src/node_options.h @@ -306,6 +306,7 @@ class PerProcessOptions : public Options { bool report_compact = false; std::string report_directory; std::string report_filename; + bool report_disable_network = false; // TODO(addaleax): Some of these could probably be per-Environment. std::string use_largepages = "off"; diff --git a/src/node_report.cc b/src/node_report.cc index 54121cb6b48210..6514c3a194efeb 100644 --- a/src/node_report.cc +++ b/src/node_report.cc @@ -61,7 +61,8 @@ static void WriteNodeReport(Isolate* isolate, const std::string& filename, std::ostream& out, Local error, - bool compact); + bool compact, + bool disable_network); static void PrintVersionInformation(JSONWriter* writer); static void PrintJavaScriptErrorStack(JSONWriter* writer, Isolate* isolate, @@ -93,7 +94,8 @@ static void WriteNodeReport(Isolate* isolate, const std::string& filename, std::ostream& out, Local error, - bool compact) { + bool compact, + bool disable_network) { // Obtain the current time and the pid. TIME_TYPE tm_struct; DiagnosticFilename::LocalTime(&tm_struct); @@ -917,8 +919,14 @@ std::string TriggerNodeReport(Isolate* isolate, compact = per_process::cli_options->report_compact; } + bool disable_network; + { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + disable_network = per_process::cli_options->report_disable_network; + } + report::WriteNodeReport( - isolate, env, message, trigger, filename, *outstream, error, compact); + isolate, env, message, trigger, filename, *outstream, error, compact, disable_network); // Do not close stdout/stderr, only close files we opened. if (outfile.is_open()) { @@ -969,8 +977,13 @@ void GetNodeReport(Isolate* isolate, if (isolate != nullptr) { env = Environment::GetCurrent(isolate); } + bool disable_network; + { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + disable_network = per_process::cli_options->report_disable_network; + } report::WriteNodeReport( - isolate, env, message, trigger, "", out, error, false); + isolate, env, message, trigger, "", out, error, false, disable_network); } // External function to trigger a report, writing to a supplied stream. @@ -983,8 +996,13 @@ void GetNodeReport(Environment* env, if (env != nullptr) { isolate = env->isolate(); } + bool disable_network; + { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + disable_network = per_process::cli_options->report_disable_network; + } report::WriteNodeReport( - isolate, env, message, trigger, "", out, error, false); + isolate, env, message, trigger, "", out, error, false, disable_network); } } // namespace node diff --git a/src/node_report_module.cc b/src/node_report_module.cc index 58963fd5150b04..4cb654581eb65e 100644 --- a/src/node_report_module.cc +++ b/src/node_report_module.cc @@ -84,6 +84,19 @@ static void SetCompact(const FunctionCallbackInfo& info) { per_process::cli_options->report_compact = compact; } +static void GetDisableNetwork(const FunctionCallbackInfo& info) { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + info.GetReturnValue().Set(per_process::cli_options->report_disable_network); +} + +static void SetDisableNetwork(const FunctionCallbackInfo& info) { + Mutex::ScopedLock lock(per_process::cli_options_mutex); + Environment* env = Environment::GetCurrent(info); + Isolate* isolate = env->isolate(); + bool disable_network = info[0]->ToBoolean(isolate)->Value(); + per_process::cli_options->report_disable_network = disable_network; +} + static void GetDirectory(const FunctionCallbackInfo& info) { Mutex::ScopedLock lock(per_process::cli_options_mutex); Environment* env = Environment::GetCurrent(info); @@ -174,6 +187,8 @@ static void Initialize(Local exports, SetMethod(context, exports, "getReport", GetReport); SetMethod(context, exports, "getCompact", GetCompact); SetMethod(context, exports, "setCompact", SetCompact); + SetMethod(context, exports, "getDisableNetwork", GetDisableNetwork); + SetMethod(context, exports, "setDisableNetwork", SetDisableNetwork); SetMethod(context, exports, "getDirectory", GetDirectory); SetMethod(context, exports, "setDirectory", SetDirectory); SetMethod(context, exports, "getFilename", GetFilename); @@ -200,6 +215,8 @@ void RegisterExternalReferences(ExternalReferenceRegistry* registry) { registry->Register(GetReport); registry->Register(GetCompact); registry->Register(SetCompact); + registry->Register(GetDisableNetwork); + registry->Register(SetDisableNetwork); registry->Register(GetDirectory); registry->Register(SetDirectory); registry->Register(GetFilename);