util.js (2343B)
1 var path = require('path'); 2 var fs = require('fs'); 3 var spawn = require('child_process').spawn; 4 5 function noop() {} 6 exports.noop = noop; 7 8 if (process.env.HTTP2_LOG) { 9 var logOutput = process.stderr; 10 if (process.stderr.isTTY) { 11 var bin = path.resolve(path.dirname(require.resolve('bunyan')), '..', 'bin', 'bunyan'); 12 if(bin && fs.existsSync(bin)) { 13 logOutput = spawn(bin, ['-o', 'short'], { 14 stdio: [null, process.stderr, process.stderr] 15 }).stdin; 16 } 17 } 18 exports.createLogger = function(name) { 19 return require('bunyan').createLogger({ 20 name: name, 21 stream: logOutput, 22 level: process.env.HTTP2_LOG, 23 serializers: require('../lib/http').serializers 24 }); 25 }; 26 exports.log = exports.createLogger('test'); 27 exports.clientLog = exports.createLogger('client'); 28 exports.serverLog = exports.createLogger('server'); 29 } else { 30 exports.createLogger = function() { 31 return exports.log; 32 }; 33 exports.log = exports.clientLog = exports.serverLog = { 34 fatal: noop, 35 error: noop, 36 warn : noop, 37 info : noop, 38 debug: noop, 39 trace: noop, 40 41 child: function() { return this; } 42 }; 43 } 44 45 exports.callNTimes = function callNTimes(limit, done) { 46 if (limit === 0) { 47 done(); 48 } else { 49 var i = 0; 50 return function() { 51 i += 1; 52 if (i === limit) { 53 done(); 54 } 55 }; 56 } 57 }; 58 59 // Concatenate an array of buffers into a new buffer 60 exports.concat = function concat(buffers) { 61 var size = 0; 62 for (var i = 0; i < buffers.length; i++) { 63 size += buffers[i].length; 64 } 65 66 var concatenated = Buffer.alloc(size); 67 for (var cursor = 0, j = 0; j < buffers.length; cursor += buffers[j].length, j++) { 68 buffers[j].copy(concatenated, cursor); 69 } 70 71 return concatenated; 72 }; 73 74 exports.random = function random(min, max) { 75 return min + Math.floor(Math.random() * (max - min + 1)); 76 }; 77 78 // Concatenate an array of buffers and then cut them into random size buffers 79 exports.shuffleBuffers = function shuffleBuffers(buffers) { 80 var concatenated = exports.concat(buffers), output = [], written = 0; 81 82 while (written < concatenated.length) { 83 var chunk_size = Math.min(concatenated.length - written, Math.ceil(Math.random()*20)); 84 output.push(concatenated.slice(written, written + chunk_size)); 85 written += chunk_size; 86 } 87 88 return output; 89 };