GithubHelp home page GithubHelp logo

dariobottazzi / ianitor Goto Github PK

View Code? Open in Web Editor NEW

This project forked from clearcodehq/ianitor

0.0 2.0 0.0 90 KB

Doorkeeper for consul discovered services

License: GNU Lesser General Public License v3.0

Python 100.00%

ianitor's Introduction

Build Status Coverage Status

ianitor

ianitor is a doorkeeper for your services discovered using consul. It can automatically register new services through consul API and manage TTL health checks.

It provides simple shell command that wraps process and can be simply used in your existing process/service supervision tool like supervisord, circus, runit etc.

Installation and usage

Simply install with pip:

$ pip install ianitor

And you're ready to go with:

$ ianitor appname -- ./yourapp --some-switch

You can check if service is registered diggin' into consul DNS service:

$ dig @localhost -p 8600 appname.service.consul
; <<>> DiG 9.9.3-P1 <<>> @localhost -p 8600 appname.service.consul
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25966
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; WARNING: recursion requested but not available

;; QUESTION SECTION:
;appname.service.consul.		IN	A

;; ANSWER SECTION:
appname.service.consul.	0	IN	A	10.54.54.214

;; Query time: 44 msec
;; SERVER: 127.0.0.1#8600(127.0.0.1)
;; WHEN: Tue Oct 28 13:53:09 CET 2014
;; MSG SIZE  rcvd: 78

Full usage:

usage: ianitor [-h] [--consul-agent hostname[:port]] [--ttl seconds]
               [--heartbeat seconds] [--tags tag] [--id ID] [--port PORT] [-v]
               service-name -- command [arguments]

Doorkeeper for consul discovered services.

positional arguments:
  service-name                    service name in consul cluster

optional arguments:
  -h, --help                      show this help message and exit
  --consul-agent=hostname[:port]  set consul agent address
  --ttl=seconds                   set TTL of service in consul cluster
  --heartbeat=seconds             set process poll heartbeat (defaults to
                                  ttl/10)
  --tags=tag                      set service tags in consul cluster (can be
                                  used multiple times)
  --id=ID                         set service id - must be node unique
                                  (defaults to service name)
  --port=PORT                     set service port
  -v, --verbose                   enable logging to stdout (use multiple times
                                  to increase verbosity)

How does ianitor work?

ianitor spawns process using python's subprocess.Popen() with command line specified after -- . It redirects its own stdin to child's stdin and childs stdout/stderr to his own stdout/stderr.

This way ianitor does not interfere with logging of managed service if it logs to stdout. Moreover ianitor does not log anything to make it easier to plug it in your existing process supervision tool.

ianitor handles service registration in consul agent as well as keeping registered service entry in consul in "healthy" state by continously requesting it's TTL health check endpoint.

Example supervisord config

Assuming that you have some service under supervisord supervision:

[program:rabbitmq]
command=/usr/sbin/rabbitmq-server
priority=0

autostart=true

Simply wrap it with ianitor call:

[program:rabbitmq]
command=/usr/local/bin/ianitor rabbitmq -- /usr/sbin/rabbitmq-server
priority=0

autostart=true

Licence

ianitor is licensed under LGPL license, version 3.

Contributing and reporting bugs

Source code is available at: ClearcodeHQ/ianitor. Issue tracker is located at GitHub Issues. Projects PyPi page.

ianitor's People

Contributors

swistakm avatar ckoops avatar

Watchers

James Cloos avatar Dario Bottazzi 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.