Coder Social home page Coder Social logo

markdalgleish / wait-on Goto Github PK

View Code? Open in Web Editor NEW

This project forked from jeffbski/wait-on

1.0 2.0 0.0 45 KB

wait-on is a cross-platform command line utility and Node.js API which will wait for files, ports, sockets, and http(s) resources to become available

License: MIT License

JavaScript 100.00%

wait-on's Introduction

wait-on - wait for files, ports, sockets, http(s) resources

wait-on is a cross-platform command line utility which will wait for files, ports, sockets, and http(s) resources to become available (or not available using reverse mode). Functionality is also available via a Node.js API. Cross-platform - runs everywhere Node.js runs (linux, unix, mac OS X, windows)

wait-on will wait for period of time for a file to stop growing before triggering availability which is good for monitoring files that are being built. Likewise wait-on will wait for period of time for other resources to remain available before triggering success.

For http(s) resources wait-on will check that the requests are returning 2XX (success) to HEAD or GET requests (after following any redirects).

wait-on can also be used in reverse mode which waits for resources to NOT be available. This is useful in waiting for services to shutdown before continuing. (Thanks @skarbovskiy for adding this feature)

Build Status

Installation

Requires node.js/iojs >= 4.0.0

(For older Node.js engines, use [email protected])

npm install wait-on # local version
OR
npm install -g wait-on # global version

Usage

Use from command line or using Node.js programmatic API.

CLI Usage

Assuming NEXT_CMD is the command to run when resources are available, then wait-on will wait and then exit with successfull exit code (0) once all resrouces are available causing NEXT_CMD to be run.

wait-on can also be used in reverse mode which waits for resources to NOT be available. This is useful in waiting for services to shutdown before continuing. (Thanks @skarbovskiy for adding)

If wait-on is interrupted before all resources are available, it will exit with non-zero exit code and thus NEXT_CMD will not be run.

wait-on file1 && NEXT_CMD # wait for file1, then exec NEXT_CMD
wait-on f1 f2 && NEXT_CMD # wait for both f1 and f2, the exec NEXT_CMD
wait-on http://localhost:8000/foo && NEXT_CMD # wait for http 2XX HEAD
wait-on https://myserver/foo && NEXT_CMD # wait for https 2XX HEAD
wait-on http-get://localhost:8000/foo && NEXT_CMD # wait for http 2XX GET
wait-on https-get://myserver/foo && NEXT_CMD # wait for https 2XX GET
wait-on tcp:4000 && NEXT_CMD # wait for service to listen on a TCP port
wait-on socket:/path/mysock # wait for service to listen on domain socket
wait-on http://unix:/var/SOCKPATH:/a/foo # wait for http HEAD on domain socket
wait-on http-get://unix:/var/SOCKPATH:/a/foo # wait for http GET on domain socket
Usage: wait-on {OPTIONS} resource [...resource]

Description:

     wait-on is a command line utility which will wait for files, ports,
     sockets, and http(s) resources to become available (or not available
     using reverse flag). Exits with  success code (0) when all resources
     are ready. Non-zero exit code if interrupted or timed out.

     Options may also be specified in a config file (js or json). For
     example --config configFile.js would result in configFile.js being
     required and the resulting object will be merged with any
     command line options before wait-on is called. See exampleConfig.js

     In shell combine with && to conditionally run another command
     once resources are available. ex: wait-on f1 && NEXT_CMD

     resources types are defined by their prefix, if no prefix is
     present, the resource is assumed to be of type 'file'

     resource prefixes are:

       file:      - regular file (also default type). ex: file:/path/to/file
       http:      - HTTP HEAD returns 2XX response. ex: http://m.com:90/foo
       https:     - HTTPS HEAD returns 2XX response. ex: https://my/bar
       http-get:  - HTTP GET returns 2XX response. ex: http://m.com:90/foo
       https-get: - HTTPS GET returns 2XX response. ex: https://my/bar
       tcp:       - TCP port is listening. ex: 1.2.3.4:9000 or foo.com:700
       socket:    - Domain Socket is listening. ex: socket:/path/to/sock
                    For http over socket, use http://unix:SOCK_PATH:URL_PATH
                    like http://unix:/path/to/sock:/foo/bar or
                         http-get://unix:/path/to/sock:/foo/bar

Standard Options:

 -c, --config

  js or json config file, useful for http(s) options

 -d, --delay

  Initial delay before checking for resources in ms, default 0

 -i, --interval

  Interval to poll resources in ms, default 250ms

 -l, --log

  Log resources begin waited on and when complete or errored

 -r, --reverse

  Reverse operation, wait for resources to NOT be available

 -t, --timeout

  Maximum time in ms to wait before exiting with failure (1) code,
  default Infinity

 -v, --verbose

  Enable debug output to stdout

 -w, --window

  Stability window, the time in ms defining the window of time that
  resource needs to have not changed (file size or availability) before
  signalling success, default 750ms. If less than interval, it will be
  reset to the value of interval.

 -h, --help

  Show this message

Node.js API usage

var waitOn = require('wait-on');
var opts = {
  resources: [
    'file1',
    'http://foo.com:8000/bar',
    'https://my.com/cat',
    'http-get://foo.com:8000/bar',
    'https-get://my.com/cat',
    'tcp:foo.com:8000',
    'socket:/my/sock',
    'http://unix:/my/sock:/my/url',
    'http-get://unix:/my/sock:/my/url'
  ],
  delay: 1000, // initial delay in ms, default 0
  interval: 100, // poll interval in ms, default 250ms
  timeout: 30000, // timeout in ms, default Infinity
  window: 1000, // stabilization time in ms, default 750ms

  // http options
  ca: [ /* strings or binaries */ ],
  cert: [ /* strings or binaries */ ],
  key: [ /* strings or binaries */ ],
  passphrase: 'yourpassphrase',
  auth: {
    user: 'theuser', // or username
    pass: 'thepassword' // or password
  },
  httpSignature: {
    keyId: 'yourKeyId',
    key: 'yourKey'
  },
  strictSSL: false,
  followAllRedirects: true,
  followRedirect: true
};
waitOn(opts, function (err) {
  if (err) { return handleError(err); }
  // once here, all resources are available
});

waitOn(opts, cb) - function which triggers resource checks

  • opts.resources - array of string resources to wait for. prefix determines the type of resource with the default type of file:

  • opts.delay - optional initial delay in ms, default 0

  • opts.interval - optional poll resource interval in ms, default 250ms

  • opts.log - optional flag which outputs to stdout, remaining resources waited on and when complete or errored

  • opts.reverse - optional flag to reverse operation so checks are for resources being NOT available, default false

  • opts.timeout - optional timeout in ms, default Infinity. Aborts with error.

  • opts.verbose - optional flag which outputs debug output, default false

  • opts.window - optional stabilization time in ms, default 750ms. Waits this amount of time for file sizes to stabilize or other resource availability to remain unchanged.

  • http(s) specific options, see https://github.com/request/request#readme for specific details

    • opts.ca: [ /* strings or binaries */ ],
    • opts.cert: [ /* strings or binaries */ ],
    • opts.key: [ /* strings or binaries */ ],
    • opts.passphrase: 'yourpassphrase',
    • opts.auth: { user, pass }
    • opts.httpSignature: { keyId, key }
    • opts.strictSSL: false,
    • opts.followAllRedirects: true,
    • opts.followRedirect: true
  • cb(err) - if err is provided then, resource checks did not succeed

Goals

  • simple command line utility and Node.js API for waiting for resources
  • wait for files to stabilize
  • wait for http(s) resources to return 2XX in response to HEAD request
  • wait for http(s) resources to return 2XX in response to GET request
  • wait for services to be listening on tcp ports
  • wait for services to be listening on unix domain sockets
  • configurable initial delay, poll interval, stabilization window, timeout
  • command line utility returns success code (0) when resources are availble
  • command line utility that can also wait for resources to not be available using reverse flag. This is useful for waiting for services to shutdown before continuing.
  • cross platform - runs anywhere Node.js runs (linux, unix, mac OS X, windows)

Why

I frequently need to wait on build tasks to complete or services to be available before starting next command, so this project makes that easier and is portable to everywhere Node.js runs.

Get involved

If you have input or ideas or would like to get involved, you may:

License

wait-on's People

Contributors

jeffbski avatar joscha avatar skarbovskiy avatar

Stargazers

 avatar

Watchers

 avatar  avatar

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.