GithubHelp home page GithubHelp logo

black-adder / tcurl Goto Github PK

View Code? Open in Web Editor NEW

This project forked from uber-node/tcurl

0.0 1.0 0.0 364 KB

A command line utility to talk to tchannel servers

License: MIT License

JavaScript 96.92% Thrift 0.60% Shell 2.48%

tcurl's Introduction

tcurl

A command line utility for sending requests to TChannel services.

(This project is no longer under active development. Check out yab instead.)

usage: tcurl <service> [--health | <method> [<body>]]
Sends one or more TChannel requests.
  <service>
    The name of the TChannel/Hyperbahn service to send requests to.
  <method>
    The name of the endpoint to send requests to or method to call.
  [<body>] :jshon
    The Thrift or JSON argument in SHON or JSON format.
  [--headers <head>] :jshon
    The application headers as SHON or JSON arguments.
  [-p|--peer <peer>...]
    The peer or peers to connect.
  [-P|--peerlist <path>]
    The path to a file containing a JSON list of peers.
    The -H and --hostlist flags are deprecated.
  [-r|--raw]
    Use the raw argument scheme.
  [--http <method>]
    Use the HTTP argument scheme with given method.
  [-j|--json]
    Use the JSON argument scheme.
    The -J flag is deprecated.
  [-t|--thrift <thrift>]
    Where to find Thrift IDL files.
  [--no-strict]
    Disable strict Thrift parsing.
  [--cn|--caller <cn>]
    Fake an alternate caller service name.
    tcurl is the default.
  [--sk|--shard-key <sk>]
    Ringpop shard key
    The --shardKey flag is deprecated.
  [--rd|--routing-delegate <rd>]
    Forward to the given service for application-specific routing.
  [--timeout <ms>]
    Timeout in milliseconds
  [--requests <count>]
    Number of requests to make
  [--rate <rate>]
    Request rate in requests per second
  [--delay <ms>]
    Delay between requests in milliseconds
  [--time <ms>]
    Benchmark duration in milliseconds
  [--health]*
    Hit the health endpoint for the service
  [-h]* short help
  [--help]* man page
  [-v|--version]* print version

The [-3|--arg3|--body <body>] argument is deprecated
in favor of passing <body> as JSON or SHON as a positional argument.
The [-2|--arg2|--head <head>] argument is deprecated
in favor of the --headers <headers> argument with JSON or SHON.

Click here for full usage docs.

Installation

npm install tcurl

Examples

Thrift

For the purposes of these examples, let's assume that you have a TChannel server listening on localhost:1234. The server registers handlers for the thrift interface saved as services/chamber.thrift and defined as:

struct EchoRequest {
  1: required string input;
}

service Chamber {
  string echo(
    1: required EchoRequest request;
  )
}

You could use TCurl to query this service by running:

tcurl -p localhost:1234 chamber Chamber::echo -t ./services -3 '{"request": {"input": "foo"}}'

localhost caveat

For TChannel and Hyperbahn to work together effectively, most tchannel services need to listen on the external IP of the host they are running on.

This means when you use 127.0.0.1 you cannot reach the service with tcurl as it's not listening on loopback.

To make supporting external IPs easier we've made localhost resolve to the external IP of the machine. This means if your listening on loopback you have to use 127.0.0.1 and not localhost

tcurlrc

TCurl can be configured with default parameters using a either /etc/tcurlrc or a .tcurlrc in the current working directory or any of its parent directories. The rc file may be in INI or JSON format.

{
    "hostlist": "/etc/ringpop/hosts.json"
}

Exit Codes

  • 0: for all successful requests
  • 1: timeout
  • 2: cancelled
  • 3: busy
  • 4: declined
  • 5: unexpected error
  • 6: bad request
  • 7: network error
  • 8: unhealthy (broken circuit)
  • 124: unhealthy / not OK thrift response
  • 125: misc tcurl / tchannel internal error
  • 126: response not ok error
  • 127: fatal protocol error

NPM scripts

  • npm run add-licence This will add the licence headers.
  • npm run cover This runs the tests with code coverage
  • npm run lint This will run the linter on your code
  • npm test This will run the tests.
  • npm run trace This will run your tests in tracing mode.
  • npm run travis This is run by travis.CI to run your tests
  • npm run view-cover This will show code coverage in a browser

Contributors

  • Raynos
  • ShanniLi
  • kriskowal

MIT Licenced

tcurl's People

Contributors

andrewdeandrade avatar blampe avatar jcorbin avatar kriskowal avatar malandrew avatar prashantv avatar raynos avatar rf avatar rssathe avatar shannili avatar willyham avatar

Watchers

 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.