Giter Club home page Giter Club logo

node-report's Introduction

THIS PROJECT HAS BEEN ARCHIVED.

Node-report is now supported as part of Node.js itself.

node-report

Delivers a human-readable diagnostic summary, written to file.

The report is intended for development, test and production use, to capture and preserve information for problem determination. It includes JavaScript and native stack traces, heap statistics, platform information and resource usage etc. With the report enabled, reports can be triggered on unhandled exceptions, fatal errors, signals and calls to a JavaScript API.

Supports Node.js versions 8, 10 and 12 on AIX, Linux, macOS, SmartOS and Windows. Node.js 12 and later contain similar functionality in the built-in Diagnostic Report feature.

NOTE: This repo will be archived and the npm package will be sunset in lieu of Diagnostic Report, when Node.js 10 enters End-of-Life.

Usage

npm install node-report
node -r node-report app.js

A report will be triggered automatically on unhandled exceptions and fatal error events (for example out of memory errors), and can also be triggered by sending a USR2 signal to a Node.js process (not supported on Windows).

A report can also be triggered via an API call from a JavaScript application.

var nodereport = require('node-report');
nodereport.triggerReport();

The content of a report can also be returned as a JavaScript string via an API call from a JavaScript application.

var nodereport = require('node-report');
var report_str = nodereport.getReport();
console.log(report_str);

The API can be used without adding the automatic exception and fatal error hooks and the signal handler, as follows:

var nodereport = require('node-report/api');
nodereport.triggerReport();

Content of the report consists of a header section containing the event type, date, time, PID and Node version, sections containing JavaScript and native stack traces, a section containing V8 heap information, a section containing libuv handle information and an OS platform information section showing CPU and memory usage and system limits. An example report can be triggered using the Node.js REPL:

$ node
> nodereport = require('node-report')
> nodereport.triggerReport()
Writing Node.js report to file: node-report.20161020.091102.8480.001.txt
Node.js report completed
>

When a report is triggered, start and end messages are issued to stderr and the filename of the report is returned to the caller. The default filename includes the date, time, PID and a sequence number. Alternatively, a filename can be specified as a parameter on the triggerReport() call.

nodereport.triggerReport("myReportName");

Both triggerReport() and getReport() can take an optional Error object as a parameter. If an Error object is provided, the message and stack trace from the object will be included in the report in the JavaScript Exception Details section. When using node-report to handle errors in a callback or an exception handler this allows the report to include the location of the original error as well as where it was handled. If both a filename and Error object are passed to triggerReport() the Error object should be the second parameter.

try {
  process.chdir('/foo/foo');
} catch (err) {
  nodereport.triggerReport(err);
}
  ...
});

Configuration

Additional configuration is available using the following APIs:

var nodereport = require('node-report/api');
nodereport.setEvents("exception+fatalerror+signal+apicall");
nodereport.setSignal("SIGUSR2|SIGQUIT");
nodereport.setFileName("stdout|stderr|<filename>");
nodereport.setDirectory("<full path>");
nodereport.setVerbose("yes|no");

Configuration on module initialization is also available via environment variables:

export NODEREPORT_EVENTS=exception+fatalerror+signal+apicall
export NODEREPORT_SIGNAL=SIGUSR2|SIGQUIT
export NODEREPORT_FILENAME=stdout|stderr|<filename>
export NODEREPORT_DIRECTORY=<full path>
export NODEREPORT_VERBOSE=yes|no

Examples

To see examples of reports generated from these events you can run the demonstration applications provided in the node-report github repository. These are Node.js applications which will prompt you to trigger the required event.

  1. api.js - report triggered by JavaScript API call.
  2. exception.js - report triggered by unhandled exception.
  3. fatalerror.js - report triggered by fatal error on JavaScript heap out of memory.
  4. loop.js - looping application, report triggered using kill -USR2 <pid>.

License

Licensed under the MIT License.

node-report's People

Contributors

bidipyne avatar dmastag avatar fishrock123 avatar gabylb avatar gireeshpunathil avatar hhellyer avatar lakshmiswethag avatar mhdawson avatar mtreerungroj avatar richardlau avatar rnchamberlain avatar sam-github avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

node-report's Issues

Add node-report to node core

I would like to propose that the node-report module be added as a new core module, with the ability to trigger it via command line flag as opposed to preload module, e.g. node --node-report.

This would require a few steps:

  • Parts of the code would need to be reworked to not depend on NaN
  • Tests would need to be refactored to not depend on tap
  • We would need a strategy for continuing to support the standalone native module for older Node.js versions (much like we do with readable-streams.

Ping @mhdawson

Reporting of machine name broken on Windows

Looks like the switch to use C++ streams in #48 has broken the reporting of the machine name on Windows:

Before:

Machine: IBM826-R93F9G4

After:

Machine: 000000000218DFB8 000000000218DFD8

Allowing user to access report content directly rather than reading back from the file.

We've had a feature request to allow users of the nodereport api to get the content of the nodereport file directly rather than having to read it back in from the file. This would make it easier to embed nodereport in other tools.

I'm going to take a look at this but up front I can think of some important limitations:

  • This will only work on API calls. We can't send the content of nodereport to a callback on a fatal error. (At that point Node.js isn't available for use.)

  • We will have to return all the content in one go, synchronously. If we stream it back bit by bit to a callback then code is running and changing the state of Node.js while we try and report it's state. The response from nodereport is a snapshot of a point in time.

I'm going to do some more investigation but any other feedback into the design would be welcome.

Need to capture caller that triggers any form of OOM

My node-report captures looks like this

================================================================================
==== Node Report ===============================================================

Event: Allocation failed - JavaScript heap out of memory, location: "CALL_AND_RETRY_LAST"
Filename: node-report.20171124.170746.22912.001.txt
Dump event time:  2017/11/24 17:07:46
Module load time: 2017/11/24 08:18:08
Process ID: 22912
Command line: nodejs --max_old_space_size=4096 app.js

Node.js version: v8.9.1
(http_parser: 2.7.0, v8: 6.1.534.47, uv: 1.15.0, zlib: 1.2.11, ares: 1.10.1-DEV,
 modules: 57, nghttp2: 1.25.0, openssl: 1.0.2m, icu: 59.1, unicode: 9.0,
 cldr: 31.0.1, tz: 2017b)

node-report version: 2.2.1 (built against Node.js v8.9.1, glibc 2.23, 64 bit)

OS version: Linux 4.10.0-38-generic 16.04-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017
(glibc: 2.23)

Machine: Ubuntu-1604

================================================================================
==== JavaScript Stack Trace ====================================================

No stack trace available

================================================================================
==== Native Stack Trace ========================================================

 0: [pc=0x7fa82d1e62e3]  [/home/project/prod/node_modules/node-report/api.node]
 1: [pc=0xaea062] v8::Utils::ReportOOMFailure(char const*, bool) [nodejs]
 2: [pc=0xaea274] v8::internal::V8::FatalProcessOutOfMemory(char const*, bool) [nodejs]
 3: [pc=0xe5194b] v8::internal::Factory::NewRawOneByteString(int, v8::internal::PretenureFlag) [nodejs]
 4: [pc=0xfa2fe2] v8::internal::String::SlowFlatten(v8::internal::Handle<v8::internal::ConsString>, v8::internal::PretenureFlag) [nodejs]
 5: [pc=0xae7aec] v8::internal::String::Flatten(v8::internal::Handle<v8::internal::String>, v8::internal::PretenureFlag) [nodejs]
 6: [pc=0xb1555b] v8::String::WriteUtf8(char*, int, int*, int) const [nodejs]
 7: [pc=0x1298ee0] node::StringBytes::Write(v8::Isolate*, char*, unsigned long, v8::Local<v8::Value>, node::encoding, int*) [nodejs]
 8: [pc=0x123db1f] node::Buffer::New(v8::Isolate*, v8::Local<v8::String>, node::encoding) [nodejs]
 9: [pc=0x123dd24]  [nodejs]
10: [pc=0x2357061fe807] 

================================================================================
==== JavaScript Heap and Garbage Collector =====================================

Heap space name: new_space
    Memory size: 1,048,576 bytes, committed memory: 17,408 bytes
    Capacity: 1,031,168 bytes, used: 0 bytes, available: 1,031,168 bytes
Heap space name: old_space
    Memory size: 5,140,992,000 bytes, committed memory: 4,951,833,416 bytes
    Capacity: 4,360,313,520 bytes, used: 4,282,770,832 bytes, available: 77,542,688 bytes
Heap space name: code_space
    Memory size: 2,621,440 bytes, committed memory: 2,433,824 bytes
    Capacity: 2,156,512 bytes, used: 2,156,512 bytes, available: 0 bytes
Heap space name: map_space
    Memory size: 1,593,344 bytes, committed memory: 760,112 bytes
    Capacity: 529,848 bytes, used: 529,848 bytes, available: 0 bytes
Heap space name: large_object_space
    Memory size: 9,523,200 bytes, committed memory: 9,523,200 bytes
    Capacity: 9,464,352 bytes, used: 9,464,352 bytes, available: 0 bytes

Total heap memory size: 5,155,778,560 bytes
Total heap committed memory: 4,964,567,960 bytes
Total used heap memory: 4,294,921,544 bytes
Total available heap memory: 78,573,856 bytes

Heap memory limit: 4,328,521,728
`

Is there a way to enable the report above include any trace of where this occurred from Nodejs. Also, It does not have to be accurate.

Add prebuilt binaries

This came up in discussions on issue #103

I'm particularly interested from a Windows platform point of view in relation to expanding Hyperledger Composer platform support hyperledger/composer#65 - it would be great to be able to easily get node-report installed on Windows machines, which aren't typically set up for compilation.

clang warning when using MacOS Sierra

when attempting to install on Node v6.7.0 via npm using MacOS 10.12.1 (Sierra) I get the following compiler warning

clang: warning: libstdc++ is deprecated; move to libc++ with a minimum deployment target of OS X 10.9

Error while running npm install -g composer-cli

Hello,

Following error is getting generated while running "npm install -g composer-cli" - please clarify how to get this issue resolved:

F:\open_source\blockchain>npm install -g composer-cli
C:\Users\Aspire E1-572\AppData\Roaming\npm\composer -> C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\composer-
cli\cli.js

> [email protected] install C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\composer-cli\node_modules\dtrace
-provider
> node-gyp rebuild || node suppress-error.js


C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\composer-cli\node_modules\dtrace-provider>if not defined npm_con
fig_node_gyp (node "C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\nod
e-gyp\bin\node-gyp.js" rebuild )  else (node "" rebuild )
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.

> [email protected] install C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\composer-cli\node_modules\node-repor
t
> node-gyp rebuild


C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\composer-cli\node_modules\node-report>if not defined npm_config_
node_gyp (node "C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\npm\bin\node-gyp-bin\\..\..\node_modules\node-gy
p\bin\node-gyp.js" rebuild )  else (node "" rebuild )
Building the projects in this solution one at a time. To enable parallel build, please add the "/m" switch.
  node_report.cc
  module.cc
  utilities.cc
C:\Program Files (x86)\Windows Kits\8.1\Include\um\dbghelp.h(1544): warning C4091: 'typedef ': ignored on left of '' wh
en no variable is declared (compiling source file ..\src\node_report.cc) [C:\Users\Aspire E1-572\AppData\Roaming\npm\no
de_modules\composer-cli\node_modules\node-report\build\api.vcxproj]
C:\Program Files (x86)\Windows Kits\8.1\Include\um\dbghelp.h(3190): warning C4091: 'typedef ': ignored on left of '' wh
en no variable is declared (compiling source file ..\src\node_report.cc) [C:\Users\Aspire E1-572\AppData\Roaming\npm\no
de_modules\composer-cli\node_modules\node-report\build\api.vcxproj]
  win_delay_load_hook.c
C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\npm\node_modules\node-gyp\src\win_delay_load_hook.c(34): error
C2373: '__pfnDliNotifyHook2': redefinition; different type modifiers [C:\Users\Aspire E1-572\AppData\Roaming\npm\node_m
odules\composer-cli\node_modules\node-report\build\api.vcxproj]
  D:\open_source\MicrosoftVisualStudio14\VC\include\delayimp.h(134): note: see declaration of '__pfnDliNotifyHook2'
gyp ERR! build error
gyp ERR! stack Error: `C:\Program Files (x86)\MSBuild\14.0\bin\msbuild.exe` failed with exit code: 1
gyp ERR! stack     at ChildProcess.onExit (C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\npm\node_modules\node
-gyp\lib\build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:126:13)
gyp ERR! stack     at ChildProcess.emit (events.js:214:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:198:12)
gyp ERR! System Windows_NT 6.3.9600
gyp ERR! command "D:\\open_source\\nodejs\\node.exe" "C:\\Users\\Aspire E1-572\\AppData\\Roaming\\npm\\node_modules\\npm
\\node_modules\\node-gyp\\bin\\node-gyp.js" "rebuild"
gyp ERR! cwd C:\Users\Aspire E1-572\AppData\Roaming\npm\node_modules\composer-cli\node_modules\node-report
gyp ERR! node -v v8.11.1
gyp ERR! node-gyp -v v3.3.0
gyp ERR! not ok
C:\Users\Aspire E1-572\AppData\Roaming\npm
`-- (empty)

npm WARN optional Skipping failed optional dependency /composer-cli/chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: [email protected]
npm ERR! Windows_NT 6.3.9600
npm ERR! argv "D:\\open_source\\nodejs\\node.exe" "C:\\Users\\Aspire E1-572\\AppData\\Roaming\\npm\\node_modules\\npm\\b
in\\npm-cli.js" "install" "-g" "composer-cli"
npm ERR! node v8.11.1
npm ERR! npm  v3.8.0
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the node-report package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs node-report
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls node-report
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     F:\open_source\blockchain\npm-debug.log
npm ERR! code 1

Unexpectedly triggers report when `new vm.Script` fails during compilation

It appears that node-report is unexpectedly trigger uncaught exception reports when vm.Script fails during script compilation.

In the example found below the caller clearly catches the exception. I would expect node-report not to automatically trigger a report in this situation.

Reproduction Example

var vm = require('vm');
var nodereport = require('node-report');
var nodereportConfig = require('node-report/api');

nodereportConfig.setFileName('stderr');

try {
  new vm.Script("[", {});
} catch (err) {
  console.log('this appears to be a caught exception');
}

Output Produced

➜ node repro.js >out 2> errout
➜ cat out
this appears to be a caught exception
➜ cat errout
================================================================================
==== Node Report ===============================================================

Event: exception, location: "OnUncaughtException"
Filename: stderr
Dump event time:  2017/02/14 15:07:38
Module load time: 2017/02/14 15:07:38
Process ID: 51793
Command line: node repro.js

Node.js version: v6.9.1
(ares: 1.10.1-DEV, http_parser: 2.7.0, icu: 57.1, modules: 48, openssl: 1.0.2j,
 uv: 1.9.1, v8: 5.1.281.84, zlib: 1.2.8)

node-report version: 2.1.0 (built against Node.js v6.9.1)

OS version: Darwin 16.4.0 Darwin Kernel Version 16.4.0: Thu Dec 22 22:53:21 PST 2016; root:xnu-3789.41.3~3/RELEASE_X86_64

Machine: neptune x86_64

================================================================================
==== JavaScript Stack Trace ====================================================

Object.<anonymous> (/Users/davidgwking/Desktop/repro.js:8:3)
Module._compile (module.js:570:32)
Object.Module._extensions..js (module.js:579:10)
Module.load (module.js:487:32)
tryModuleLoad (module.js:446:12)
Function.Module._load (module.js:438:3)
Module.runMain (module.js:604:10)
run (bootstrap_node.js:394:7)
startup (bootstrap_node.js:149:9)
bootstrap_node.js:509:3

================================================================================
==== Native Stack Trace ========================================================

 0: [pc=0x101db9e2a] nodereport::OnUncaughtException(v8::Isolate*) [/Users/davidgwking/Desktop/node_modules/node-report/api.node]
 1: [pc=0x10057c0a2] v8::internal::Isolate::Throw(v8::internal::Object*, v8::internal::MessageLocation*) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
 2: [pc=0x10066c7e7] v8::internal::PendingCompilationErrorHandler::ThrowPendingError(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
 3: [pc=0x10062b373] v8::internal::Parser::Internalize(v8::internal::Isolate*, v8::internal::Handle<v8::internal::Script>, bool) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
 4: [pc=0x10062b649] v8::internal::Parser::Parse(v8::internal::ParseInfo*) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
 5: [pc=0x10062b47e] v8::internal::Parser::ParseStatic(v8::internal::ParseInfo*) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
 6: [pc=0x10033c41f] v8::internal::(anonymous namespace)::CompileToplevel(v8::internal::CompilationInfo*) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
 7: [pc=0x10033d149] v8::internal::Compiler::GetSharedFunctionInfoForScript(v8::internal::Handle<v8::internal::String>, v8::internal::Handle<v8::internal::Object>, int, int, v8::ScriptOriginOptions, v8::internal::Handle<v8::internal::Object>, v8::internal::Handle<v8::internal::Context>, v8::Extension*, v8::internal::ScriptData**, v8::ScriptCompiler::CompileOptions, v8::internal::NativesFlag, bool) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
 8: [pc=0x10014eed9] v8::ScriptCompiler::CompileUnboundInternal(v8::Isolate*, v8::ScriptCompiler::Source*, v8::ScriptCompiler::CompileOptions, bool) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
 9: [pc=0x1008e2e6e] node::ContextifyScript::New(v8::FunctionCallbackInfo<v8::Value> const&) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
10: [pc=0x1001799a4] v8::internal::FunctionCallbackArguments::Call(void (*)(v8::FunctionCallbackInfo<v8::Value> const&)) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
11: [pc=0x1001e80c9] v8::internal::Builtin_Impl_HandleApiCallConstruct(v8::internal::(anonymous namespace)::BuiltinArguments<(v8::internal::BuiltinExtraArguments)1>, v8::internal::Isolate*) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
12: [pc=0x1001ce1d3] v8::internal::Builtin_HandleApiCallConstruct(int, v8::internal::Object**, v8::internal::Isolate*) [/Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node]
13: [pc=0x15698f9092a7]

================================================================================
==== JavaScript Heap and Garbage Collector =====================================

Heap space name: new_space
    Memory size: 2,097,152 bytes, committed memory: 2,097,152 bytes
    Capacity: 1,031,680 bytes, used: 1,023,368 bytes, available: 8,312 bytes
Heap space name: old_space
    Memory size: 3,100,672 bytes, committed memory: 3,100,672 bytes
    Capacity: 2,425,512 bytes, used: 2,425,400 bytes, available: 112 bytes
Heap space name: code_space
    Memory size: 2,097,152 bytes, committed memory: 2,097,152 bytes
    Capacity: 585,408 bytes, used: 585,312 bytes, available: 96 bytes
Heap space name: map_space
    Memory size: 1,130,496 bytes, committed memory: 1,130,496 bytes
    Capacity: 173,624 bytes, used: 173,624 bytes, available: 0 bytes
Heap space name: large_object_space
    Memory size: 0 bytes, committed memory: 0 bytes
    Capacity: 1,488,924,160 bytes, used: 0 bytes, available: 1,488,924,160 bytes

Total heap memory size: 8,425,472 bytes
Total heap committed memory: 8,425,472 bytes
Total used heap memory: 4,207,704 bytes
Total available heap memory: 1,488,932,680 bytes

Heap memory limit: 1,501,560,832

================================================================================
==== Resource Usage ============================================================

Process total resource usage:
  User mode CPU: 0.078303 secs
  Kernel mode CPU: 0.014141 secs
  Maximum resident set size: 20,828,913,664 bytes
  Page faults: 0 (I/O required) 5264 (no I/O required)
  Filesystem activity: 0 reads 0 writes

================================================================================
==== Node.js libuv Handle Summary ==============================================

(Flags: R=Ref, A=Active)

Flags  Type      Address
[-A]   async     0x0x10127c0d8
[-A]   async     0x0x101f09470
[--]   check     0x0x10280ce10
[R-]   idle      0x0x10280ce88
[--]   prepare   0x0x10280cf00
[--]   check     0x0x10280cf78
[-A]   async     0x0x101dbdb58

================================================================================
==== System Information ========================================================

Environment variables
  [REDACTED FOR BREVITY]

Resource limits                        soft limit      hard limit
  core file size (blocks)               unlimited       unlimited
  data seg size (kbytes)                unlimited       unlimited
  file size (blocks)                    unlimited       unlimited
  max locked memory (bytes)             unlimited       unlimited
  max memory size (kbytes)              unlimited       unlimited
  open files                                10240       unlimited
  stack size (bytes)                      8388608        67104768
  cpu time (seconds)                    unlimited       unlimited
  max user processes                          709            1064
  virtual memory (kbytes)               unlimited       unlimited

Loaded libraries
  /Users/davidgwking/.nvm/versions/node/v6.9.1/bin/node
  /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
  /usr/lib/libSystem.B.dylib
  /usr/lib/libstdc++.6.dylib
  /usr/lib/libDiagnosticMessagesClient.dylib
  /usr/lib/libicucore.A.dylib
  /usr/lib/libobjc.A.dylib
  /usr/lib/libz.1.dylib
  /usr/lib/system/libcache.dylib
  /usr/lib/system/libcommonCrypto.dylib
  /usr/lib/system/libcompiler_rt.dylib
  /usr/lib/system/libcopyfile.dylib
  /usr/lib/system/libcorecrypto.dylib
  /usr/lib/system/libdispatch.dylib
  /usr/lib/system/libdyld.dylib
  /usr/lib/system/libkeymgr.dylib
  /usr/lib/system/liblaunch.dylib
  /usr/lib/system/libmacho.dylib
  /usr/lib/system/libquarantine.dylib
  /usr/lib/system/libremovefile.dylib
  /usr/lib/system/libsystem_asl.dylib
  /usr/lib/system/libsystem_blocks.dylib
  /usr/lib/system/libsystem_c.dylib
  /usr/lib/system/libsystem_configuration.dylib
  /usr/lib/system/libsystem_coreservices.dylib
  /usr/lib/system/libsystem_coretls.dylib
  /usr/lib/system/libsystem_dnssd.dylib
  /usr/lib/system/libsystem_info.dylib
  /usr/lib/system/libsystem_kernel.dylib
  /usr/lib/system/libsystem_m.dylib
  /usr/lib/system/libsystem_malloc.dylib
  /usr/lib/system/libsystem_network.dylib
  /usr/lib/system/libsystem_networkextension.dylib
  /usr/lib/system/libsystem_notify.dylib
  /usr/lib/system/libsystem_platform.dylib
  /usr/lib/system/libsystem_pthread.dylib
  /usr/lib/system/libsystem_sandbox.dylib
  /usr/lib/system/libsystem_secinit.dylib
  /usr/lib/system/libsystem_symptoms.dylib
  /usr/lib/system/libsystem_trace.dylib
  /usr/lib/system/libunwind.dylib
  /usr/lib/system/libxpc.dylib
  /usr/lib/libauto.dylib
  /usr/lib/libc++abi.dylib
  /usr/lib/libc++.1.dylib
  /Users/davidgwking/Desktop/node_modules/node-report/api.node

================================================================================
Node.js report completed

Uncaught exception at:
Object.<anonymous> (/Users/davidgwking/Desktop/repro.js:8:3)
Module._compile (module.js:570:32)
Object.Module._extensions..js (module.js:579:10)
Module.load (module.js:487:32)
tryModuleLoad (module.js:446:12)
Function.Module._load (module.js:438:3)
Module.runMain (module.js:604:10)
run (bootstrap_node.js:394:7)
startup (bootstrap_node.js:149:9)
bootstrap_node.js:509:3

test 3 fails consistently

Node v6.9.1, x64 Linux RHEL 7.2.

Had to patch the nodereport source with #9 to be able to compile. I also needed to checkout nodereport from github as the tests are no longer pulled down when I npm install (I think as a result of #8).

-bash-4.2$ npm test -- --save_log

> [email protected] test /home/users/riclau/sandbox/scratch/test/pkgtest/node_modules/nodereport
> node test/autorun.js "--save_log"

autorun.js: running child process #1 to produce NodeReport on API call
autorun.js: running child process #2 to produce NodeReport on exception
autorun.js: running child process #3 to produce NodeReport on fatal error
autorun.js: running child process #4 to produce NodeReport on SIGUSR2
autorun.js: located NodeReport:  NodeReport.20161028.143703.61091.001.txt
autorun.js: located NodeReport:  NodeReport.20161028.143703.61097.001.txt
autorun.js: located NodeReport:  NodeReport.20161028.143704.61099.001.txt
autorun.js: located NodeReport:  NodeReport.20161028.143704.61104.001.txt
autorun.js: test results:
        test 1 :  pass
        test 2 :  pass
        test 3 :  fail
        test 4 :  pass
-bash-4.2$

nodereport_test.log

Unsupported use of node::signo_string() API

The node-report module uses node::signo_string() in a few places to convert a numeric signal number to a string. The function is declared in node/src/node.h but is not defined as NODE_EXTERN, so we really should not be using it. Also it does not seem to be exported by Node.js on Windows and zOS (I get an unresolved reference when trying to use it on those platforms).

CI job is broken on Windows

Looks like the CI job is currently broken on Windows.

e.g. https://ci.nodejs.org/view/post-mortem/job/nodereport-continuous-integration/109/MACHINE=win10/console

[win10] $ sh -xe C:\Users\ADMINI~1\AppData\Local\Temp\hudson4557773619010135318.sh
+ rm -rf 'c:\workspace\nodereport-continuous-integration\MACHINE\win10/*'
+ DOWNLOAD_DIR=https://nodejs.org/download/release/
+ case $NODE_VERSION in
+ DOWNLOAD_DIR=https://nodejs.org/download/nightly/
++ curl https://nodejs.org/download/nightly/
++ grep v8.0.0-nightly
++ sort -t. -k 1,1n -k 2,2n -k 3,3n
++ tail -1
++ cut '-d"' -f 2
++ tr -d /
Input file specified two times.


  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed

  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 76806    0 76806    0     0   342k      0 --:--:-- --:--:-- --:--:--  369k
+ LINK=
+ case $MACHINE in
+ OS=win
+ ARCH=x64
+ EXT=zip
+ curl -O https://nodejs.org/download/nightly//node--win-x64.zip

The job is failing to identify the correct version-tag, e.g. v8.0.0-nightly2017030187a039d721, to download.

Googling for the Input file specified two times. suggests that this is because the Windows version of sort is being used rather than the one that comes with the git bash shell. The injectedEnvVars (https://ci.nodejs.org/view/post-mortem/job/nodereport-continuous-integration/109/MACHINE=win10/injectedEnvVars/) seem to back this up:

Name Value
Path C:\ProgramData\Oracle\Java\javapath;C:\Python27;C:\Python27\Scripts;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin

I spoke to @gdams who says the sort was added recently so that 6.10.0 comes after 6.9.5 (e.g. on https://nodejs.org/download/release/ v6.10.0/ is listed before v6.2.0/).

cc @nodejs/post-mortem-admins

Add lint rules from main nodejs project.

Nodereport should have a lint target developers can run to check the source code formatting rather that having reviewers find the issues.
This would help prevent pull requests from being cluttered up with formatting changes and allow us to focus more on the technical discussions.

Since nodereport (node-report) is a project under Nodejs the rules should be copied over from there so the format is consistent with the main project.

Failed at the [email protected] install script 'node-gyp rebuild'.

gyp ERR! configure error
gyp ERR! stack Error: Can't find Python executable "python", you can set the PYTHON env variable.
gyp ERR! stack at failNoPython (C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:449:14)
gyp ERR! stack at C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\lib\configure.js:404:11
gyp ERR! stack at C:\Program Files\nodejs\node_modules\npm\node_modules\graceful-fs\polyfills.js:264:29
gyp ERR! stack at FSReqWrap.oncomplete (fs.js:123:15)
gyp ERR! System Windows_NT 6.1.7601
gyp ERR! command "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\node_modules\node-gyp\bin\node-
gyp.js" "rebuild"
gyp ERR! cwd D:\eMenu\eMenuAnalyticsApi\node_modules\nodereport
gyp ERR! node -v v6.9.5
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok
npm WARN @angular/[email protected] requires a peer of @angular/[email protected] but none was installed.
npm WARN [email protected] No description
npm WARN [email protected] No repository field.
npm ERR! Windows_NT 6.1.7601
npm ERR! argv "C:\Program Files\nodejs\node.exe" "C:\Program Files\nodejs\node_modules\npm\bin\npm-cli.js" "install" "noderepor
t"
npm ERR! node v6.9.5
npm ERR! npm v3.10.10
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the nodereport package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs nodereport
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls nodereport
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! D:\eMenu\eMenuAnalyticsApi\npm-debug.log

Error when installing npm install -g composer-cli

xxxxxxxx@ubuntu:~$ sudo npm install -g composer-cli

WARN engine [email protected]: wanted: {"node":">=8","npm":">=5"} (current: {"node":"4.2.6","npm":"3.5.2"})
loadDep:yargs → resolveWi
loadDep:yargs → resolveWi
loadDep:yargs → get
loadDep:yargs → resolveWi
loadDep:yargs → resolveWi
loadDep:yargs → resolveWi
loadDep:composer-connecto
loadDep:punycode → 304
loadDep:temp → 304
loadDep:temp → resolveWit
loadDep:tar-stream → cach
loadDep:request → mapToRe
/usr/local/bin/composer -> /usr/local/lib/node_modules/composer-cli/cli.js

[email protected] install /usr/local/lib/node_modules/composer-cli/node_modules/dtrace-provider
node-gyp rebuild || node suppress-error.js

/usr/bin/env: ‘node’: No such file or directory
sh: 1: node: not found
npm WARN install:[email protected] [email protected] install: node-gyp rebuild || node suppress-error.js
npm WARN install:[email protected] spawn ENOENT

[email protected] install /usr/local/lib/node_modules/composer-cli/node_modules/node-report
node-gyp rebuild

/usr/bin/env: ‘node’: No such file or directory
/usr/local/lib
└── (empty)

npm WARN optional Skipping failed optional dependency /composer-cli/chokidar/fsevents:
npm WARN notsup Not compatible with your operating system or architecture: [email protected]
npm ERR! Linux 4.13.0-43-generic
npm ERR! argv "/usr/bin/nodejs" "/usr/bin/npm" "install" "-g" "composer-cli"
npm ERR! node v4.2.6
npm ERR! npm v3.5.2
npm ERR! file sh
npm ERR! code ELIFECYCLE
npm ERR! errno ENOENT
npm ERR! syscall spawn

npm ERR! [email protected] install: node-gyp rebuild
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the node-report package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR! npm bugs node-report
npm ERR! Or if that isn't available, you can get their info via:
npm ERR! npm owner ls node-report
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR! /home/xxxxxxxx/npm-debug.log
npm ERR! code 1

Failing to install under Alpine Linux

Hi,

I'm attempting to use this inside a Docker container (Alpine Linux), however the install (npm install node-report) fails with this:

/usr/bin # npm install node-report

> [email protected] install /usr/bin/node_modules/node-report
> node-gyp rebuild

make: Entering directory '/usr/bin/node_modules/node-report/build'
  CXX(target) Release/obj.target/api/src/node_report.o
../src/node_report.cc:45:22: fatal error: execinfo.h: No such file or directory
compilation terminated.
api.target.mk:105: recipe for target 'Release/obj.target/api/src/node_report.o' failed
make: *** [Release/obj.target/api/src/node_report.o] Error 1
make: Leaving directory '/usr/bin/node_modules/node-report/build'
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:106:13)
gyp ERR! stack     at ChildProcess.emit (events.js:191:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
gyp ERR! System Linux 4.9.13-moby
gyp ERR! command "/usr/bin/node" "/usr/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /usr/bin/node_modules/node-report
gyp ERR! node -v v7.4.0
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok 
npm WARN enoent ENOENT: no such file or directory, open '/usr/bin/package.json'
npm WARN bin No description
npm WARN bin No repository field.
npm WARN bin No README data
npm WARN bin No license field.
npm ERR! Linux 4.9.13-moby
npm ERR! argv "/usr/bin/node" "/usr/bin/npm" "install" "node-report"
npm ERR! node v7.4.0
npm ERR! npm  v4.0.5
npm ERR! code ELIFECYCLE

npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the node-report package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs node-report
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls node-report
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /usr/bin/npm-debug.log

These are the build tools/deps I'm installing:

RUN apk update
RUN apk add \
        build-base \
        libtool \
        autoconf \
        automake \
        jq \
        openssh \
        python

Any ideas?

Thanks. :)

Reported Node.js version is incorrect

Reports currently contain in the NodeReport section:

Node.js version: v6.9.1
(v8: 5.1.281.84, libuv: 1.9.1, zlib: 1.2.8, ares: 1.10.1-DEV)

If I compile nodereport with one version of Node.js (e.g. v6.9.1) and then run on another version (e.g. v6.7.0) the report incorrectly reports v6.9.1 and not v6.7.0 (note that it correctly reports v8: 5.1.281.83):

-bash-4.2$ node
> process.versions
{ http_parser: '2.7.0',
  node: '6.7.0',
  v8: '5.1.281.83',
  uv: '1.9.1',
  zlib: '1.2.8',
  ares: '1.10.1-DEV',
  icu: '57.1',
  modules: '48',
  openssl: '1.0.2j' }
> require('.').triggerReport()

Writing Node.js report to file: NodeReport.20161124.151013.8560.001.txt
Node.js report completed
'NodeReport.20161124.151013.8560.001.txt'
> .exit
-bash-4.2$ head -20 NodeReport.20161124.151013.8560.001.txt
================================================================================
==== NodeReport ================================================================

Event: JavaScript API, location: "TriggerReport"
Filename: NodeReport.20161124.151013.8560.001.txt
Dump event time:  2016/11/24 15:10:13
Module load time: 2016/11/24 15:10:13
Process ID: 8560

Node.js version: v6.9.1
(v8: 5.1.281.83, libuv: 1.9.1, zlib: 1.2.8, ares: 1.10.1-DEV)

OS version: Linux 3.10.0-327.18.2.el7.x86_64 #1 SMP Fri Apr 8 05:09:53 EDT 2016
(glibc: 2.17)

Machine: drx-hemera x86_64

================================================================================
==== JavaScript Stack Trace ====================================================

-bash-4.2$

Looks like compile time constants are being used in src/nodereport.cc:

static void PrintVersionInformation(FILE* fp) {

  // Print Node.js and deps component versions
  fprintf(fp, "\nNode.js version: %s\n", NODE_VERSION);
  fprintf(fp, "(v8: %s, libuv: %s, zlib: %s, ares: %s)\n",
          V8::GetVersion(), uv_version_string(), ZLIB_VERSION, ARES_VERSION_STR);

zlib and ares versions are also at risk of being incorrectly reported.

Pull request incoming.

How to lint c++ code

Okay so I have thrown multiple C++ linting solutions around but can't seem to please everyone so I am going to go ahead and summarize them here:

Solution 1 - Include cpplint.py

Pros:

  • Can be used offline
  • Can edit the rules to suit the module

Cons:

  • Massive file (6000 lines)
  • Needs to be updated manually to remain consistent with node core

Solution 2 - Use an npm module which contains the cpplint.py file

Pros:

  • No massive file unless required
  • Can be used offline
  • Could potentially be adopted by node core
  • Can be shared with out nodejs modules

Cons:

  • Someone still needs to manage it (if node core doesn't want to adopt it then we have two files that can become out of sync)

Solution 3 - Use a Makefile which curls cpplint.py from node core

Pros:

  • No massive file unless required
  • No need to maintain the file as node core already does this

Cons:

  • Using a Makefile has compatibility issues with windows/aix
  • Can't be used offline

Would love to hear what you guys think is the best solution so that we can start using it.

triggerReport() fails on x86 Windows

Node v6.9.1 win-x86

Reproduced on Windows 7 (Visual Studio 2012 or 2015) and Windows 10 (Visual Studio 2015)

Looks like the report is truncated, exit code suggests an ACCESS_VIOLATION.

C:\work\node\github\nodereport>npm test

> [email protected] test C:\work\node\github\nodereport
> tap test/test*.js

test/test-api.js ...................................... 4/7
  not ok Process exited cleanly
    +++ found
    --- wanted
    -0
    +3221225477
    compare: ===
    at:
      line: 15
      column: 9
      file: test/test-api.js
      type: ChildProcess
      function: child.on
    stack: |
      ChildProcess.child.on (test/test-api.js:15:9)
    source: |
      tap.equal(code, 0, 'Process exited cleanly');

  Validating NodeReport.20161117.185734.4656.001.txt
  not ok Checking report contains JavaScript Heap section
    found: "====================================================================
============\r\n==== NodeReport ================================================
================\r\n\r\nEvent: JavaScript API, location: \"nodereport::TriggerRe
port\"\r\nFilename: NodeReport.20161117.185734.4656.001.txt\r\nDump event time:
 2016/11/17 18:57:34\r\nModule load time: 2016/11/17 18:57:34\r\nProcess ID: 465
6\r\n\r\nNode.js version: v6.9.1\r\n(v8: 5.1.281.84, libuv: 1.9.1, zlib: 1.2.8,
ares: 1.10.1-DEV)\r\n\r\nOS version: Windows 7\r\n\r\nMachine: IBM826-R93F9G4 \r
\n\r\n==========================================================================
======\r\n==== JavaScript Stack Trace ==========================================
==========\r\n\r\nJavaScript VM state: EXTERNAL\r\n\r\n 0: [pc=0x1FB353CE] C:\\w
ork\\node\\github\\nodereport\\test\\test-api.js:6:14\r\n 1: [pc=0x1FB35128] Mod
ule._compile (module.js:570:32)\r\n 2: [pc=0x1FB2FC8E] Module._extensions..js (m
odule.js:579:10)\r\n 3: [pc=0x1FB2E19A] Module.load (module.js:487:32)\r\n 4: [p
c=0x1FB2DE1A] tryModuleLoad (module.js:446:12)\r\n 5: [pc=0x1FB255D9] Module._lo
ad (module.js:438:3)\r\n 6: [pc=0x1FB25222] Module.runMain (module.js:604:10)\r\
n 7: [pc=0x1FB25118] run (bootstrap_node.js:394:7)\r\n 8: [pc=0x2AE38DB2] startu
p (bootstrap_node.js:149:9)\r\n 9: [pc=0x2AE37606] bootstrap_node.js:509:3\r\n"
    pattern: /==== JavaScript Heap/
    at:
      line: 31
      column: 11
      file: test/common.js
      function: REPORT_SECTIONS.forEach
    stack: |
      REPORT_SECTIONS.forEach (test/common.js:31:11)
      fs.readFile (test/common.js:30:23)
      FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:445:3)
    source: |
      t.match(reportContents, new RegExp('==== ' + section),

  Validating NodeReport.20161117.185734.4656.001.txt
  not ok Checking report contains System Information section
    found: "====================================================================
============\r\n==== NodeReport ================================================
================\r\n\r\nEvent: JavaScript API, location: \"nodereport::TriggerRe
port\"\r\nFilename: NodeReport.20161117.185734.4656.001.txt\r\nDump event time:
 2016/11/17 18:57:34\r\nModule load time: 2016/11/17 18:57:34\r\nProcess ID: 465
6\r\n\r\nNode.js version: v6.9.1\r\n(v8: 5.1.281.84, libuv: 1.9.1, zlib: 1.2.8,
ares: 1.10.1-DEV)\r\n\r\nOS version: Windows 7\r\n\r\nMachine: IBM826-R93F9G4 \r
\n\r\n==========================================================================
======\r\n==== JavaScript Stack Trace ==========================================
==========\r\n\r\nJavaScript VM state: EXTERNAL\r\n\r\n 0: [pc=0x1FB353CE] C:\\w
ork\\node\\github\\nodereport\\test\\test-api.js:6:14\r\n 1: [pc=0x1FB35128] Mod
ule._compile (module.js:570:32)\r\n 2: [pc=0x1FB2FC8E] Module._extensions..js (m
odule.js:579:10)\r\n 3: [pc=0x1FB2E19A] Module.load (module.js:487:32)\r\n 4: [p
c=0x1FB2DE1A] tryModuleLoad (module.js:446:12)\r\n 5: [pc=0x1FB255D9] Module._lo
ad (module.js:438:3)\r\n 6: [pc=0x1FB25222] Module.runMain (module.js:604:10)\r\
n 7: [pc=0x1FB25118] run (bootstrap_node.js:394:7)\r\n 8: [pc=0x2AE38DB2] startu
p (bootstrap_node.js:149:9)\r\n 9: [pc=0x2AE37606] bootstrap_node.js:509:3\r\n"
    pattern: /==== System Information/
    at:
      line: 31
      column: 11
      file: test/common.js
      function: REPORT_SECTIONS.forEach
    stack: |
      REPORT_SECTIONS.forEach (test/common.js:31:11)
      fs.readFile (test/common.js:30:23)
      FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:445:3)
    source: |
      t.match(reportContents, new RegExp('==== ' + section),

test/test-exception.js ................................ 8/8
test/test-fatal-error.js .............................. 7/7 5s
test/test-signal.js ................................... 0/1 751ms
  Skipped: 1
    Unsupported on Windows

total ............................................... 19/23


  19 passing (8s)
  1 pending
  3 failing

npm ERR! Test failed.  See above for more details.

C:\work\node\github\nodereport>

Node.js 4.8.3 compilation failure

@richardlau spotted a compilation failure on Node.js 4.8.3, the problem is in the code added under PR #82 (Allow Error object to be passed to node-report).

-bash-4.2$ npm install

> [email protected] install /home/users/riclau/sandbox/github/nodereport
> node-gyp rebuild

make: Entering directory `/home/users/riclau/sandbox/github/nodereport/build'
  CXX(target) Release/obj.target/api/src/node_report.o
../src/node_report.cc: In function ‘void nodereport::PrintJavaScriptErrorStack(std::ostream&, v8::Isolate*, v8::MaybeLocal<v8::Value>)’:
../src/node_report.cc:1008:88: error: no matching function for call to ‘v8::Exception::CreateMessage(v8::Isolate*&, v8::Local<v8::Value>)’
   Local<Message> message = v8::Exception::CreateMessage(isolate, error.ToLocalChecked());
                                                                                        ^
../src/node_report.cc:1008:88: note: candidate is:
In file included from /home/users/riclau/.node-gyp/4.8.3/include/node/node.h:42:0,
                 from ../node_modules/nan/nan.h:47,
                 from ../src/node_report.h:4,
                 from ../src/node_report.cc:1:
/home/users/riclau/.node-gyp/4.8.3/include/node/v8.h:4874:25: note: static v8::Local<v8::Message> v8::Exception::CreateMessage(v8::Local<v8::Value>)
   static Local<Message> CreateMessage(Local<Value> exception);
                         ^
/home/users/riclau/.node-gyp/4.8.3/include/node/v8.h:4874:25: note:   candidate expects 1 argument, 2 provided
make: *** [Release/obj.target/api/src/node_report.o] Error 1
make: Leaving directory `/home/users/riclau/sandbox/github/nodereport/build'

can we report something about the modules in use?

A full npm ls tree would be too much, but would there be value in reporting at least any binary addons that have been loaded? I guess if addons fault they will show up in the stack traces, but they may also be sources of more subtle corruption (writes to stray pointers corrupting heap, for example).

Cannot find module ./api

When I run this with from a gulp script I get the error

Cannot find module ./api

gulp version: 3.9.1
node version: 6.2.10
This is the line that causes the error.

const api = require('./api');

Where is ./api supposed to come from?

Node-report tests hanging in CI

Working to setup this job: https://ci.nodejs.org/view/post-mortem/job/nodereport-continuous-integration/

but the job seems to just hang:

iojs@test-digitalocean-ubuntu14-x64-1:~/build/workspace/nodereport-continuous-integration/MACHINE/ubuntu1404-64$ node /home/iojs/build/workspace/nodereport-continuous-integration/MACHINE/ubuntu1404-64/node-v8.0.0-nightly20170131aa8eb8747c-linux-x64/bin/citgm https://github.com/nodejs/node-report.git
info:    starting            | https://github.com/nodejs/node-report.git
info:    lookup              | 9b36120a7b4a11336b6b71ae0d7237e837878a2a
info:    lookup-notfound     | 9b36120a7b4a11336b6b71ae0d7237e837878a2a
info:    9b36120a7b4a11336b6b71ae0d7237e837878a2a npm:| Downloading project: https://github.com/nodejs/node-report.git
info:    9b36120a7b4a11336b6b71ae0d7237e837878a2a npm:| Project downloaded nodereport-1.0.7.tgz
info:    9b36120a7b4a11336b6b71ae0d7237e837878a2a npm:| npm install started
info:    9b36120a7b4a11336b6b71ae0d7237e837878a2a npm:| npm install successfully completed
info:    9b36120a7b4a11336b6b71ae0d7237e837878a2a npm:| test suite started

PrintResourceUsage is unimplemented on Windows

node-report on Windows does currently obtain process or thread CPU times on Windows, the PrintResourceUsage function is unimplemented.

Most of the data could be gathered via these API's:
GetProcessTimes - https://msdn.microsoft.com/en-us/library/ms683223(VS.85).aspx
GetThreadTimes - https://msdn.microsoft.com/en-us/library/ms683237(VS.85).aspx

(I can't work on this myself as I don't have a Windows box. I'm not sure how high a priority Windows support for this data is.)

node-report fails compilation for smartos

Running in CI node-report seems to fail compilation on smartos

https://ci.nodejs.org/view/post-mortem/job/nodereport-continuous-integration/39/MACHINE=smartos15-64/console

<features.h>                                                        
warn:                                                      | ^                                                                            
warn:                                                      | compilation terminated.                                                      
warn: e46e12b6b495d53f5a38ce3315099be4755dfef4 npm-install:| In file included from ../src/module.cc:1:0:                                  
warn:                                                      | ../src/node_report.h:9:22: fatal error: features.h: No such file or directory
warn:                                                      | #include <features.h>                                                        
warn:                                                      | ^                                                                            

Linker warning when installing node-report on AIX

Warning is this:

  SOLINK_MODULE(target) Release/obj.target/api.node
ld: 0711-768 WARNING: Object Release/obj.target/api/src/node_report.o, section 1, function .std::_Rb_tree<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::_Select1st<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, std::less<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_erase(std::_Rb_tree_node<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*):
        The branch at address 0x58ac is not followed by a recognized no-op
        or TOC-reload instruction. The unrecognized instruction is 0xE95E0028.

The warning is from the AIX linker, and is apparently caused by an incompatibility between the GCC compiler and the AIX linker. I tried various compiler and linker options but can't get the warning to go away. There are several references to the issue, going back quite a long time. The advice is to ignore the warning, and/or filter out the warning messages, see

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=38607
http://www-01.ibm.com/support/docview.wss?uid=swg1IZ82804
https://patchwork.ozlabs.org/patch/292581/
https://gcc.gnu.org/ml/gcc/2011-10/msg00429.html

The message is a bit alarming for node-report users. Workaround is to re-factor the node-report code to remove the use of std::map. The std::map class is only used in one place, when formatting the sub-component version strings. The map is used to sort the sub-components alphabetically before printing them. I don't think there is a strong need to have them sorted. Although this code is run at start-up not dump time, removing the use of C++ classes like stdmap also fits with the effort to make node-report closer to being signal-safe.

Node report triggered by signal handler for SIGSEGV, SIGILL and other crashes.

While debugging a test case for an npm with native code we found it was only crashing on one of our test machines.
If we had been able to do require('node-report') at the top of the test case and had signal handlers included as triggers for node-report we would have come away with a node-report file containing the native stack trace we needed to debug the issue immediately.

It turned out the test case was hard to replicate off the test machine as it was sensitive to compiler and OS versions and needed a perfectly matching environment.

Being able to have require('node-report') as standard at the top of a test case and immediately get useful debugging for a native crash would have moved this bug from consuming days of time to hours so I think this is probably an important use case and we should consider adding a SIGSEGV handler to node-report. (There may be other signals we want to catch too, depending on the platform.)

node-report CI runs failing to start node on smartos

The smartos machines seem to be failing to run node 6 in our CI runs. I found this when testing my PR branch but have confirmed it below with a build against master using Node 6:

https://ci.nodejs.org/view/post-mortem/job/nodereport-continuous-integration/154/MACHINE=smartos16-64/console

The error is occuring during setup, before node-report is installed:
ld.so.1: node: fatal: relocation error: file /home/iojs/build/workspace/nodereport-continuous-integration/MACHINE/smartos16-64/node-v6.10.2-sunos-x64/bin/node: symbol _ZNSt8__detail15_List_node_base7_M_hookEPS0_: referenced symbol not found

It looks likely to be a setup or installation error on the build machines. It extracted node-v6.10.2-sunos-x64.tar.gz to test with. (Full details in the console output above.)

Add CI testing for nodereport

If we are ready to test across platforms I think we should, at least nightly and when changes are proposed.

@rnchamberlain can you confirm if we are ready for nightly testing or not and if so what the test should run.

I see the job

  1. build node
  2. do an npm install using the nodereport repo
  3. run the tests.

support `node -r nodereport app.js` as well as programmatic use via API

ATM, nodereport works better via API, its clumsy if you want automatic hooking, see:

#23 (comment)

On the other hand, if you want to use nodereport to trigger a report manually, just using its public API, you don't want its (quite intrusive) hook mechanisms, which modify exit codes, behaviours, and even steal signals.

In summary, we need easy opt-in for default behaviour, but we also need easy opt-out, and I don't see any way to provide the two via a single require entry point that does not depend on env vars for configuration.

To make both use-cases easy, I suggest:

node -r nodereport/attach app.js

for the opt-in case, and

require("nodereport").triggerReport()

for the opt-out.

I'm OK with the require paths being switched, so node -r nodereport opts-in, and require("nodereport/api") or something of the like just requires the nodereport API without hooks.

Any other suggestions?

tests all fail

core/nodereport (master *% u=) % npm test

> [email protected] test /home/sam/w/core/nodereport
> node test/autorun.js

autorun.js: running child process #1 to produce NodeReport on API call
autorun.js: running child process #2 to produce NodeReport on exception
autorun.js: running child process #3 to produce NodeReport on fatal error
autorun.js: running child process #4 to produce NodeReport on SIGUSR2
autorun.js: test results: 
        test 1 :  fail
        test 2 :  fail
        test 3 :  fail
        test 4 :  fail

assert.js:85
  throw new assert.AssertionError({
  ^
AssertionError: false == true
    at ChildProcess.<anonymous> (/home/sam/w/core/nodereport/test/autorun.js:27:10)
    at emitTwo (events.js:106:13)
    at ChildProcess.emit (events.js:191:7)
    at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
npm ERR! Test failed.  See above for more details.

nit? s/nodereport/node-report

I think node-report is closer to our typical conventions than nodereport, plus it fits nicely with node-inspect, node-heapdump, node-profiler etc. Do you think it would be worth changing the name of the repo, module, etc.? Certainly the sooner the better if we're going to do that.

Personally I think we should change it, I can even put it on my own backlog if others agree.

Compilation error on x64 Linux with Node v6.9.1, gcc 4.8.5

-bash-4.2$ npm install

> [email protected] install /home/users/riclau/sandbox/github/nodereport
> node-gyp rebuild

make: Entering directory `/home/users/riclau/sandbox/github/nodereport/build'
make: Warning: File `nodereport.target.mk' has modification time 914 s in the future
  CXX(target) Release/obj.target/nodereport/src/node_report.o
../src/node_report.cc: In function âvoid nodereport::PrintSystemInformation(FILE*, v8::Isolate*)â:
../src/node_report.cc:765:27: error: expected â)â before âPRIu64â
         fprintf(fp, "%16" PRIu64, limit.rlim_cur);
                           ^
../src/node_report.cc:765:49: warning: conversion lacks type at end of format [-Wformat=]
         fprintf(fp, "%16" PRIu64, limit.rlim_cur);
                                                 ^
../src/node_report.cc:765:49: warning: too many arguments for format [-Wformat-extra-args]
../src/node_report.cc:770:27: error: expected â)â before âPRIu64â
         fprintf(fp, "%16" PRIu64 "\n", limit.rlim_max);
                           ^
../src/node_report.cc:770:54: warning: conversion lacks type at end of format [-Wformat=]
         fprintf(fp, "%16" PRIu64 "\n", limit.rlim_max);
                                                      ^
../src/node_report.cc:770:54: warning: too many arguments for format [-Wformat-extra-args]
make: *** [Release/obj.target/nodereport/src/node_report.o] Error 1
make: Leaving directory `/home/users/riclau/sandbox/github/nodereport/build'
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/dev/shm/usenode.riclau/node-v6.9.1-linux-x64/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:106:13)
gyp ERR! stack     at ChildProcess.emit (events.js:191:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
gyp ERR! System Linux 3.10.0-327.18.2.el7.x86_64
gyp ERR! command "/dev/shm/usenode.riclau/node-v6.9.1-linux-x64/bin/node" "/dev/shm/usenode.riclau/node-v6.9.1-linux-x64/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /home/users/riclau/sandbox/github/nodereport
gyp ERR! node -v v6.9.1
gyp ERR! node-gyp -v v3.4.0
gyp ERR! not ok

npm ERR! Linux 3.10.0-327.18.2.el7.x86_64
npm ERR! argv "/dev/shm/usenode.riclau/node-v6.9.1-linux-x64/bin/node" "/dev/shm/usenode.riclau/node-v6.9.1-linux-x64/bin/npm" "install"
npm ERR! node v6.9.1
npm ERR! npm  v3.10.8
npm ERR! code ELIFECYCLE
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the nodereport package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs nodereport
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls nodereport
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /home/users/riclau/sandbox/github/nodereport/npm-debug.log
-bash-4.2$ g++ --version
g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4)
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

-bash-4.2$

illegal hardware exception

Is this expected?

core/nodereport (master % u=) % node demo/exception.js                  
exception.js: Node running
exception.js: Go to http://<machine>:8080/ or http://localhost:8080/

Writing Node.js report to file: NodeReport.20161027.100601.28911.001.txt
Node.js report completed
Uncaught #<UserException>

FROM
Server.my_listener (/home/sam/w/core/nodereport/demo/exception.js:15:5)
emitTwo (events.js:106:13)
Server.emit (events.js:191:7)
HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:546:12)
HTTPParser.parserOnHeadersComplete (_http_common.js:99:23)
zsh: illegal hardware instruction (core dumped)  node demo/exception.js

System info:

  • linux ubuntu x64
  • node 6.9.1, npm 3.10.8
  • nodereport from git 7cd3f76

I got this when I was trying to verify whether nodereport after reporting an uncaught exception, would let the exception continue to propagate and cause node to exit (as it should).

Reported glibc version is the version compiled against

The report is using __GLIBC__ and __GLIBC_MINOR__ which are compile time constants. Should this be the version of the runtime libc.so (see example below)? Should the report include both?

e.g.

$ node -p "require('.').getReport()"
================================================================================
==== Node Report ===============================================================

Event: JavaScript API, location: "GetReport"
Dump event time:  2017/03/08 12:43:34
Module load time: 2017/03/08 12:43:34
Process ID: 9150
Command line: node -p require('.').getReport()

Node.js version: v4.8.0
(ares: 1.10.1-DEV, http_parser: 2.7.0, icu: 56.1, modules: 46, openssl: 1.0.2k,
 uv: 1.9.1, v8: 4.5.103.45, zlib: 1.2.8)

node-report version: 2.1.1 (built against Node.js v4.8.0)

OS version: Linux 3.13.0-98-generic #145-Ubuntu SMP Sat Oct 8 20:13:07 UTC 2016
(glibc: 2.17)

Machine: duv-aurora x86_64

================================================================================
==== JavaScript Stack Trace ====================================================

.... etc etc etc

Loaded libraries
  /lib/x86_64-linux-gnu/libdl.so.2
  /lib/x86_64-linux-gnu/librt.so.1
  /usr/lib/x86_64-linux-gnu/libstdc++.so.6
  /lib/x86_64-linux-gnu/libm.so.6
  /lib/x86_64-linux-gnu/libgcc_s.so.1
  /lib/x86_64-linux-gnu/libpthread.so.0
  /lib/x86_64-linux-gnu/libc.so.6
  /lib64/ld-linux-x86-64.so.2
  /home/users/riclau/sandbox/github/nodereport/api.node

================================================================================


$  /lib/x86_64-linux-gnu/libc.so.6
GNU C Library (Ubuntu EGLIBC 2.19-0ubuntu6.9) stable release version 2.19, by Roland McGrath et al.
Copyright (C) 2014 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.
Compiled by GNU CC version 4.8.4.
Compiled on a Linux 3.13.11 system on 2016-05-26.
Available extensions:
        crypt add-on version 2.1 by Michael Glad and others
        GNU Libidn by Simon Josefsson
        Native POSIX Threads Library by Ulrich Drepper et al
        BIND-8.2.3-T5B
libc ABIs: UNIQUE IFUNC
For bug reporting instructions, please see:
<https://bugs.launchpad.net/ubuntu/+source/eglibc/+bugs>.
$ 

Moving node-report into core

In the diagnostic summit the consensus was to move node-report into core (not as a module but fully integrated).

@richardlau we should set up a time to discuss and if possible document the timeline to do that.

Error building nodereport

While running npm install against appmetrics-dash I'm getting an error [1] while building nodereport. appmetrics depends on https://github.com/hhellyer/nodereport.git#stream_output_dev

$ uname -a
Darwin rickmbp 16.3.0 Darwin Kernel Version 16.3.0: Thu Nov 17 20:23:58 PST 2016; root:xnu-3789.31.2~1/RELEASE_X86_64 x86_64

[1]

$ npm install
-
> [email protected] install /code/appmetrics-dash/node_modules/nodereport
> node-gyp rebuild

  CXX(target) Release/obj.target/api/src/node_report.o
clang: error: invalid deployment target for -stdlib=libc++ (requires OS X 10.7 or later)
make: *** [Release/obj.target/api/src/node_report.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:270:23)
gyp ERR! stack     at emitTwo (events.js:87:13)
gyp ERR! stack     at ChildProcess.emit (events.js:172:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:200:12)
gyp ERR! System Darwin 16.3.0
gyp ERR! command "/usr/local/Cellar/node/4.1.1/bin/node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /code/appmetrics-dash/node_modules/nodereport
gyp ERR! node -v v4.1.1
gyp ERR! node-gyp -v v3.0.1
gyp ERR! not ok 
npm WARN optional dep failed, continuing [email protected]

Add sample node-report output in README.md or

I think it would be useful to include sample node-report output in the README.md or linked to it so that people can more easily grasp the information you can get and how easy it is to read.

What do you think ?

Build failure on macOS

  • macOS Version: Darwin Kernel Version 16.1.0 (Sierra)
  • clang Version: Apple LLVM version 8.0.0 (clang-800.0.42.1)

To reproduce:

git clone https://github.com/nodejs/nodereport.git && cd nodereport
npm i

Error

➜  nodereport git:(master) npm i
npm WARN deprecated [email protected]: use uuid module instead

> [email protected] install /Users/gib/tmp/nodereport
> node-gyp rebuild

gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

xcode-select: error: tool 'xcodebuild' requires Xcode, but active developer directory '/Library/Developer/CommandLineTools' is a command line tools instance

gyp WARN download NVM_NODEJS_ORG_MIRROR is deprecated and will be removed in node-gyp v4, please use NODEJS_ORG_MIRROR
  CXX(target) Release/obj.target/nodereport/src/node_report.o
../src/node_report.cc:282:21: error: no member named 'prev' in namespace 'std'
    if (it != *std::prev(comp_versions.end())) {
               ~~~~~^
1 error generated.
make: *** [Release/obj.target/nodereport/src/node_report.o] Error 1
gyp ERR! build error 
gyp ERR! stack Error: `make` failed with exit code: 2
gyp ERR! stack     at ChildProcess.onExit (/Users/gib/.nvm/versions/node/v6.7.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:276:23)
gyp ERR! stack     at emitTwo (events.js:106:13)
gyp ERR! stack     at ChildProcess.emit (events.js:191:7)
gyp ERR! stack     at Process.ChildProcess._handle.onexit (internal/child_process.js:215:12)
gyp ERR! System Darwin 16.1.0
gyp ERR! command "/Users/gib/.nvm/versions/node/v6.7.0/bin/node" "/Users/gib/.nvm/versions/node/v6.7.0/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /Users/gib/tmp/nodereport
gyp ERR! node -v v6.7.0
gyp ERR! node-gyp -v v3.3.1
gyp ERR! not ok 

npm ERR! Darwin 16.1.0
npm ERR! argv "/Users/gib/.nvm/versions/node/v6.7.0/bin/node" "/Users/gib/.nvm/versions/node/v6.7.0/bin/npm" "i"
npm ERR! node v6.7.0
npm ERR! npm  v3.10.3
npm ERR! code ELIFECYCLE
npm ERR! [email protected] install: `node-gyp rebuild`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the [email protected] install script 'node-gyp rebuild'.
npm ERR! Make sure you have the latest version of node.js and npm installed.
npm ERR! If you do, this is most likely a problem with the nodereport package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR!     node-gyp rebuild
npm ERR! You can get information on how to open an issue for this project with:
npm ERR!     npm bugs nodereport
npm ERR! Or if that isn't available, you can get their info via:
npm ERR!     npm owner ls nodereport
npm ERR! There is likely additional logging output above.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/gib/tmp/nodereport/npm-debug.log

cc/ @richardlau

Need to capture exception message in node-report

Currently, node-report uses the isolate->SetAbortOnUncaughtExceptionCallback() API to intercept and trigger a report on an uncaught exception. We can get the JS stack OK, but not the contents of the exception, in particular the exception type and message. We really need to be able to include extra information about the exception in the report header.

Also we could then support filtering on exception types (eg trigger a report on syntax errors only).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.