text: /*
   * exception.js: Utility methods for gathing information about uncaughtExceptions.
   *
   * (C) 2010 Charlie Robbins
   * MIT LICENCE
   *
   */
   
  var os = require('os'),
      stackTrace = require('stack-trace');
      
  var exception = exports;
  
  exception.getAllInfo = function (err) {
    return {
      process: exception.getProcessInfo(),
      os:      exception.getOsInfo(),
      trace:   exception.getTrace(err),
      stack:   err.stack.split('\n')
    };
  };
  
  exception.getProcessInfo = function () {
    return {
      pid:         process.pid,
      uid:         process.getuid(),
      gid:         process.getgid(),
      cwd:         process.cwd(),
      execPath:    process.execPath,
      version:     process.version,
      argv:        process.argv,
      memoryUsage: process.memoryUsage()
    };
  };
  
  exception.getOsInfo = function () {
    return {
      loadavg: os.loadavg(),
      uptime:  os.uptime()
    };
  };
  
  exception.getTrace = function (err) {
    var trace = err ? stackTrace.parse(err) : stackTrace.get();
    return trace.map(function (site) {
      return {
        column:   site.getColumnNumber(),
        file:     site.getFileName(),
        function: site.getFunctionName(),
        line:     site.getLineNumber(),
        method:   site.getMethodName(),
        native:   site.isNative(),
      }
    });
  };