You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@griffin.apache.org by gu...@apache.org on 2018/09/12 08:58:05 UTC
[16/51] [partial] incubator-griffin-site git commit: remove legacy
code
http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/bunyan/bin/bunyan
----------------------------------------------------------------------
diff --git a/node_modules/bunyan/bin/bunyan b/node_modules/bunyan/bin/bunyan
deleted file mode 100755
index 73cf458..0000000
--- a/node_modules/bunyan/bin/bunyan
+++ /dev/null
@@ -1,1665 +0,0 @@
-#!/usr/bin/env node
-/**
- * Copyright 2016 Trent Mick
- * Copyright 2016 Joyent Inc.
- *
- * bunyan -- filter and pretty-print Bunyan log files (line-delimited JSON)
- *
- * See <https://github.com/trentm/node-bunyan>.
- *
- * -*- mode: js -*-
- * vim: expandtab:ts=4:sw=4
- */
-
-var VERSION = '1.8.8';
-
-var p = console.log;
-var util = require('util');
-var pathlib = require('path');
-var vm = require('vm');
-var http = require('http');
-var fs = require('fs');
-var warn = console.warn;
-var child_process = require('child_process'),
- spawn = child_process.spawn,
- exec = child_process.exec,
- execFile = child_process.execFile;
-var assert = require('assert');
-
-try {
- var moment = require('moment');
-} catch (e) {
- moment = null;
-}
-
-
-//---- globals and constants
-
-var nodeVer = process.versions.node.split('.').map(Number);
-var nodeSpawnSupportsStdio = (nodeVer[0] > 0 || nodeVer[1] >= 8);
-
-// Internal debug logging via `console.warn`.
-var _DEBUG = false;
-
-// Output modes.
-var OM_LONG = 1;
-var OM_JSON = 2;
-var OM_INSPECT = 3;
-var OM_SIMPLE = 4;
-var OM_SHORT = 5;
-var OM_BUNYAN = 6;
-var OM_FROM_NAME = {
- 'long': OM_LONG,
- 'paul': OM_LONG, /* backward compat */
- 'json': OM_JSON,
- 'inspect': OM_INSPECT,
- 'simple': OM_SIMPLE,
- 'short': OM_SHORT,
- 'bunyan': OM_BUNYAN
-};
-
-
-// Levels
-var TRACE = 10;
-var DEBUG = 20;
-var INFO = 30;
-var WARN = 40;
-var ERROR = 50;
-var FATAL = 60;
-
-var levelFromName = {
- 'trace': TRACE,
- 'debug': DEBUG,
- 'info': INFO,
- 'warn': WARN,
- 'error': ERROR,
- 'fatal': FATAL
-};
-var nameFromLevel = {};
-var upperNameFromLevel = {};
-var upperPaddedNameFromLevel = {};
-Object.keys(levelFromName).forEach(function (name) {
- var lvl = levelFromName[name];
- nameFromLevel[lvl] = name;
- upperNameFromLevel[lvl] = name.toUpperCase();
- upperPaddedNameFromLevel[lvl] = (
- name.length === 4 ? ' ' : '') + name.toUpperCase();
-});
-
-
-// Display time formats.
-var TIME_UTC = 1; // the default, bunyan's native format
-var TIME_LOCAL = 2;
-
-// Timezone formats: output format -> momentjs format string
-var TIMEZONE_UTC_FORMATS = {
- long: '[[]YYYY-MM-DD[T]HH:mm:ss.SSS[Z][]]',
- short: 'HH:mm:ss.SSS[Z]'
-};
-var TIMEZONE_LOCAL_FORMATS = {
- long: '[[]YYYY-MM-DD[T]HH:mm:ss.SSSZ[]]',
- short: 'HH:mm:ss.SSS'
-};
-
-
-// The current raw input line being processed. Used for `uncaughtException`.
-var currLine = null;
-
-// Child dtrace process, if any. Used for signal-handling.
-var child = null;
-
-// Whether ANSI codes are being used. Used for signal-handling.
-var usingAnsiCodes = false;
-
-// Used to tell the 'uncaughtException' handler that '-c CODE' is being used.
-var gUsingConditionOpts = false;
-
-// Pager child process, and output stream to which to write.
-var pager = null;
-var stdout = process.stdout;
-
-// Whether we are reading from stdin.
-var readingStdin = false;
-
-
-
-//---- support functions
-
-function getVersion() {
- return VERSION;
-}
-
-
-var format = util.format;
-if (!format) {
- /* BEGIN JSSTYLED */
- // If not node 0.6, then use its `util.format`:
- // <https://github.com/joyent/node/blob/master/lib/util.js#L22>:
- var inspect = util.inspect;
- var formatRegExp = /%[sdj%]/g;
- format = function format(f) {
- if (typeof f !== 'string') {
- var objects = [];
- for (var i = 0; i < arguments.length; i++) {
- objects.push(inspect(arguments[i]));
- }
- return objects.join(' ');
- }
-
- var i = 1;
- var args = arguments;
- var len = args.length;
- var str = String(f).replace(formatRegExp, function (x) {
- if (i >= len)
- return x;
- switch (x) {
- case '%s': return String(args[i++]);
- case '%d': return Number(args[i++]);
- case '%j': return JSON.stringify(args[i++]);
- case '%%': return '%';
- default:
- return x;
- }
- });
- for (var x = args[i]; i < len; x = args[++i]) {
- if (x === null || typeof x !== 'object') {
- str += ' ' + x;
- } else {
- str += ' ' + inspect(x);
- }
- }
- return str;
- };
- /* END JSSTYLED */
-}
-
-function indent(s) {
- return ' ' + s.split(/\r?\n/).join('\n ');
-}
-
-function objCopy(obj) {
- if (obj === null) {
- return null;
- } else if (Array.isArray(obj)) {
- return obj.slice();
- } else {
- var copy = {};
- Object.keys(obj).forEach(function (k) {
- copy[k] = obj[k];
- });
- return copy;
- }
-}
-
-function printHelp() {
- /* BEGIN JSSTYLED */
- p('Usage:');
- p(' bunyan [OPTIONS] [FILE ...]');
- p(' ... | bunyan [OPTIONS]');
- p(' bunyan [OPTIONS] -p PID');
- p('');
- p('Filter and pretty-print Bunyan log file content.');
- p('');
- p('General options:');
- p(' -h, --help print this help info and exit');
- p(' --version print version of this command and exit');
- p('');
- p('Runtime log snooping (via DTrace, only on supported platforms):');
- p(' -p PID Process bunyan:log-* probes from the process');
- p(' with the given PID. Can be used multiple times,');
- p(' or specify all processes with "*", or a set of');
- p(' processes whose command & args match a pattern');
- p(' with "-p NAME".');
- p('');
- p('Filtering options:');
- p(' -l, --level LEVEL');
- p(' Only show messages at or above the specified level.');
- p(' You can specify level *names* or the internal numeric');
- p(' values.');
- p(' -c, --condition CONDITION');
- p(' Run each log message through the condition and');
- p(' only show those that return truish. E.g.:');
- p(' -c \'this.pid == 123\'');
- p(' -c \'this.level == DEBUG\'');
- p(' -c \'this.msg.indexOf("boom") != -1\'');
- p(' "CONDITION" must be legal JS code. `this` holds');
- p(' the log record. The TRACE, DEBUG, ... FATAL values');
- p(' are defined to help with comparing `this.level`.');
- p(' --strict Suppress all but legal Bunyan JSON log lines. By default');
- p(' non-JSON, and non-Bunyan lines are passed through.');
- p('');
- p('Output options:');
- p(' --pager Pipe output into `less` (or $PAGER if set), if');
- p(' stdout is a TTY. This overrides $BUNYAN_NO_PAGER.');
- p(' Note: Paging is only supported on node >=0.8.');
- p(' --no-pager Do not pipe output into a pager.');
- p(' --color Colorize output. Defaults to try if output');
- p(' stream is a TTY.');
- p(' --no-color Force no coloring (e.g. terminal doesn\'t support it)');
- p(' -o, --output MODE');
- p(' Specify an output mode/format. One of');
- p(' long: (the default) pretty');
- p(' json: JSON output, 2-space indent');
- p(' json-N: JSON output, N-space indent, e.g. "json-4"');
- p(' bunyan: 0 indented JSON, bunyan\'s native format');
- p(' inspect: node.js `util.inspect` output');
- p(' short: like "long", but more concise');
- p(' simple: level, followed by "-" and then the message');
- p(' -j shortcut for `-o json`');
- p(' -0 shortcut for `-o bunyan`');
- p(' -L, --time local');
- p(' Display time field in local time, rather than UTC.');
- p('');
- p('Environment Variables:');
- p(' BUNYAN_NO_COLOR Set to a non-empty value to force no output ');
- p(' coloring. See "--no-color".');
- p(' BUNYAN_NO_PAGER Disable piping output to a pager. ');
- p(' See "--no-pager".');
- p('');
- p('See <https://github.com/trentm/node-bunyan> for more complete docs.');
- p('Please report bugs to <https://github.com/trentm/node-bunyan/issues>.');
- /* END JSSTYLED */
-}
-
-/*
- * If the user specifies multiple input sources, we want to print out records
- * from all sources in a single, chronologically ordered stream. To do this
- * efficiently, we first assume that all records within each source are ordered
- * already, so we need only keep track of the next record in each source and
- * the time of the last record emitted. To avoid excess memory usage, we
- * pause() streams that are ahead of others.
- *
- * 'streams' is an object indexed by source name (file name) which specifies:
- *
- * stream Actual stream object, so that we can pause and resume it.
- *
- * records Array of log records we've read, but not yet emitted. Each
- * record includes 'line' (the raw line), 'rec' (the JSON
- * record), and 'time' (the parsed time value).
- *
- * done Whether the stream has any more records to emit.
- */
-var streams = {};
-
-function gotRecord(file, line, rec, opts, stylize)
-{
- var time = new Date(rec.time);
-
- streams[file]['records'].push({ line: line, rec: rec, time: time });
- emitNextRecord(opts, stylize);
-}
-
-function filterRecord(rec, opts)
-{
- if (opts.level && rec.level < opts.level) {
- return false;
- }
-
- if (opts.condFuncs) {
- var recCopy = objCopy(rec);
- for (var i = 0; i < opts.condFuncs.length; i++) {
- var pass = opts.condFuncs[i].call(recCopy);
- if (!pass)
- return false;
- }
- } else if (opts.condVm) {
- for (var i = 0; i < opts.condVm.length; i++) {
- var pass = opts.condVm[i].runInNewContext(rec);
- if (!pass)
- return false;
- }
- }
-
- return true;
-}
-
-function emitNextRecord(opts, stylize)
-{
- var ofile, ready, minfile, rec;
-
- for (;;) {
- /*
- * Take a first pass through the input streams to see if we have a
- * record from all of them. If not, we'll pause any streams for
- * which we do already have a record (to avoid consuming excess
- * memory) and then wait until we have records from the others
- * before emitting the next record.
- *
- * As part of the same pass, we look for the earliest record
- * we have not yet emitted.
- */
- minfile = undefined;
- ready = true;
- for (ofile in streams) {
-
- if (streams[ofile].stream === null ||
- (!streams[ofile].done && streams[ofile].records.length === 0)) {
- ready = false;
- break;
- }
-
- if (streams[ofile].records.length > 0 &&
- (minfile === undefined ||
- streams[minfile].records[0].time >
- streams[ofile].records[0].time)) {
- minfile = ofile;
- }
- }
-
- if (!ready || minfile === undefined) {
- for (ofile in streams) {
- if (!streams[ofile].stream || streams[ofile].done)
- continue;
-
- if (streams[ofile].records.length > 0) {
- if (!streams[ofile].paused) {
- streams[ofile].paused = true;
- streams[ofile].stream.pause();
- }
- } else if (streams[ofile].paused) {
- streams[ofile].paused = false;
- streams[ofile].stream.resume();
- }
- }
-
- return;
- }
-
- /*
- * Emit the next record for 'minfile', and invoke ourselves again to
- * make sure we emit as many records as we can right now.
- */
- rec = streams[minfile].records.shift();
- emitRecord(rec.rec, rec.line, opts, stylize);
- }
-}
-
-/**
- * Return a function for the given JS code that returns.
- *
- * If no 'return' in the given javascript snippet, then assume we are a single
- * statement and wrap in 'return (...)'. This is for convenience for short
- * '-c ...' snippets.
- */
-function funcWithReturnFromSnippet(js) {
- // auto-"return"
- if (js.indexOf('return') === -1) {
- if (js.substring(js.length - 1) === ';') {
- js = js.substring(0, js.length - 1);
- }
- js = 'return (' + js + ')';
- }
-
- // Expose level definitions to condition func context
- var varDefs = [];
- Object.keys(upperNameFromLevel).forEach(function (lvl) {
- varDefs.push(format('var %s = %d;',
- upperNameFromLevel[lvl], lvl));
- });
- varDefs = varDefs.join('\n') + '\n';
-
- return (new Function(varDefs + js));
-}
-
-/**
- * Parse the command-line options and arguments into an object.
- *
- * {
- * 'args': [...] // arguments
- * 'help': true, // true if '-h' option given
- * // etc.
- * }
- *
- * @return {Object} The parsed options. `.args` is the argument list.
- * @throws {Error} If there is an error parsing argv.
- */
-function parseArgv(argv) {
- var parsed = {
- args: [],
- help: false,
- color: null,
- paginate: null,
- outputMode: OM_LONG,
- jsonIndent: 2,
- level: null,
- strict: false,
- pids: null,
- pidsType: null,
- timeFormat: TIME_UTC // one of the TIME_ constants
- };
-
- // Turn '-iH' into '-i -H', except for argument-accepting options.
- var args = argv.slice(2); // drop ['node', 'scriptname']
- var newArgs = [];
- var optTakesArg = {'d': true, 'o': true, 'c': true, 'l': true, 'p': true};
- for (var i = 0; i < args.length; i++) {
- if (args[i].charAt(0) === '-' && args[i].charAt(1) !== '-' &&
- args[i].length > 2)
- {
- var splitOpts = args[i].slice(1).split('');
- for (var j = 0; j < splitOpts.length; j++) {
- newArgs.push('-' + splitOpts[j]);
- if (optTakesArg[splitOpts[j]]) {
- var optArg = splitOpts.slice(j+1).join('');
- if (optArg.length) {
- newArgs.push(optArg);
- }
- break;
- }
- }
- } else {
- newArgs.push(args[i]);
- }
- }
- args = newArgs;
-
- // Expose level definitions to condition vm context
- var condDefines = [];
- Object.keys(upperNameFromLevel).forEach(function (lvl) {
- condDefines.push(
- format('Object.prototype.%s = %s;', upperNameFromLevel[lvl], lvl));
- });
- condDefines = condDefines.join('\n') + '\n';
-
- var endOfOptions = false;
- while (args.length > 0) {
- var arg = args.shift();
- switch (arg) {
- case '--':
- endOfOptions = true;
- break;
- case '-h': // display help and exit
- case '--help':
- parsed.help = true;
- break;
- case '--version':
- parsed.version = true;
- break;
- case '--strict':
- parsed.strict = true;
- break;
- case '--color':
- parsed.color = true;
- break;
- case '--no-color':
- parsed.color = false;
- break;
- case '--pager':
- parsed.paginate = true;
- break;
- case '--no-pager':
- parsed.paginate = false;
- break;
- case '-o':
- case '--output':
- var name = args.shift();
- var idx = name.lastIndexOf('-');
- if (idx !== -1) {
- var indentation = Number(name.slice(idx+1));
- if (! isNaN(indentation)) {
- parsed.jsonIndent = indentation;
- name = name.slice(0, idx);
- }
- }
- parsed.outputMode = OM_FROM_NAME[name];
- if (parsed.outputMode === undefined) {
- throw new Error('unknown output mode: "'+name+'"');
- }
- break;
- case '-j': // output with JSON.stringify
- parsed.outputMode = OM_JSON;
- break;
- case '-0':
- parsed.outputMode = OM_BUNYAN;
- break;
- case '-L':
- parsed.timeFormat = TIME_LOCAL;
- if (!moment) {
- throw new Error(
- 'could not find moment package required for "-L"');
- }
- break;
- case '--time':
- var timeArg = args.shift();
- switch (timeArg) {
- case 'utc':
- parsed.timeFormat = TIME_UTC;
- break
- case 'local':
- parsed.timeFormat = TIME_LOCAL;
- if (!moment) {
- throw new Error('could not find moment package '
- + 'required for "--time=local"');
- }
- break
- case undefined:
- throw new Error('missing argument to "--time"');
- default:
- throw new Error(format('invalid time format: "%s"',
- timeArg));
- }
- break;
- case '-p':
- if (!parsed.pids) {
- parsed.pids = [];
- }
- var pidArg = args.shift();
- var pid = +(pidArg);
- if (!isNaN(pid) || pidArg === '*') {
- if (parsed.pidsType && parsed.pidsType !== 'num') {
- throw new Error(format('cannot mix PID name and '
- + 'number arguments: "%s"', pidArg));
- }
- parsed.pidsType = 'num';
- if (!parsed.pids) {
- parsed.pids = [];
- }
- parsed.pids.push(isNaN(pid) ? pidArg : pid);
- } else {
- if (parsed.pidsType && parsed.pidsType !== 'name') {
- throw new Error(format('cannot mix PID name and '
- + 'number arguments: "%s"', pidArg));
- }
- parsed.pidsType = 'name';
- parsed.pids = pidArg;
- }
- break;
- case '-l':
- case '--level':
- var levelArg = args.shift();
- var level = +(levelArg);
- if (isNaN(level)) {
- level = +levelFromName[levelArg.toLowerCase()];
- }
- if (isNaN(level)) {
- throw new Error('unknown level value: "'+levelArg+'"');
- }
- parsed.level = level;
- break;
- case '-c':
- case '--condition':
- gUsingConditionOpts = true;
- var condition = args.shift();
- if (Boolean(process.env.BUNYAN_EXEC &&
- process.env.BUNYAN_EXEC === 'vm'))
- {
- parsed.condVm = parsed.condVm || [];
- var scriptName = 'bunyan-condition-'+parsed.condVm.length;
- var code = condDefines + condition;
- var script;
- try {
- script = vm.createScript(code, scriptName);
- } catch (complErr) {
- throw new Error(format('illegal CONDITION code: %s\n'
- + ' CONDITION script:\n'
- + '%s\n'
- + ' Error:\n'
- + '%s',
- complErr, indent(code), indent(complErr.stack)));
- }
-
- // Ensure this is a reasonably safe CONDITION.
- try {
- script.runInNewContext(minValidRecord);
- } catch (condErr) {
- throw new Error(format(
- /* JSSTYLED */
- 'CONDITION code cannot safely filter a minimal Bunyan log record\n'
- + ' CONDITION script:\n'
- + '%s\n'
- + ' Minimal Bunyan log record:\n'
- + '%s\n'
- + ' Filter error:\n'
- + '%s',
- indent(code),
- indent(JSON.stringify(minValidRecord, null, 2)),
- indent(condErr.stack)
- ));
- }
- parsed.condVm.push(script);
- } else {
- parsed.condFuncs = parsed.condFuncs || [];
- parsed.condFuncs.push(funcWithReturnFromSnippet(condition));
- }
- break;
- default: // arguments
- if (!endOfOptions && arg.length > 0 && arg[0] === '-') {
- throw new Error('unknown option "'+arg+'"');
- }
- parsed.args.push(arg);
- break;
- }
- }
- //TODO: '--' handling and error on a first arg that looks like an option.
-
- return parsed;
-}
-
-
-function isInteger(s) {
- return (s.search(/^-?[0-9]+$/) == 0);
-}
-
-
-// http://en.wikipedia.org/wiki/ANSI_escape_code#graphics
-// Suggested colors (some are unreadable in common cases):
-// - Good: cyan, yellow (limited use), bold, green, magenta, red
-// - Bad: blue (not visible on cmd.exe), grey (same color as background on
-// Solarized Dark theme from <https://github.com/altercation/solarized>, see
-// issue #160)
-var colors = {
- 'bold' : [1, 22],
- 'italic' : [3, 23],
- 'underline' : [4, 24],
- 'inverse' : [7, 27],
- 'white' : [37, 39],
- 'grey' : [90, 39],
- 'black' : [30, 39],
- 'blue' : [34, 39],
- 'cyan' : [36, 39],
- 'green' : [32, 39],
- 'magenta' : [35, 39],
- 'red' : [31, 39],
- 'yellow' : [33, 39]
-};
-
-function stylizeWithColor(str, color) {
- if (!str)
- return '';
- var codes = colors[color];
- if (codes) {
- return '\033[' + codes[0] + 'm' + str +
- '\033[' + codes[1] + 'm';
- } else {
- return str;
- }
-}
-
-function stylizeWithoutColor(str, color) {
- return str;
-}
-
-
-/**
- * Is this a valid Bunyan log record.
- */
-function isValidRecord(rec) {
- if (rec.v == null ||
- rec.level == null ||
- rec.name == null ||
- rec.hostname == null ||
- rec.pid == null ||
- rec.time == null ||
- rec.msg == null) {
- // Not valid Bunyan log.
- return false;
- } else {
- return true;
- }
-}
-var minValidRecord = {
- v: 0, //TODO: get this from bunyan.LOG_VERSION
- level: INFO,
- name: 'name',
- hostname: 'hostname',
- pid: 123,
- time: Date.now(),
- msg: 'msg'
-};
-
-
-/**
- * Parses the given log line and either emits it right away (for invalid
- * records) or enqueues it for emitting later when it's the next line to show.
- */
-function handleLogLine(file, line, opts, stylize) {
- currLine = line; // intentionally global
-
- // Emit non-JSON lines immediately.
- var rec;
- if (!line) {
- if (!opts.strict) emit(line + '\n');
- return;
- } else if (line[0] !== '{') {
- if (!opts.strict) emit(line + '\n'); // not JSON
- return;
- } else {
- try {
- rec = JSON.parse(line);
- } catch (e) {
- if (!opts.strict) emit(line + '\n');
- return;
- }
- }
-
- if (!isValidRecord(rec)) {
- if (!opts.strict) emit(line + '\n');
- return;
- }
-
- if (!filterRecord(rec, opts))
- return;
-
- if (file === null)
- return emitRecord(rec, line, opts, stylize);
-
- return gotRecord(file, line, rec, opts, stylize);
-}
-
-/**
- * Print out a single result, considering input options.
- */
-function emitRecord(rec, line, opts, stylize) {
- var short = false;
-
- switch (opts.outputMode) {
- case OM_SHORT:
- short = true;
- /* jsl:fall-thru */
-
- case OM_LONG:
- // [time] LEVEL: name[/comp]/pid on hostname (src): msg* (extras...)
- // msg*
- // --
- // long and multi-line extras
- // ...
- // If 'msg' is single-line, then it goes in the top line.
- // If 'req', show the request.
- // If 'res', show the response.
- // If 'err' and 'err.stack' then show that.
- if (!isValidRecord(rec)) {
- return emit(line + '\n');
- }
-
- delete rec.v;
-
- // Time.
- var time;
- if (!short && opts.timeFormat === TIME_UTC) {
- // Fast default path: We assume the raw `rec.time` is a UTC time
- // in ISO 8601 format (per spec).
- time = '[' + rec.time + ']';
- } else if (!moment && opts.timeFormat === TIME_UTC) {
- // Don't require momentjs install, as long as not using TIME_LOCAL.
- time = rec.time.substr(11);
- } else {
- var tzFormat;
- var moTime = moment(rec.time);
- switch (opts.timeFormat) {
- case TIME_UTC:
- tzFormat = TIMEZONE_UTC_FORMATS[short ? 'short' : 'long'];
- moTime.utc();
- break;
- case TIME_LOCAL:
- tzFormat = TIMEZONE_LOCAL_FORMATS[short ? 'short' : 'long'];
- break;
- default:
- throw new Error('unexpected timeFormat: ' + opts.timeFormat);
- };
- time = moTime.format(tzFormat);
- }
- time = stylize(time, 'XXX');
- delete rec.time;
-
- var nameStr = rec.name;
- delete rec.name;
-
- if (rec.component) {
- nameStr += '/' + rec.component;
- }
- delete rec.component;
-
- if (!short)
- nameStr += '/' + rec.pid;
- delete rec.pid;
-
- var level = (upperPaddedNameFromLevel[rec.level] || 'LVL' + rec.level);
- if (opts.color) {
- var colorFromLevel = {
- 10: 'white', // TRACE
- 20: 'yellow', // DEBUG
- 30: 'cyan', // INFO
- 40: 'magenta', // WARN
- 50: 'red', // ERROR
- 60: 'inverse', // FATAL
- };
- level = stylize(level, colorFromLevel[rec.level]);
- }
- delete rec.level;
-
- var src = '';
- if (rec.src && rec.src.file) {
- var s = rec.src;
- if (s.func) {
- src = format(' (%s:%d in %s)', s.file, s.line, s.func);
- } else {
- src = format(' (%s:%d)', s.file, s.line);
- }
- src = stylize(src, 'green');
- }
- delete rec.src;
-
- var hostname = rec.hostname;
- delete rec.hostname;
-
- var extras = [];
- var details = [];
-
- if (rec.req_id) {
- extras.push('req_id=' + rec.req_id);
- }
- delete rec.req_id;
-
- var onelineMsg;
- if (rec.msg.indexOf('\n') !== -1) {
- onelineMsg = '';
- details.push(indent(stylize(rec.msg, 'cyan')));
- } else {
- onelineMsg = ' ' + stylize(rec.msg, 'cyan');
- }
- delete rec.msg;
-
- if (rec.req && typeof (rec.req) === 'object') {
- var req = rec.req;
- delete rec.req;
- var headers = req.headers;
- if (!headers) {
- headers = '';
- } else if (typeof (headers) === 'string') {
- headers = '\n' + headers;
- } else if (typeof (headers) === 'object') {
- headers = '\n' + Object.keys(headers).map(function (h) {
- return h + ': ' + headers[h];
- }).join('\n');
- }
- var s = format('%s %s HTTP/%s%s', req.method,
- req.url,
- req.httpVersion || '1.1',
- headers
- );
- delete req.url;
- delete req.method;
- delete req.httpVersion;
- delete req.headers;
- if (req.body) {
- s += '\n\n' + (typeof (req.body) === 'object'
- ? JSON.stringify(req.body, null, 2) : req.body);
- delete req.body;
- }
- if (req.trailers && Object.keys(req.trailers) > 0) {
- s += '\n' + Object.keys(req.trailers).map(function (t) {
- return t + ': ' + req.trailers[t];
- }).join('\n');
- }
- delete req.trailers;
- details.push(indent(s));
- // E.g. for extra 'foo' field on 'req', add 'req.foo' at
- // top-level. This *does* have the potential to stomp on a
- // literal 'req.foo' key.
- Object.keys(req).forEach(function (k) {
- rec['req.' + k] = req[k];
- })
- }
-
- if (rec.client_req && typeof (rec.client_req) === 'object') {
- var client_req = rec.client_req;
- delete rec.client_req;
- var headers = client_req.headers;
- var hostHeaderLine = '';
- var s = '';
- if (client_req.address) {
- hostHeaderLine = '\nHost: ' + client_req.address;
- if (client_req.port)
- hostHeaderLine += ':' + client_req.port;
- }
- delete client_req.headers;
- delete client_req.address;
- delete client_req.port;
- s += format('%s %s HTTP/%s%s%s', client_req.method,
- client_req.url,
- client_req.httpVersion || '1.1',
- hostHeaderLine,
- (headers ?
- '\n' + Object.keys(headers).map(
- function (h) {
- return h + ': ' + headers[h];
- }).join('\n') :
- ''));
- delete client_req.method;
- delete client_req.url;
- delete client_req.httpVersion;
- if (client_req.body) {
- s += '\n\n' + (typeof (client_req.body) === 'object' ?
- JSON.stringify(client_req.body, null, 2) :
- client_req.body);
- delete client_req.body;
- }
- // E.g. for extra 'foo' field on 'client_req', add
- // 'client_req.foo' at top-level. This *does* have the potential
- // to stomp on a literal 'client_req.foo' key.
- Object.keys(client_req).forEach(function (k) {
- rec['client_req.' + k] = client_req[k];
- })
- details.push(indent(s));
- }
-
- function _res(res) {
- var s = '';
- if (res.statusCode !== undefined) {
- s += format('HTTP/1.1 %s %s\n', res.statusCode,
- http.STATUS_CODES[res.statusCode]);
- delete res.statusCode;
- }
- // Handle `res.header` or `res.headers` as either a string or
- // and object of header key/value pairs. Prefer `res.header` if set
- // (TODO: Why? I don't recall. Typical of restify serializer?
- // Typical JSON.stringify of a core node HttpResponse?)
- var headerTypes = {string: true, object: true};
- var headers;
- if (res.header && headerTypes[typeof (res.header)]) {
- headers = res.header;
- delete res.header;
- } else if (res.headers && headerTypes[typeof (res.headers)]) {
- headers = res.headers;
- delete res.headers;
- }
- if (headers === undefined) {
- /* pass through */
- } else if (typeof (headers) === 'string') {
- s += headers.trimRight();
- } else {
- s += Object.keys(headers).map(
- function (h) { return h + ': ' + headers[h]; }).join('\n');
- }
- if (res.body !== undefined) {
- var body = (typeof (res.body) === 'object'
- ? JSON.stringify(res.body, null, 2) : res.body);
- if (body.length > 0) { s += '\n\n' + body };
- delete res.body;
- } else {
- s = s.trimRight();
- }
- if (res.trailer) {
- s += '\n' + res.trailer;
- }
- delete res.trailer;
- if (s) {
- details.push(indent(s));
- }
- // E.g. for extra 'foo' field on 'res', add 'res.foo' at
- // top-level. This *does* have the potential to stomp on a
- // literal 'res.foo' key.
- Object.keys(res).forEach(function (k) {
- rec['res.' + k] = res[k];
- });
- }
-
- if (rec.res && typeof (rec.res) === 'object') {
- _res(rec.res);
- delete rec.res;
- }
- if (rec.client_res && typeof (rec.client_res) === 'object') {
- _res(rec.client_res);
- delete rec.client_res;
- }
-
- if (rec.err && rec.err.stack) {
- var err = rec.err
- if (typeof (err.stack) !== 'string') {
- details.push(indent(err.stack.toString()));
- } else {
- details.push(indent(err.stack));
- }
- delete err.message;
- delete err.name;
- delete err.stack;
- // E.g. for extra 'foo' field on 'err', add 'err.foo' at
- // top-level. This *does* have the potential to stomp on a
- // literal 'err.foo' key.
- Object.keys(err).forEach(function (k) {
- rec['err.' + k] = err[k];
- })
- delete rec.err;
- }
-
- var leftover = Object.keys(rec);
- for (var i = 0; i < leftover.length; i++) {
- var key = leftover[i];
- var value = rec[key];
- var stringified = false;
- if (typeof (value) !== 'string') {
- value = JSON.stringify(value, null, 2);
- stringified = true;
- }
- if (value.indexOf('\n') !== -1 || value.length > 50) {
- details.push(indent(key + ': ' + value));
- } else if (!stringified && (value.indexOf(' ') != -1 ||
- value.length === 0))
- {
- extras.push(key + '=' + JSON.stringify(value));
- } else {
- extras.push(key + '=' + value);
- }
- }
-
- extras = stylize(
- (extras.length ? ' (' + extras.join(', ') + ')' : ''), 'XXX');
- details = stylize(
- (details.length ? details.join('\n --\n') + '\n' : ''), 'XXX');
- if (!short)
- emit(format('%s %s: %s on %s%s:%s%s\n%s',
- time,
- level,
- nameStr,
- hostname || '<no-hostname>',
- src,
- onelineMsg,
- extras,
- details));
- else
- emit(format('%s %s %s:%s%s\n%s',
- time,
- level,
- nameStr,
- onelineMsg,
- extras,
- details));
- break;
-
- case OM_INSPECT:
- emit(util.inspect(rec, false, Infinity, true) + '\n');
- break;
-
- case OM_BUNYAN:
- emit(JSON.stringify(rec, null, 0) + '\n');
- break;
-
- case OM_JSON:
- emit(JSON.stringify(rec, null, opts.jsonIndent) + '\n');
- break;
-
- case OM_SIMPLE:
- /* JSSTYLED */
- // <http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/SimpleLayout.html>
- if (!isValidRecord(rec)) {
- return emit(line + '\n');
- }
- emit(format('%s - %s\n',
- upperNameFromLevel[rec.level] || 'LVL' + rec.level,
- rec.msg));
- break;
- default:
- throw new Error('unknown output mode: '+opts.outputMode);
- }
-}
-
-
-var stdoutFlushed = true;
-function emit(s) {
- try {
- stdoutFlushed = stdout.write(s);
- } catch (e) {
- // Handle any exceptions in stdout writing in `stdout.on('error', ...)`.
- }
-}
-
-
-/**
- * A hacked up version of 'process.exit' that will first drain stdout
- * before exiting. *WARNING: This doesn't stop event processing.* IOW,
- * callers have to be careful that code following this call isn't
- * accidentally executed.
- *
- * In node v0.6 "process.stdout and process.stderr are blocking when they
- * refer to regular files or TTY file descriptors." However, this hack might
- * still be necessary in a shell pipeline.
- */
-function drainStdoutAndExit(code) {
- if (_DEBUG) warn('(drainStdoutAndExit(%d))', code);
- stdout.on('drain', function () {
- cleanupAndExit(code);
- });
- if (stdoutFlushed) {
- cleanupAndExit(code);
- }
-}
-
-
-/**
- * Process all input from stdin.
- *
- * @params opts {Object} Bunyan options object.
- * @param stylize {Function} Output stylize function to use.
- * @param callback {Function} `function ()`
- */
-function processStdin(opts, stylize, callback) {
- readingStdin = true;
- var leftover = ''; // Left-over partial line from last chunk.
- var stdin = process.stdin;
- stdin.resume();
- stdin.setEncoding('utf8');
- stdin.on('data', function (chunk) {
- var lines = chunk.split(/\r\n|\n/);
- var length = lines.length;
- if (length === 1) {
- leftover += lines[0];
- return;
- }
-
- if (length > 1) {
- handleLogLine(null, leftover + lines[0], opts, stylize);
- }
- leftover = lines.pop();
- length -= 1;
- for (var i = 1; i < length; i++) {
- handleLogLine(null, lines[i], opts, stylize);
- }
- });
- stdin.on('end', function () {
- if (leftover) {
- handleLogLine(null, leftover, opts, stylize);
- leftover = '';
- }
- callback();
- });
-}
-
-
-/**
- * Process bunyan:log-* probes from the given pid.
- *
- * @params opts {Object} Bunyan options object.
- * @param stylize {Function} Output stylize function to use.
- * @param callback {Function} `function (code)`
- */
-function processPids(opts, stylize, callback) {
- var leftover = ''; // Left-over partial line from last chunk.
-
- /**
- * Get the PIDs to dtrace.
- *
- * @param cb {Function} `function (errCode, pids)`
- */
- function getPids(cb) {
- if (opts.pidsType === 'num') {
- return cb(null, opts.pids);
- }
- if (process.platform === 'sunos') {
- execFile('/bin/pgrep', ['-lf', opts.pids],
- function (pidsErr, stdout, stderr) {
- if (pidsErr) {
- warn('bunyan: error getting PIDs for "%s": %s\n%s\n%s',
- opts.pids, pidsErr.message, stdout, stderr);
- return cb(1);
- }
- var pids = stdout.trim().split('\n')
- .map(function (line) {
- return line.trim().split(/\s+/)[0]
- })
- .filter(function (pid) {
- return Number(pid) !== process.pid
- });
- if (pids.length === 0) {
- warn('bunyan: error: no matching PIDs found for "%s"',
- opts.pids);
- return cb(2);
- }
- cb(null, pids);
- }
- );
- } else {
- var regex = opts.pids;
- if (regex && /[a-zA-Z0-9_]/.test(regex[0])) {
- // 'foo' -> '[f]oo' trick to exclude the 'grep' PID from its
- // own search.
- regex = '[' + regex[0] + ']' + regex.slice(1);
- }
- exec(format('ps -A -o pid,command | grep \'%s\'', regex),
- function (pidsErr, stdout, stderr) {
- if (pidsErr) {
- warn('bunyan: error getting PIDs for "%s": %s\n%s\n%s',
- opts.pids, pidsErr.message, stdout, stderr);
- return cb(1);
- }
- var pids = stdout.trim().split('\n')
- .map(function (line) {
- return line.trim().split(/\s+/)[0];
- })
- .filter(function (pid) {
- return Number(pid) !== process.pid;
- });
- if (pids.length === 0) {
- warn('bunyan: error: no matching PIDs found for "%s"',
- opts.pids);
- return cb(2);
- }
- cb(null, pids);
- }
- );
- }
- }
-
- getPids(function (errCode, pids) {
- if (errCode) {
- return callback(errCode);
- }
-
- var probes = pids.map(function (pid) {
- if (!opts.level)
- return format('bunyan%s:::log-*', pid);
-
- var rval = [], l;
-
- for (l in levelFromName) {
- if (levelFromName[l] >= opts.level)
- rval.push(format('bunyan%s:::log-%s', pid, l));
- }
-
- if (rval.length != 0)
- return rval.join(',');
-
- warn('bunyan: error: level (%d) exceeds maximum logging level',
- opts.level);
- return drainStdoutAndExit(1);
- }).join(',');
- var argv = ['dtrace', '-Z', '-x', 'strsize=4k',
- '-x', 'switchrate=10hz', '-qn',
- format('%s{printf("%s", copyinstr(arg0))}', probes)];
- //console.log('dtrace argv: %s', argv);
- var dtrace = spawn(argv[0], argv.slice(1),
- // Share the stderr handle to have error output come
- // straight through. Only supported in v0.8+.
- {stdio: ['pipe', 'pipe', process.stderr]});
- dtrace.on('error', function (e) {
- if (e.syscall === 'spawn' && e.errno === 'ENOENT') {
- console.error('bunyan: error: could not spawn "dtrace" ' +
- '("bunyan -p" is only supported on platforms with dtrace)');
- } else {
- console.error('bunyan: error: unexpected dtrace error: %s', e);
- }
- callback(1);
- })
- child = dtrace; // intentionally global
-
- function finish(code) {
- if (leftover) {
- handleLogLine(null, leftover, opts, stylize);
- leftover = '';
- }
- callback(code);
- }
-
- dtrace.stdout.setEncoding('utf8');
- dtrace.stdout.on('data', function (chunk) {
- var lines = chunk.split(/\r\n|\n/);
- var length = lines.length;
- if (length === 1) {
- leftover += lines[0];
- return;
- }
- if (length > 1) {
- handleLogLine(null, leftover + lines[0], opts, stylize);
- }
- leftover = lines.pop();
- length -= 1;
- for (var i = 1; i < length; i++) {
- handleLogLine(null, lines[i], opts, stylize);
- }
- });
-
- if (nodeSpawnSupportsStdio) {
- dtrace.on('exit', finish);
- } else {
- // Fallback (for < v0.8) to pipe the dtrace process' stderr to
- // this stderr. Wait for all of (1) process 'exit', (2) stderr
- // 'end', and (2) stdout 'end' before returning to ensure all
- // stderr is flushed (issue #54).
- var returnCode = null;
- var eventsRemaining = 3;
- function countdownToFinish(code) {
- returnCode = code;
- eventsRemaining--;
- if (eventsRemaining == 0) {
- finish(returnCode);
- }
- }
- dtrace.stderr.pipe(process.stderr);
- dtrace.stderr.on('end', countdownToFinish);
- dtrace.stderr.on('end', countdownToFinish);
- dtrace.on('exit', countdownToFinish);
- }
- });
-}
-
-
-/**
- * Process all input from the given log file.
- *
- * @param file {String} Log file path to process.
- * @params opts {Object} Bunyan options object.
- * @param stylize {Function} Output stylize function to use.
- * @param callback {Function} `function ()`
- */
-function processFile(file, opts, stylize, callback) {
- var stream = fs.createReadStream(file);
- if (/\.gz$/.test(file)) {
- stream = stream.pipe(require('zlib').createGunzip());
- }
- // Manually decode streams - lazy load here as per node/lib/fs.js
- var decoder = new (require('string_decoder').StringDecoder)('utf8');
-
- streams[file].stream = stream;
-
- stream.on('error', function (err) {
- streams[file].done = true;
- callback(err);
- });
-
- var leftover = ''; // Left-over partial line from last chunk.
- stream.on('data', function (data) {
- var chunk = decoder.write(data);
- if (!chunk.length) {
- return;
- }
- var lines = chunk.split(/\r\n|\n/);
- var length = lines.length;
- if (length === 1) {
- leftover += lines[0];
- return;
- }
-
- if (length > 1) {
- handleLogLine(file, leftover + lines[0], opts, stylize);
- }
- leftover = lines.pop();
- length -= 1;
- for (var i = 1; i < length; i++) {
- handleLogLine(file, lines[i], opts, stylize);
- }
- });
-
- stream.on('end', function () {
- streams[file].done = true;
- if (leftover) {
- handleLogLine(file, leftover, opts, stylize);
- leftover = '';
- } else {
- emitNextRecord(opts, stylize);
- }
- callback();
- });
-}
-
-
-/**
- * From node async module.
- */
-/* BEGIN JSSTYLED */
-function asyncForEach(arr, iterator, callback) {
- callback = callback || function () {};
- if (!arr.length) {
- return callback();
- }
- var completed = 0;
- arr.forEach(function (x) {
- iterator(x, function (err) {
- if (err) {
- callback(err);
- callback = function () {};
- }
- else {
- completed += 1;
- if (completed === arr.length) {
- callback();
- }
- }
- });
- });
-};
-/* END JSSTYLED */
-
-
-
-/**
- * Cleanup and exit properly.
- *
- * Warning: this doesn't stop processing, i.e. process exit might be delayed.
- * It is up to the caller to ensure that no subsequent bunyan processing
- * is done after calling this.
- *
- * @param code {Number} exit code.
- * @param signal {String} Optional signal name, if this was exitting because
- * of a signal.
- */
-var cleanedUp = false;
-function cleanupAndExit(code, signal) {
- // Guard one call.
- if (cleanedUp) {
- return;
- }
- cleanedUp = true;
- if (_DEBUG) warn('(bunyan: cleanupAndExit)');
-
- // Clear possibly interrupted ANSI code (issue #59).
- if (usingAnsiCodes) {
- stdout.write('\033[0m');
- }
-
- // Kill possible dtrace child.
- if (child) {
- child.kill(signal);
- }
-
- if (pager) {
- // Let pager know that output is done, then wait for pager to exit.
- stdout.end();
- pager.on('exit', function (pagerCode) {
- if (_DEBUG)
- warn('(bunyan: pager exit -> process.exit(%s))',
- pagerCode || code);
- process.exit(pagerCode || code);
- });
- } else {
- if (_DEBUG) warn('(bunyan: process.exit(%s))', code);
- process.exit(code);
- }
-}
-
-
-
-//---- mainline
-
-process.on('SIGINT', function () {
- /**
- * Ignore SIGINT (Ctrl+C) if processing stdin -- we should process
- * remaining output from preceding process in the pipeline and
- * except *it* to close.
- */
- if (!readingStdin) {
- cleanupAndExit(1, 'SIGINT');
- }
-});
-process.on('SIGQUIT', function () { cleanupAndExit(1, 'SIGQUIT'); });
-process.on('SIGTERM', function () { cleanupAndExit(1, 'SIGTERM'); });
-process.on('SIGHUP', function () { cleanupAndExit(1, 'SIGHUP'); });
-
-process.on('uncaughtException', function (err) {
- function _indent(s) {
- var lines = s.split(/\r?\n/);
- for (var i = 0; i < lines.length; i++) {
- lines[i] = '* ' + lines[i];
- }
- return lines.join('\n');
- }
-
- var title = encodeURIComponent(format(
- 'Bunyan %s crashed: %s', getVersion(), String(err)));
- var e = console.error;
- e('```');
- e('* The Bunyan CLI crashed!');
- e('*');
- if (err.name === 'ReferenceError' && gUsingConditionOpts) {
- /* BEGIN JSSTYLED */
- e('* This crash was due to a "ReferenceError", which is often the result of given');
- e('* `-c CONDITION` code that doesn\'t guard against undefined values. If that is');
- /* END JSSTYLED */
- e('* not the problem:');
- e('*');
- }
- e('* Please report this issue and include the details below:');
- e('*');
- e('* https://github.com/trentm/node-bunyan/issues/new?title=%s', title);
- e('*');
- e('* * *');
- e('* platform:', process.platform);
- e('* node version:', process.version);
- e('* bunyan version:', getVersion());
- e('* argv: %j', process.argv);
- e('* log line: %j', currLine);
- e('* stack:');
- e(_indent(err.stack));
- e('```');
- process.exit(1);
-});
-
-
-function main(argv) {
- try {
- var opts = parseArgv(argv);
- } catch (e) {
- warn('bunyan: error: %s', e.message);
- return drainStdoutAndExit(1);
- }
- if (opts.help) {
- printHelp();
- return;
- }
- if (opts.version) {
- console.log('bunyan ' + getVersion());
- return;
- }
- if (opts.pid && opts.args.length > 0) {
- warn('bunyan: error: can\'t use both "-p PID" (%s) and file (%s) args',
- opts.pid, opts.args.join(' '));
- return drainStdoutAndExit(1);
- }
- if (opts.color === null) {
- if (process.env.BUNYAN_NO_COLOR &&
- process.env.BUNYAN_NO_COLOR.length > 0) {
- opts.color = false;
- } else {
- opts.color = process.stdout.isTTY;
- }
- }
- usingAnsiCodes = opts.color; // intentionally global
- var stylize = (opts.color ? stylizeWithColor : stylizeWithoutColor);
-
- // Pager.
- var paginate = (
- process.stdout.isTTY &&
- process.stdin.isTTY &&
- !opts.pids && // Don't page if following process output.
- opts.args.length > 0 && // Don't page if no file args to process.
- process.platform !== 'win32' &&
- (nodeVer[0] > 0 || nodeVer[1] >= 8) &&
- (opts.paginate === true ||
- (opts.paginate !== false &&
- (!process.env.BUNYAN_NO_PAGER ||
- process.env.BUNYAN_NO_PAGER.length === 0))));
- if (paginate) {
- var pagerCmd = process.env.PAGER || 'less';
- /* JSSTYLED */
- assert.ok(pagerCmd.indexOf('"') === -1 && pagerCmd.indexOf("'") === -1,
- 'cannot parse PAGER quotes yet');
- var argv = pagerCmd.split(/\s+/g);
- var env = objCopy(process.env);
- if (env.LESS === undefined) {
- // git's default is LESS=FRSX. I don't like the 'S' here because
- // lines are *typically* wide with bunyan output and scrolling
- // horizontally is a royal pain. Note a bug in Mac's `less -F`,
- // such that SIGWINCH can kill it. If that rears too much then
- // I'll remove 'F' from here.
- env.LESS = 'FRX';
- }
- if (_DEBUG) warn('(pager: argv=%j, env.LESS=%j)', argv, env.LESS);
- // `pager` and `stdout` intentionally global.
- pager = spawn(argv[0], argv.slice(1),
- // Share the stderr handle to have error output come
- // straight through. Only supported in v0.8+.
- {env: env, stdio: ['pipe', 1, 2]});
- stdout = pager.stdin;
-
- // Early termination of the pager: just stop.
- pager.on('exit', function (pagerCode) {
- if (_DEBUG) warn('(bunyan: pager exit)');
- pager = null;
- stdout.end()
- stdout = process.stdout;
- cleanupAndExit(pagerCode);
- });
- }
-
- // Stdout error handling. (Couldn't setup until `stdout` was determined.)
- stdout.on('error', function (err) {
- if (_DEBUG) warn('(stdout error event: %s)', err);
- if (err.code === 'EPIPE') {
- drainStdoutAndExit(0);
- } else if (err.toString() === 'Error: This socket is closed.') {
- // Could get this if the pager closes its stdin, but hasn't
- // exited yet.
- drainStdoutAndExit(1);
- } else {
- warn(err);
- drainStdoutAndExit(1);
- }
- });
-
- var retval = 0;
- if (opts.pids) {
- processPids(opts, stylize, function (code) {
- cleanupAndExit(code);
- });
- } else if (opts.args.length > 0) {
- var files = opts.args;
- files.forEach(function (file) {
- streams[file] = { stream: null, records: [], done: false }
- });
- asyncForEach(files,
- function (file, next) {
- processFile(file, opts, stylize, function (err) {
- if (err) {
- warn('bunyan: %s', err.message);
- retval += 1;
- }
- next();
- });
- },
- function (err) {
- if (err) {
- warn('bunyan: unexpected error: %s', err.stack || err);
- return drainStdoutAndExit(1);
- }
- cleanupAndExit(retval);
- }
- );
- } else {
- processStdin(opts, stylize, function () {
- cleanupAndExit(retval);
- });
- }
-}
-
-if (require.main === module) {
- // HACK guard for <https://github.com/trentm/json/issues/24>.
- // We override the `process.stdout.end` guard that core node.js puts in
- // place. The real fix is that `.end()` shouldn't be called on stdout
- // in node core. Node v0.6.9 fixes that. Only guard for v0.6.0..v0.6.8.
- if ([0, 6, 0] <= nodeVer && nodeVer <= [0, 6, 8]) {
- var stdout = process.stdout;
- stdout.end = stdout.destroy = stdout.destroySoon = function () {
- /* pass */
- };
- }
-
- main(process.argv);
-}
http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/bunyan/docs/bunyan.1
----------------------------------------------------------------------
diff --git a/node_modules/bunyan/docs/bunyan.1 b/node_modules/bunyan/docs/bunyan.1
deleted file mode 100644
index 41d3769..0000000
--- a/node_modules/bunyan/docs/bunyan.1
+++ /dev/null
@@ -1,235 +0,0 @@
-.\" generated with Ronn/v0.7.3
-.\" http://github.com/rtomayko/ronn/tree/0.7.3
-.
-.TH "BUNYAN" "1" "January 2015" "" "bunyan manual"
-.
-.SH "NAME"
-\fBbunyan\fR \- filter and pretty\-print Bunyan log file content
-.
-.SH "SYNOPSIS"
-\fBbunyan\fR [OPTIONS]
-.
-.P
-\&\.\.\. | \fBbunyan\fR [OPTIONS]
-.
-.P
-\fBbunyan\fR [OPTIONS] \-p PID
-.
-.SH "DESCRIPTION"
-"Bunyan" is \fBa simple and fast a JSON logging library\fR for node\.js services, a one\-JSON\-object\-per\-line log format, and \fBa \fBbunyan\fR CLI tool\fR for nicely viewing those logs\. This man page describes the latter\.
-.
-.SS "Pretty\-printing"
-A bunyan log file is a stream of JSON objects, optionally interspersed with non\-JSON log lines\. The primary usage of bunyan(1) is to pretty print, for example:
-.
-.IP "" 4
-.
-.nf
-
-$ bunyan foo\.log # or `cat foo\.log | bunyan
-[2012\-02\-08T22:56:52\.856Z] INFO: myservice/123 on example\.com: My message
- extra: multi
- line
-[2012\-02\-08T22:56:54\.856Z] ERROR: myservice/123 on example\.com: My message
-\.\.\.
-.
-.fi
-.
-.IP "" 0
-.
-.P
-By default the "long" output format is used\. Use the \fB\-o FORMAT\fR option to emit other formats\. E\.g\.:
-.
-.IP "" 4
-.
-.nf
-
-$ bunyan foo\.log \-o short
-22:56:52\.856Z INFO myservice: My message
- extra: multi
- line
-22:56:54\.856Z ERROR myservice: My message
-\.\.\.
-.
-.fi
-.
-.IP "" 0
-.
-.P
-These will color the output if supported in your terminal\. See "OUTPUT FORMATS" below\.
-.
-.SS "Filtering"
-The \fBbunyan\fR CLI can also be used to filter a bunyan log\. Use \fB\-l LEVEL\fR to filter by level:
-.
-.IP "" 4
-.
-.nf
-
-$ bunyan foo\.log \-l error # show only \'error\' level records
-[2012\-02\-08T22:56:54\.856Z] ERROR: myservice/123 on example\.com: My message
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Use \fB\-c COND\fR to filter on a JavaScript expression returning true on the record data\. In the COND code, \fBthis\fR refers to the record object:
-.
-.IP "" 4
-.
-.nf
-
-$ bunyan foo\.log \-c `this\.three` # show records with the \'extra\' field
-[2012\-02\-08T22:56:52\.856Z] INFO: myservice/123 on example\.com: My message
- extra: multi
- line
-.
-.fi
-.
-.IP "" 0
-.
-.SH "OPTIONS"
-.
-.TP
-\fB\-h\fR, \fB\-\-help\fR
-Print this help info and exit\.
-.
-.TP
-\fB\-\-version\fR
-Print version of this command and exit\.
-.
-.TP
-\fB\-q\fR, \fB\-\-quiet\fR
-Don\'t warn if input isn\'t valid JSON\.
-.
-.P
-Dtrace options (only on dtrace\-supporting platforms):
-.
-.TP
-\fB\-p PID\fR, \fB\-p NAME\fR
-Process bunyan:log\-* probes from the process with the given PID\. Can be used multiple times, or specify all processes with \'*\', or a set of processes whose command & args match a pattern with \'\-p NAME\'\.
-.
-.P
-Filtering options:
-.
-.TP
-\fB\-l\fR, \fB\-\-level LEVEL\fR
-Only show messages at or above the specified level\. You can specify level \fInames\fR or numeric values\. (See \'Log Levels\' below\.)
-.
-.TP
-\fB\-c COND\fR, \fB\-\-condition COND\fR
-Run each log message through the condition and only show those that resolve to a truish value\. E\.g\. \fB\-c \'this\.pid == 123\'\fR\.
-.
-.TP
-\fB\-\-strict\fR
-Suppress all but legal Bunyan JSON log lines\. By default non\-JSON, and non\-Bunyan lines are passed through\.
-.
-.P
-Output options:
-.
-.TP
-\fB\-\-color\fR
-Colorize output\. Defaults to try if output stream is a TTY\.
-.
-.TP
-\fB\-\-no\-color\fR
-Force no coloring (e\.g\. terminal doesn\'t support it)
-.
-.TP
-\fB\-o FORMAT\fR, \fB\-\-output FORMAT\fR
-Specify an output format\. One of \fBlong\fR (the default), \fBshort\fR, \fBjson\fR, \fBjson\-N\fR, \fBbunyan\fR (the native bunyan 0\-indent JSON output) or \fBinspect\fR\.
-.
-.TP
-\fB\-j\fR
-Shortcut for \fB\-o json\fR\.
-.
-.TP
-\fB\-L\fR, \fB\-\-time local\fR
-Display the time field in \fIlocal\fR time, rather than the default UTC time\.
-.
-.SH "LOG LEVELS"
-In Bunyan log records, then \fBlevel\fR field is a number\. For the \fB\-l|\-\-level\fR argument the level \fBnames\fR are supported as shortcuts\. In \fB\-c|\-\-condition\fR scripts, uppercase symbols like "DEBUG" are defined for convenience\.
-.
-.IP "" 4
-.
-.nf
-
-Level Name Level Number Symbol in COND Scripts
-trace 10 TRACE
-debug 20 DEBUG
-info 30 INFO
-warn 40 WARN
-error 50 ERROR
-fatal 60 FATAL
-.
-.fi
-.
-.IP "" 0
-.
-.SH "OUTPUT FORMATS"
-.
-.nf
-
-FORMAT NAME DESCRIPTION
-long (default) The default output\. Long form\. Colored and "pretty"\.
- \'req\' and \'res\' and \'err\' fields are rendered specially
- as an HTTP request, HTTP response and exception
- stack trace, respectively\. For backward compat, the
- name "paul" also works for this\.
-short Like the default output, but more concise\. Some
- typically redundant fields are ellided\.
-json JSON output, 2\-space indentation\.
-json\-N JSON output, N\-space indentation, e\.g\. "json\-4"
-bunyan Alias for "json\-0", the Bunyan "native" format\.
-inspect Node\.js `util\.inspect` output\.
-.
-.fi
-.
-.SH "DTRACE SUPPORT"
-On systems that support DTrace (e\.g\., MacOS, FreeBSD, illumos derivatives like SmartOS and OmniOS), Bunyan will create a DTrace provider (\fBbunyan\fR) that makes available the following probes:
-.
-.IP "" 4
-.
-.nf
-
-log\-trace
-log\-debug
-log\-info
-log\-warn
-log\-error
-log\-fatal
-.
-.fi
-.
-.IP "" 0
-.
-.P
-Each of these probes has a single argument: the string that would be written to the log\. Note that when a probe is enabled, it will fire whenever the corresponding function is called, even if the level of the log message is less than that of any stream\.
-.
-.P
-See \fIhttps://github\.com/trentm/node\-bunyan#dtrace\-support\fR for more details and the \'\-p PID\' option above for convenience usage\.
-.
-.SH "ENVIRONMENT"
-.
-.TP
-\fBBUNYAN_NO_COLOR\fR
-Set to a non\-empty value to force no output coloring\. See \'\-\-no\-color\'\.
-.
-.SH "PROJECT & BUGS"
-\fBbunyan\fR is written in JavaScript and requires node\.js (\fBnode\fR)\. The project lives at \fIhttps://github\.com/trentm/node\-bunyan\fR and is published to npm as "bunyan"\.
-.
-.IP "\(bu" 4
-README, Install notes: \fIhttps://github\.com/trentm/node\-bunyan#readme\fR
-.
-.IP "\(bu" 4
-Report bugs to \fIhttps://github\.com/trentm/node\-bunyan/issues\fR\.
-.
-.IP "\(bu" 4
-See the full changelog at: \fIhttps://github\.com/trentm/node\-bunyan/blob/master/CHANGES\.md\fR
-.
-.IP "" 0
-.
-.SH "LICENSE"
-MIT License (see \fIhttps://github\.com/trentm/node\-bunyan/blob/master/LICENSE\.txt\fR)
-.
-.SH "COPYRIGHT"
-node\-bunyan is Copyright (c) 2012 Joyent, Inc\. Copyright (c) 2012 Trent Mick\. All rights reserved\.
http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/bunyan/docs/bunyan.1.html
----------------------------------------------------------------------
diff --git a/node_modules/bunyan/docs/bunyan.1.html b/node_modules/bunyan/docs/bunyan.1.html
deleted file mode 100644
index c11eaf0..0000000
--- a/node_modules/bunyan/docs/bunyan.1.html
+++ /dev/null
@@ -1,281 +0,0 @@
-<!DOCTYPE html>
-<html>
-<head>
- <meta http-equiv='content-type' value='text/html;charset=utf8'>
- <meta name='generator' value='Ronn/v0.7.3 (http://github.com/rtomayko/ronn/tree/0.7.3)'>
- <title>bunyan(1) - filter and pretty-print Bunyan log file content</title>
- <style type='text/css' media='all'>
- /* style: man */
- body#manpage {margin:0}
- .mp {max-width:100ex;padding:0 9ex 1ex 4ex}
- .mp p,.mp pre,.mp ul,.mp ol,.mp dl {margin:0 0 20px 0}
- .mp h2 {margin:10px 0 0 0}
- .mp > p,.mp > pre,.mp > ul,.mp > ol,.mp > dl {margin-left:8ex}
- .mp h3 {margin:0 0 0 4ex}
- .mp dt {margin:0;clear:left}
-
- .mp dd {margin:0 0 0 9ex}
- .mp h1,.mp h2,.mp h3,.mp h4 {clear:left}
- .mp pre {margin-bottom:20px}
- .mp pre+h2,.mp pre+h3 {margin-top:22px}
- .mp h2+pre,.mp h3+pre {margin-top:5px}
- .mp img {display:block;margin:auto}
- .mp h1.man-title {display:none}
- .mp,.mp code,.mp pre,.mp tt,.mp kbd,.mp samp,.mp h3,.mp h4 {font-family:monospace;font-size:14px;line-height:1.42857142857143}
- .mp h2 {font-size:16px;line-height:1.25}
- .mp h1 {font-size:20px;line-height:2}
- .mp {text-align:justify;background:#fff}
- .mp,.mp code,.mp pre,.mp pre code,.mp tt,.mp kbd,.mp samp {color:#131211}
- .mp h1,.mp h2,.mp h3,.mp h4 {color:#030201}
- .mp u {text-decoration:underline}
- .mp code,.mp strong,.mp b {font-weight:bold;color:#131211}
- .mp em,.mp var {font-style:italic;color:#232221;text-decoration:none}
- .mp a,.mp a:link,.mp a:hover,.mp a code,.mp a pre,.mp a tt,.mp a kbd,.mp a samp {color:#0000ff}
- .mp b.man-ref {font-weight:normal;color:#434241}
- .mp pre {padding:0 4ex}
- .mp pre code {font-weight:normal;color:#434241}
- .mp h2+pre,h3+pre {padding-left:0}
- ol.man-decor,ol.man-decor li {margin:3px 0 10px 0;padding:0;float:left;width:33%;list-style-type:none;text-transform:uppercase;color:#999;letter-spacing:1px}
- ol.man-decor {width:100%}
- ol.man-decor li.tl {text-align:left}
- ol.man-decor li.tc {text-align:center;letter-spacing:4px}
- ol.man-decor li.tr {text-align:right;float:right}
- </style>
- <style type='text/css' media='all'>
- /* style: toc */
- .man-navigation {display:block !important;position:fixed;top:0;left:113ex;height:100%;width:100%;padding:48px 0 0 0;border-left:1px solid #dbdbdb;background:#eee}
- .man-navigation a,.man-navigation a:hover,.man-navigation a:link,.man-navigation a:visited {display:block;margin:0;padding:5px 2px 5px 30px;color:#999;text-decoration:none}
- .man-navigation a:hover {color:#111;text-decoration:underline}
- </style>
-</head>
-<!--
- The following styles are deprecated and will be removed at some point:
- div#man, div#man ol.man, div#man ol.head, div#man ol.man.
-
- The .man-page, .man-decor, .man-head, .man-foot, .man-title, and
- .man-navigation should be used instead.
--->
-<body id='manpage'>
- <div class='mp' id='man'>
-
- <div class='man-navigation' style='display:none'>
- <a href="#NAME">NAME</a>
- <a href="#SYNOPSIS">SYNOPSIS</a>
- <a href="#DESCRIPTION">DESCRIPTION</a>
- <a href="#OPTIONS">OPTIONS</a>
- <a href="#LOG-LEVELS">LOG LEVELS</a>
- <a href="#OUTPUT-FORMATS">OUTPUT FORMATS</a>
- <a href="#DTRACE-SUPPORT">DTRACE SUPPORT</a>
- <a href="#ENVIRONMENT">ENVIRONMENT</a>
- <a href="#PROJECT-BUGS">PROJECT & BUGS</a>
- <a href="#LICENSE">LICENSE</a>
- <a href="#COPYRIGHT">COPYRIGHT</a>
- </div>
-
- <ol class='man-decor man-head man head'>
- <li class='tl'>bunyan(1)</li>
- <li class='tc'>bunyan manual</li>
- <li class='tr'>bunyan(1)</li>
- </ol>
-
- <h2 id="NAME">NAME</h2>
-<p class="man-name">
- <code>bunyan</code> - <span class="man-whatis">filter and pretty-print Bunyan log file content</span>
-</p>
-
-<h2 id="SYNOPSIS">SYNOPSIS</h2>
-
-<p><code>bunyan</code> [OPTIONS]</p>
-
-<p>... | <code>bunyan</code> [OPTIONS]</p>
-
-<p><code>bunyan</code> [OPTIONS] -p PID</p>
-
-<h2 id="DESCRIPTION">DESCRIPTION</h2>
-
-<p>"Bunyan" is <strong>a simple and fast a JSON logging library</strong> for node.js services,
-a one-JSON-object-per-line log format, and <strong>a <code>bunyan</code> CLI tool</strong> for nicely
-viewing those logs. This man page describes the latter.</p>
-
-<h3 id="Pretty-printing">Pretty-printing</h3>
-
-<p>A bunyan log file is a stream of JSON objects, optionally interspersed with
-non-JSON log lines. The primary usage of <a href="bunyan.1.html" class="man-ref">bunyan<span class="s">(1)</span></a> is to pretty print,
-for example:</p>
-
-<pre><code>$ bunyan foo.log # or `cat foo.log | bunyan
-[2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message
- extra: multi
- line
-[2012-02-08T22:56:54.856Z] ERROR: myservice/123 on example.com: My message
-...
-</code></pre>
-
-<p>By default the "long" output format is used. Use the <code>-o FORMAT</code> option to
-emit other formats. E.g.:</p>
-
-<pre><code>$ bunyan foo.log -o short
-22:56:52.856Z INFO myservice: My message
- extra: multi
- line
-22:56:54.856Z ERROR myservice: My message
-...
-</code></pre>
-
-<p>These will color the output if supported in your terminal.
-See "OUTPUT FORMATS" below.</p>
-
-<h3 id="Filtering">Filtering</h3>
-
-<p>The <code>bunyan</code> CLI can also be used to filter a bunyan log. Use <code>-l LEVEL</code>
-to filter by level:</p>
-
-<pre><code>$ bunyan foo.log -l error # show only 'error' level records
-[2012-02-08T22:56:54.856Z] ERROR: myservice/123 on example.com: My message
-</code></pre>
-
-<p>Use <code>-c COND</code> to filter on a JavaScript expression returning true on the
-record data. In the COND code, <code>this</code> refers to the record object:</p>
-
-<pre><code>$ bunyan foo.log -c `this.three` # show records with the 'extra' field
-[2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message
- extra: multi
- line
-</code></pre>
-
-<h2 id="OPTIONS">OPTIONS</h2>
-
-<dl>
-<dt><code>-h</code>, <code>--help</code></dt><dd><p>Print this help info and exit.</p></dd>
-<dt><code>--version</code></dt><dd><p>Print version of this command and exit.</p></dd>
-<dt><code>-q</code>, <code>--quiet</code></dt><dd><p>Don't warn if input isn't valid JSON.</p></dd>
-</dl>
-
-
-<p>Dtrace options (only on dtrace-supporting platforms):</p>
-
-<dl>
-<dt><code>-p PID</code>, <code>-p NAME</code></dt><dd>Process bunyan:log-* probes from the process with the given PID.
-Can be used multiple times, or specify all processes with '*',
-or a set of processes whose command & args match a pattern with
-'-p NAME'.</dd>
-</dl>
-
-
-<p>Filtering options:</p>
-
-<dl>
-<dt><code>-l</code>, <code>--level LEVEL</code></dt><dd><p>Only show messages at or above the specified level. You can specify level
-<em>names</em> or numeric values. (See 'Log Levels' below.)</p></dd>
-<dt><code>-c COND</code>, <code>--condition COND</code></dt><dd><p>Run each log message through the condition and only show those that
-resolve to a truish value. E.g. <code>-c 'this.pid == 123'</code>.</p></dd>
-<dt><code>--strict</code></dt><dd><p>Suppress all but legal Bunyan JSON log lines. By default non-JSON, and
-non-Bunyan lines are passed through.</p></dd>
-</dl>
-
-
-<p>Output options:</p>
-
-<dl>
-<dt class="flush"><code>--color</code></dt><dd><p>Colorize output. Defaults to try if output stream is a TTY.</p></dd>
-<dt><code>--no-color</code></dt><dd><p>Force no coloring (e.g. terminal doesn't support it)</p></dd>
-<dt><code>-o FORMAT</code>, <code>--output FORMAT</code></dt><dd><p>Specify an output format. One of <code>long</code> (the default), <code>short</code>, <code>json</code>,
-<code>json-N</code>, <code>bunyan</code> (the native bunyan 0-indent JSON output) or <code>inspect</code>.</p></dd>
-<dt class="flush"><code>-j</code></dt><dd><p>Shortcut for <code>-o json</code>.</p></dd>
-<dt><code>-L</code>, <code>--time local</code></dt><dd><p>Display the time field in <em>local</em> time, rather than the default UTC
-time.</p></dd>
-</dl>
-
-
-<h2 id="LOG-LEVELS">LOG LEVELS</h2>
-
-<p>In Bunyan log records, then <code>level</code> field is a number. For the <code>-l|--level</code>
-argument the level <strong>names</strong> are supported as shortcuts. In <code>-c|--condition</code>
-scripts, uppercase symbols like "DEBUG" are defined for convenience.</p>
-
-<pre><code>Level Name Level Number Symbol in COND Scripts
-trace 10 TRACE
-debug 20 DEBUG
-info 30 INFO
-warn 40 WARN
-error 50 ERROR
-fatal 60 FATAL
-</code></pre>
-
-<h2 id="OUTPUT-FORMATS">OUTPUT FORMATS</h2>
-
-<pre><code>FORMAT NAME DESCRIPTION
-long (default) The default output. Long form. Colored and "pretty".
- 'req' and 'res' and 'err' fields are rendered specially
- as an HTTP request, HTTP response and exception
- stack trace, respectively. For backward compat, the
- name "paul" also works for this.
-short Like the default output, but more concise. Some
- typically redundant fields are ellided.
-json JSON output, 2-space indentation.
-json-N JSON output, N-space indentation, e.g. "json-4"
-bunyan Alias for "json-0", the Bunyan "native" format.
-inspect Node.js `util.inspect` output.
-</code></pre>
-
-<h2 id="DTRACE-SUPPORT">DTRACE SUPPORT</h2>
-
-<p>On systems that support DTrace (e.g., MacOS, FreeBSD, illumos derivatives
-like SmartOS and OmniOS), Bunyan will create a DTrace provider (<code>bunyan</code>)
-that makes available the following probes:</p>
-
-<pre><code>log-trace
-log-debug
-log-info
-log-warn
-log-error
-log-fatal
-</code></pre>
-
-<p>Each of these probes has a single argument: the string that would be
-written to the log. Note that when a probe is enabled, it will
-fire whenever the corresponding function is called, even if the level of
-the log message is less than that of any stream.</p>
-
-<p>See <a href="https://github.com/trentm/node-bunyan#dtrace-support" data-bare-link="true">https://github.com/trentm/node-bunyan#dtrace-support</a> for more details
-and the '-p PID' option above for convenience usage.</p>
-
-<h2 id="ENVIRONMENT">ENVIRONMENT</h2>
-
-<dl>
-<dt><code>BUNYAN_NO_COLOR</code></dt><dd>Set to a non-empty value to force no output coloring. See '--no-color'.</dd>
-</dl>
-
-
-<h2 id="PROJECT-BUGS">PROJECT & BUGS</h2>
-
-<p><code>bunyan</code> is written in JavaScript and requires node.js (<code>node</code>). The project
-lives at <a href="https://github.com/trentm/node-bunyan" data-bare-link="true">https://github.com/trentm/node-bunyan</a> and is published to npm as
-"bunyan".</p>
-
-<ul>
-<li>README, Install notes: <a href="https://github.com/trentm/node-bunyan#readme" data-bare-link="true">https://github.com/trentm/node-bunyan#readme</a></li>
-<li>Report bugs to <a href="https://github.com/trentm/node-bunyan/issues" data-bare-link="true">https://github.com/trentm/node-bunyan/issues</a>.</li>
-<li>See the full changelog at: <a href="https://github.com/trentm/node-bunyan/blob/master/CHANGES.md" data-bare-link="true">https://github.com/trentm/node-bunyan/blob/master/CHANGES.md</a></li>
-</ul>
-
-
-<h2 id="LICENSE">LICENSE</h2>
-
-<p>MIT License (see <a href="https://github.com/trentm/node-bunyan/blob/master/LICENSE.txt" data-bare-link="true">https://github.com/trentm/node-bunyan/blob/master/LICENSE.txt</a>)</p>
-
-<h2 id="COPYRIGHT">COPYRIGHT</h2>
-
-<p>node-bunyan is Copyright (c) 2012 Joyent, Inc. Copyright (c) 2012 Trent Mick.
-All rights reserved.</p>
-
-
- <ol class='man-decor man-foot man foot'>
- <li class='tl'></li>
- <li class='tc'>January 2015</li>
- <li class='tr'>bunyan(1)</li>
- </ol>
-
- </div>
-<a href="https://github.com/trentm/node-bunyan"><img style="position: absolute; top: 0; right: 0; border: 0;" src="https://s3.amazonaws.com/github/ribbons/forkme_right_darkblue_121621.png" alt="Fork me on GitHub"></a></body>
-</html>
http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/bunyan/docs/bunyan.1.ronn
----------------------------------------------------------------------
diff --git a/node_modules/bunyan/docs/bunyan.1.ronn b/node_modules/bunyan/docs/bunyan.1.ronn
deleted file mode 100644
index c09b933..0000000
--- a/node_modules/bunyan/docs/bunyan.1.ronn
+++ /dev/null
@@ -1,195 +0,0 @@
-# bunyan(1) -- filter and pretty-print Bunyan log file content
-
-
-## SYNOPSIS
-
-`bunyan` \[OPTIONS\]
-
-... | `bunyan` \[OPTIONS\]
-
-`bunyan` \[OPTIONS\] -p PID
-
-
-## DESCRIPTION
-
-"Bunyan" is **a simple and fast a JSON logging library** for node.js services,
-a one-JSON-object-per-line log format, and **a `bunyan` CLI tool** for nicely
-viewing those logs. This man page describes the latter.
-
-
-### Pretty-printing
-
-A bunyan log file is a stream of JSON objects, optionally interspersed with
-non-JSON log lines. The primary usage of bunyan(1) is to pretty print,
-for example:
-
- $ bunyan foo.log # or `cat foo.log | bunyan
- [2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message
- extra: multi
- line
- [2012-02-08T22:56:54.856Z] ERROR: myservice/123 on example.com: My message
- ...
-
-By default the "long" output format is used. Use the `-o FORMAT` option to
-emit other formats. E.g.:
-
- $ bunyan foo.log -o short
- 22:56:52.856Z INFO myservice: My message
- extra: multi
- line
- 22:56:54.856Z ERROR myservice: My message
- ...
-
-These will color the output if supported in your terminal.
-See "OUTPUT FORMATS" below.
-
-
-### Filtering
-
-The `bunyan` CLI can also be used to filter a bunyan log. Use `-l LEVEL`
-to filter by level:
-
- $ bunyan foo.log -l error # show only 'error' level records
- [2012-02-08T22:56:54.856Z] ERROR: myservice/123 on example.com: My message
-
-Use `-c COND` to filter on a JavaScript expression returning true on the
-record data. In the COND code, `this` refers to the record object:
-
- $ bunyan foo.log -c `this.three` # show records with the 'extra' field
- [2012-02-08T22:56:52.856Z] INFO: myservice/123 on example.com: My message
- extra: multi
- line
-
-
-## OPTIONS
-
- * `-h`, `--help`:
- Print this help info and exit.
-
- * `--version`:
- Print version of this command and exit.
-
- * `-q`, `--quiet`:
- Don't warn if input isn't valid JSON.
-
-Dtrace options (only on dtrace-supporting platforms):
-
- * `-p PID`, `-p NAME`:
- Process bunyan:log-\* probes from the process with the given PID.
- Can be used multiple times, or specify all processes with '\*',
- or a set of processes whose command & args match a pattern with
- '-p NAME'.
-
-Filtering options:
-
- * `-l`, `--level LEVEL`:
- Only show messages at or above the specified level. You can specify level
- *names* or numeric values. (See 'Log Levels' below.)
-
- * `-c COND`, `--condition COND`:
- Run each log message through the condition and only show those that
- resolve to a truish value. E.g. `-c 'this.pid == 123'`.
-
- * `--strict`:
- Suppress all but legal Bunyan JSON log lines. By default non-JSON, and
- non-Bunyan lines are passed through.
-
-Output options:
-
- * `--color`:
- Colorize output. Defaults to try if output stream is a TTY.
-
- * `--no-color`:
- Force no coloring (e.g. terminal doesn't support it)
-
- * `-o FORMAT`, `--output FORMAT`:
- Specify an output format. One of `long` (the default), `short`, `json`,
- `json-N`, `bunyan` (the native bunyan 0-indent JSON output) or `inspect`.
-
- * `-j`:
- Shortcut for `-o json`.
-
- * `-L`, `--time local`:
- Display the time field in *local* time, rather than the default UTC
- time.
-
-
-## LOG LEVELS
-
-In Bunyan log records, then `level` field is a number. For the `-l|--level`
-argument the level **names** are supported as shortcuts. In `-c|--condition`
-scripts, uppercase symbols like "DEBUG" are defined for convenience.
-
- Level Name Level Number Symbol in COND Scripts
- trace 10 TRACE
- debug 20 DEBUG
- info 30 INFO
- warn 40 WARN
- error 50 ERROR
- fatal 60 FATAL
-
-
-## OUTPUT FORMATS
-
- FORMAT NAME DESCRIPTION
- long (default) The default output. Long form. Colored and "pretty".
- 'req' and 'res' and 'err' fields are rendered specially
- as an HTTP request, HTTP response and exception
- stack trace, respectively. For backward compat, the
- name "paul" also works for this.
- short Like the default output, but more concise. Some
- typically redundant fields are ellided.
- json JSON output, 2-space indentation.
- json-N JSON output, N-space indentation, e.g. "json-4"
- bunyan Alias for "json-0", the Bunyan "native" format.
- inspect Node.js `util.inspect` output.
-
-
-## DTRACE SUPPORT
-
-On systems that support DTrace (e.g., MacOS, FreeBSD, illumos derivatives
-like SmartOS and OmniOS), Bunyan will create a DTrace provider (`bunyan`)
-that makes available the following probes:
-
- log-trace
- log-debug
- log-info
- log-warn
- log-error
- log-fatal
-
-Each of these probes has a single argument: the string that would be
-written to the log. Note that when a probe is enabled, it will
-fire whenever the corresponding function is called, even if the level of
-the log message is less than that of any stream.
-
-See <https://github.com/trentm/node-bunyan#dtrace-support> for more details
-and the '-p PID' option above for convenience usage.
-
-
-## ENVIRONMENT
-
- * `BUNYAN_NO_COLOR`:
- Set to a non-empty value to force no output coloring. See '--no-color'.
-
-
-## PROJECT & BUGS
-
-`bunyan` is written in JavaScript and requires node.js (`node`). The project
-lives at <https://github.com/trentm/node-bunyan> and is published to npm as
-"bunyan".
-
-* README, Install notes: <https://github.com/trentm/node-bunyan#readme>
-* Report bugs to <https://github.com/trentm/node-bunyan/issues>.
-* See the full changelog at: <https://github.com/trentm/node-bunyan/blob/master/CHANGES.md>
-
-
-## LICENSE
-
-MIT License (see <https://github.com/trentm/node-bunyan/blob/master/LICENSE.txt>)
-
-
-## COPYRIGHT
-
-node-bunyan is Copyright (c) 2012 Joyent, Inc. Copyright (c) 2012 Trent Mick.
-All rights reserved.
http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/bunyan/docs/img/bunyan.browserify.png
----------------------------------------------------------------------
diff --git a/node_modules/bunyan/docs/img/bunyan.browserify.png b/node_modules/bunyan/docs/img/bunyan.browserify.png
deleted file mode 100644
index 411aa1f..0000000
Binary files a/node_modules/bunyan/docs/img/bunyan.browserify.png and /dev/null differ
http://git-wip-us.apache.org/repos/asf/incubator-griffin-site/blob/ca1c37a7/node_modules/bunyan/docs/index.html
----------------------------------------------------------------------
diff --git a/node_modules/bunyan/docs/index.html b/node_modules/bunyan/docs/index.html
deleted file mode 100644
index 4defe1a..0000000
--- a/node_modules/bunyan/docs/index.html
+++ /dev/null
@@ -1 +0,0 @@
-<a href="bunyan.1.html">bunyan(1) man page</a>