You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							87 lines
						
					
					
						
							1.9 KiB
						
					
					
				
			
		
		
	
	
							87 lines
						
					
					
						
							1.9 KiB
						
					
					
				'use strict' | 
						|
 | 
						|
const fs = require('fs') | 
						|
const started = Date.now() | 
						|
 | 
						|
 | 
						|
module.exports = function (timeout, callback) { | 
						|
  callback = callback.bind(null, null, process.pid, Math.random(), timeout) | 
						|
  if (timeout) | 
						|
    return setTimeout(callback, timeout) | 
						|
  callback() | 
						|
} | 
						|
 | 
						|
 | 
						|
module.exports.args = function (callback) { | 
						|
  callback(null, { | 
						|
      argv     : process.argv | 
						|
    , cwd      : process.cwd() | 
						|
    , execArgv : process.execArgv | 
						|
  }) | 
						|
} | 
						|
 | 
						|
 | 
						|
module.exports.run0 = function (callback) { | 
						|
  module.exports(0, callback) | 
						|
} | 
						|
 | 
						|
 | 
						|
module.exports.killable = function (id, callback) { | 
						|
  if (Math.random() < 0.5) | 
						|
    return process.exit(-1) | 
						|
  callback(null, id, process.pid) | 
						|
} | 
						|
 | 
						|
 | 
						|
module.exports.err = function (type, message, data, callback) { | 
						|
  if (typeof data == 'function') { | 
						|
    callback = data | 
						|
    data = null | 
						|
  } else { | 
						|
    let err = new Error(message) | 
						|
    Object.keys(data).forEach(function(key) { | 
						|
      err[key] = data[key] | 
						|
    }) | 
						|
    callback(err) | 
						|
    return | 
						|
  } | 
						|
 | 
						|
  if (type == 'TypeError') | 
						|
    return callback(new TypeError(message)) | 
						|
  callback(new Error(message)) | 
						|
} | 
						|
 | 
						|
 | 
						|
module.exports.block = function () { | 
						|
  while (true); | 
						|
} | 
						|
 | 
						|
 | 
						|
// use provided file path to save retries count among terminated workers | 
						|
module.exports.stubborn = function (path, callback) { | 
						|
  function isOutdated(path) { | 
						|
    return ((new Date).getTime() - fs.statSync(path).mtime.getTime()) > 2000 | 
						|
  } | 
						|
 | 
						|
  // file may not be properly deleted, check if modified no earler than two seconds ago | 
						|
  if (!fs.existsSync(path) || isOutdated(path)) { | 
						|
    fs.writeFileSync(path, '1') | 
						|
    process.exit(-1) | 
						|
  } | 
						|
 | 
						|
  let retry = parseInt(fs.readFileSync(path, 'utf8')) | 
						|
  if (Number.isNaN(retry)) | 
						|
    return callback(new Error('file contents is not a number')) | 
						|
 | 
						|
  if (retry > 4) { | 
						|
    callback(null, 12) | 
						|
  } else { | 
						|
    fs.writeFileSync(path, String(retry + 1)) | 
						|
    process.exit(-1) | 
						|
  } | 
						|
} | 
						|
 | 
						|
 | 
						|
module.exports.uptime = function (callback) { | 
						|
  callback(null, Date.now() - started) | 
						|
}
 | 
						|
 |