Skip to content

Commit

Permalink
report: use DiagnosticFilename for default filename
Browse files Browse the repository at this point in the history
PR-URL: nodejs#26647
Reviewed-By: Colin Ihrig <cjihrig@gmail.com>
Reviewed-By: Ruben Bridgewater <ruben@bridgewater.de>
Reviewed-By: James M Snell <jasnell@gmail.com>
Reviewed-By: Joyee Cheung <joyeec9h3@gmail.com>
  • Loading branch information
richardlau authored and targos committed Mar 27, 2019
1 parent 4bf7138 commit 391c311
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 31 deletions.
4 changes: 2 additions & 2 deletions doc/api/report.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ is provided below for reference.
"header": {
"event": "exception",
"trigger": "Exception",
"filename": "report.20181221.005011.8974.001.json",
"filename": "report.20181221.005011.8974.0.001.json",
"dumpEventTime": "2018-12-21T00:50:11Z",
"dumpEventTimeStamp": "1545371411331",
"processId": 8974,
Expand Down Expand Up @@ -471,7 +471,7 @@ triggered using the Node.js REPL:
```raw
$ node
> process.report.writeReport();
Writing Node.js report to file: report.20181126.091102.8480.001.json
Writing Node.js report to file: report.20181126.091102.8480.0.001.json
Node.js report completed
>
```
Expand Down
35 changes: 8 additions & 27 deletions src/node_report.cc
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ constexpr double SEC_PER_MICROS = 1e-6;

namespace report {
using node::arraysize;
using node::DiagnosticFilename;
using node::Environment;
using node::Mutex;
using node::NativeSymbolDebuggingContext;
Expand Down Expand Up @@ -92,46 +93,26 @@ std::string TriggerNodeReport(Isolate* isolate,
const char* trigger,
const std::string& name,
Local<String> stackstr) {
std::ostringstream oss;
std::string filename;
std::shared_ptr<PerIsolateOptions> options;
if (env != nullptr) options = env->isolate_data()->options();

// Obtain the current time and the pid (platform dependent)
// Obtain the current time.
TIME_TYPE tm_struct;
LocalTime(&tm_struct);
// Determine the required report filename. In order of priority:
// 1) supplied on API 2) configured on startup 3) default generated
if (!name.empty()) {
// Filename was specified as API parameter, use that
oss << name;
// Filename was specified as API parameter.
filename = name;
} else if (env != nullptr && options->report_filename.length() > 0) {
// File name was supplied via start-up option, use that
oss << options->report_filename;
// File name was supplied via start-up option.
filename = options->report_filename;
} else {
// Construct the report filename, with timestamp, pid and sequence number
oss << "report";
#ifdef _WIN32
oss << "." << std::setfill('0') << std::setw(4) << tm_struct.wYear;
oss << std::setfill('0') << std::setw(2) << tm_struct.wMonth;
oss << std::setfill('0') << std::setw(2) << tm_struct.wDay;
oss << "." << std::setfill('0') << std::setw(2) << tm_struct.wHour;
oss << std::setfill('0') << std::setw(2) << tm_struct.wMinute;
oss << std::setfill('0') << std::setw(2) << tm_struct.wSecond;
#else // UNIX, OSX
oss << "." << std::setfill('0') << std::setw(4) << tm_struct.tm_year + 1900;
oss << std::setfill('0') << std::setw(2) << tm_struct.tm_mon + 1;
oss << std::setfill('0') << std::setw(2) << tm_struct.tm_mday;
oss << "." << std::setfill('0') << std::setw(2) << tm_struct.tm_hour;
oss << std::setfill('0') << std::setw(2) << tm_struct.tm_min;
oss << std::setfill('0') << std::setw(2) << tm_struct.tm_sec;
#endif
oss << "." << uv_os_getpid();
oss << "." << std::setfill('0') << std::setw(3) << ++seq;
oss << ".json";
filename = *DiagnosticFilename(env != nullptr ? env->thread_id() : 0,
"report", "json", seq++);
}

filename = oss.str();
// Open the report file stream for writing. Supports stdout/err,
// user-specified or (default) generated name
std::ofstream outfile;
Expand Down
4 changes: 2 additions & 2 deletions test/common/report.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,8 +7,8 @@ const path = require('path');

function findReports(pid, dir) {
// Default filenames are of the form
// report.<date>.<time>.<pid>.<seq>.json
const format = '^report\\.\\d+\\.\\d+\\.' + pid + '\\.\\d+\\.json$';
// report.<date>.<time>.<pid>.<tid>.<seq>.json
const format = '^report\\.\\d+\\.\\d+\\.' + pid + '\\.\\d+\\.\\d+\\.json$';
const filePattern = new RegExp(format);
const files = fs.readdirSync(dir);
const results = [];
Expand Down

0 comments on commit 391c311

Please sign in to comment.