Skip to content

Commit 7093a8b

Browse files
committed
Merge pull request #1 from ClearcodeHQ/feature/initial-ianitor
initial ianitor version
2 parents 206e8b8 + 6dd5552 commit 7093a8b

File tree

14 files changed

+1028
-24
lines changed

14 files changed

+1028
-24
lines changed

AUTHORS.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# Authors
2+
This file contains the list of people involved in the development
3+
of ianitor along its history.
4+
5+
* Michał Jaworski
6+
7+
Great thanks to [Clearcode](http://clearcode.cc) for allowing releasing
8+
ianitor as free software!

COPYING

Lines changed: 161 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,165 @@
1-
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2-
Version 2, December 2004
1+
GNU LESSER GENERAL PUBLIC LICENSE
2+
Version 3, 29 June 2007
33

4-
Copyright (C) 2004 Sam Hocevar <[email protected]>
4+
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
5+
Everyone is permitted to copy and distribute verbatim copies
6+
of this license document, but changing it is not allowed.
57

6-
Everyone is permitted to copy and distribute verbatim or modified
7-
copies of this license document, and changing it is allowed as long
8-
as the name is changed.
98

10-
DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11-
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
9+
This version of the GNU Lesser General Public License incorporates
10+
the terms and conditions of version 3 of the GNU General Public
11+
License, supplemented by the additional permissions listed below.
1212

13-
0. You just DO WHAT THE FUCK YOU WANT TO.
13+
0. Additional Definitions.
14+
15+
As used herein, "this License" refers to version 3 of the GNU Lesser
16+
General Public License, and the "GNU GPL" refers to version 3 of the GNU
17+
General Public License.
18+
19+
"The Library" refers to a covered work governed by this License,
20+
other than an Application or a Combined Work as defined below.
21+
22+
An "Application" is any work that makes use of an interface provided
23+
by the Library, but which is not otherwise based on the Library.
24+
Defining a subclass of a class defined by the Library is deemed a mode
25+
of using an interface provided by the Library.
26+
27+
A "Combined Work" is a work produced by combining or linking an
28+
Application with the Library. The particular version of the Library
29+
with which the Combined Work was made is also called the "Linked
30+
Version".
31+
32+
The "Minimal Corresponding Source" for a Combined Work means the
33+
Corresponding Source for the Combined Work, excluding any source code
34+
for portions of the Combined Work that, considered in isolation, are
35+
based on the Application, and not on the Linked Version.
36+
37+
The "Corresponding Application Code" for a Combined Work means the
38+
object code and/or source code for the Application, including any data
39+
and utility programs needed for reproducing the Combined Work from the
40+
Application, but excluding the System Libraries of the Combined Work.
41+
42+
1. Exception to Section 3 of the GNU GPL.
43+
44+
You may convey a covered work under sections 3 and 4 of this License
45+
without being bound by section 3 of the GNU GPL.
46+
47+
2. Conveying Modified Versions.
48+
49+
If you modify a copy of the Library, and, in your modifications, a
50+
facility refers to a function or data to be supplied by an Application
51+
that uses the facility (other than as an argument passed when the
52+
facility is invoked), then you may convey a copy of the modified
53+
version:
54+
55+
a) under this License, provided that you make a good faith effort to
56+
ensure that, in the event an Application does not supply the
57+
function or data, the facility still operates, and performs
58+
whatever part of its purpose remains meaningful, or
59+
60+
b) under the GNU GPL, with none of the additional permissions of
61+
this License applicable to that copy.
62+
63+
3. Object Code Incorporating Material from Library Header Files.
64+
65+
The object code form of an Application may incorporate material from
66+
a header file that is part of the Library. You may convey such object
67+
code under terms of your choice, provided that, if the incorporated
68+
material is not limited to numerical parameters, data structure
69+
layouts and accessors, or small macros, inline functions and templates
70+
(ten or fewer lines in length), you do both of the following:
71+
72+
a) Give prominent notice with each copy of the object code that the
73+
Library is used in it and that the Library and its use are
74+
covered by this License.
75+
76+
b) Accompany the object code with a copy of the GNU GPL and this license
77+
document.
78+
79+
4. Combined Works.
80+
81+
You may convey a Combined Work under terms of your choice that,
82+
taken together, effectively do not restrict modification of the
83+
portions of the Library contained in the Combined Work and reverse
84+
engineering for debugging such modifications, if you also do each of
85+
the following:
86+
87+
a) Give prominent notice with each copy of the Combined Work that
88+
the Library is used in it and that the Library and its use are
89+
covered by this License.
90+
91+
b) Accompany the Combined Work with a copy of the GNU GPL and this license
92+
document.
93+
94+
c) For a Combined Work that displays copyright notices during
95+
execution, include the copyright notice for the Library among
96+
these notices, as well as a reference directing the user to the
97+
copies of the GNU GPL and this license document.
98+
99+
d) Do one of the following:
100+
101+
0) Convey the Minimal Corresponding Source under the terms of this
102+
License, and the Corresponding Application Code in a form
103+
suitable for, and under terms that permit, the user to
104+
recombine or relink the Application with a modified version of
105+
the Linked Version to produce a modified Combined Work, in the
106+
manner specified by section 6 of the GNU GPL for conveying
107+
Corresponding Source.
108+
109+
1) Use a suitable shared library mechanism for linking with the
110+
Library. A suitable mechanism is one that (a) uses at run time
111+
a copy of the Library already present on the user's computer
112+
system, and (b) will operate properly with a modified version
113+
of the Library that is interface-compatible with the Linked
114+
Version.
115+
116+
e) Provide Installation Information, but only if you would otherwise
117+
be required to provide such information under section 6 of the
118+
GNU GPL, and only to the extent that such information is
119+
necessary to install and execute a modified version of the
120+
Combined Work produced by recombining or relinking the
121+
Application with a modified version of the Linked Version. (If
122+
you use option 4d0, the Installation Information must accompany
123+
the Minimal Corresponding Source and Corresponding Application
124+
Code. If you use option 4d1, you must provide the Installation
125+
Information in the manner specified by section 6 of the GNU GPL
126+
for conveying Corresponding Source.)
127+
128+
5. Combined Libraries.
129+
130+
You may place library facilities that are a work based on the
131+
Library side by side in a single library together with other library
132+
facilities that are not Applications and are not covered by this
133+
License, and convey such a combined library under terms of your
134+
choice, if you do both of the following:
135+
136+
a) Accompany the combined library with a copy of the same work based
137+
on the Library, uncombined with any other library facilities,
138+
conveyed under the terms of this License.
139+
140+
b) Give prominent notice with the combined library that part of it
141+
is a work based on the Library, and explaining where to find the
142+
accompanying uncombined form of the same work.
143+
144+
6. Revised Versions of the GNU Lesser General Public License.
145+
146+
The Free Software Foundation may publish revised and/or new versions
147+
of the GNU Lesser General Public License from time to time. Such new
148+
versions will be similar in spirit to the present version, but may
149+
differ in detail to address new problems or concerns.
150+
151+
Each version is given a distinguishing version number. If the
152+
Library as you received it specifies that a certain numbered version
153+
of the GNU Lesser General Public License "or any later version"
154+
applies to it, you have the option of following the terms and
155+
conditions either of that published version or of any later version
156+
published by the Free Software Foundation. If the Library as you
157+
received it does not specify a version number of the GNU Lesser
158+
General Public License, you may choose any version of the GNU Lesser
159+
General Public License ever published by the Free Software Foundation.
160+
161+
If the Library as you received it specifies that a proxy can decide
162+
whether future versions of the GNU Lesser General Public License shall
163+
apply, that proxy's public statement of acceptance of any version is
164+
permanent authorization for you to choose that version for the
165+
Library.

README.md

Lines changed: 91 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
[![WTFPL](http://www.wtfpl.net/wp-content/uploads/2012/12/wtfpl-badge-4.png)](http://www.wtfpl.net/)
21
[![Build Status](https://travis-ci.org/ClearcodeHQ/ianitor.svg?branch=master)](https://travis-ci.org/ClearcodeHQ/ianitor)
32

43
# ianitor
@@ -18,13 +17,100 @@ your existing process/service supervision tool like
1817

1918
Simply install with pip:
2019

21-
pip install ianitor
20+
$ pip install ianitor
2221

2322
And you're ready to go with:
2423

25-
ianitor - yourapp --some-switch
24+
$ ianitor appname -- ./yourapp --some-switch
2625

26+
You can check if service is registered diggin' into consul DNS service:
27+
28+
$ dig @localhost -p 8600 appname.service.consul
29+
; <<>> DiG 9.9.3-P1 <<>> @localhost -p 8600 appname.service.consul
30+
; (1 server found)
31+
;; global options: +cmd
32+
;; Got answer:
33+
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25966
34+
;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
35+
;; WARNING: recursion requested but not available
36+
37+
;; QUESTION SECTION:
38+
;appname.service.consul. IN A
39+
40+
;; ANSWER SECTION:
41+
appname.service.consul. 0 IN A 10.54.54.214
42+
43+
;; Query time: 44 msec
44+
;; SERVER: 127.0.0.1#8600(127.0.0.1)
45+
;; WHEN: Tue Oct 28 13:53:09 CET 2014
46+
;; MSG SIZE rcvd: 78
47+
48+
Full usage:
49+
50+
usage: ianitor [-h] [--consul-agent hostname[:port]] [--ttl seconds]
51+
[--heartbeat seconds] [--tags tag] [--id ID] [--port PORT] [-v]
52+
service-name -- command [arguments]
53+
54+
Doorkeeper for consul discovered services.
55+
56+
positional arguments:
57+
service-name service name in consul cluster
58+
59+
optional arguments:
60+
-h, --help show this help message and exit
61+
--consul-agent=hostname[:port] set consul agent address
62+
--ttl=seconds set TTL of service in consul cluster
63+
--heartbeat=seconds set rocess poll heartbeat (defaults to
64+
ttl/10)
65+
--tags=tag set service tags in consul cluster (can be
66+
used multiple times)
67+
--id=ID set service id - must be node unique
68+
(defaults to service name)
69+
--port=PORT set service port
70+
-v, --verbose enable logging to stdout (use multiple times
71+
to increase verbosity)
72+
73+
74+
## How does ianitor work?
75+
76+
ianitor spawns process using python's `subprocess.Popen()` with command line
77+
specified after `--` . It redirects its own stdin to child's stdin and
78+
childs stdout/stderr to his own stdout/stderr.
79+
80+
This way ianitor does not interfere with logging of managed service if it
81+
logs to stdout. Moreover ianitor does not log anything to make it easier to
82+
plug it in your existing process supervision tool.
83+
84+
ianitor handles service registration in consul agent as well as keeping
85+
registered service entry in consul in "healthy" state by continously requesting
86+
it's [TTL health check endpoint](http://www.consul.io/docs/agent/checks.html).
87+
88+
## Example supervisord config
89+
90+
Assuming that you have some service under supervisord supervision:
91+
92+
[program:rabbitmq]
93+
command=/usr/sbin/rabbitmq-server
94+
priority=0
95+
96+
autostart=true
97+
98+
Simply wrap it with ianitor call:
99+
100+
[program:rabbitmq]
101+
command=/usr/local/bin/ianitor rabbitmq -- /usr/sbin/rabbitmq-server
102+
priority=0
103+
104+
autostart=true
105+
27106
## Licence
28107

29-
This code is under [WTFPL](https://en.wikipedia.org/wiki/WTFPL).
30-
Just do what the fuck you want with it.
108+
`ianitor` is licensed under LGPL license, version 3.
109+
110+
111+
## Contributing and reporting bugs
112+
113+
Source code is available at:
114+
[ClearcodeHQ/ianitor](https://github.com/ClearcodeHQ/ianitor). Issue tracker
115+
is located at [GitHub Issues](https://github.com/ClearcodeHQ/ianitor/issues).
116+
Projects [PyPi page](https://pypi.python.org/pypi/ianitor).

requirements-tests.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pytest
2+
mock

requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
requests
1+
python-consul

setup.py

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# -*- coding: utf-8 -*-
2-
# -*- coding: utf-8 -*-
2+
# Copyright (C) 2014 by Clearcode <http://clearcode.cc>
3+
# and associates (see AUTHORS.md).
4+
5+
# This file is part of ianitor.
6+
7+
# mirakuru is free software: you can redistribute it and/or modify
8+
# it under the terms of the GNU Lesser General Public License as published by
9+
# the Free Software Foundation, either version 3 of the License, or
10+
# (at your option) any later version.
11+
12+
# ianitor is distributed in the hope that it will be useful,
13+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
14+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15+
# GNU Lesser General Public License for more details.
16+
17+
# You should have received a copy of the GNU Lesser General Public License
18+
# along with ianitor. If not, see <http://www.gnu.org/licenses/>.
19+
320
from setuptools import setup, find_packages
421
import os
522

@@ -25,33 +42,43 @@ def get_version(version_tuple):
2542

2643
INSTALL_REQUIRES = reqs('requirements.txt')
2744

28-
README = open(os.path.join(os.path.dirname(__file__), 'README.md')).read()
45+
try:
46+
from pypandoc import convert
47+
read_md = lambda f: convert(f, 'rst')
48+
except ImportError:
49+
print(
50+
"warning: pypandoc module not found, could not convert Markdown to RST"
51+
)
52+
read_md = lambda f: open(f, 'r').read()
53+
54+
README = os.path.join(os.path.dirname(__file__), 'README.md')
2955
PACKAGES = find_packages('src')
3056
PACKAGE_DIR = {'': 'src'}
3157

3258
setup(
3359
name='ianitor',
3460
version=VERSION,
35-
author='Michał Jaworski',
36-
author_email='[email protected]',
61+
author='Clearcode - The A Room',
62+
author_email='[email protected]',
3763
description='Doorkeeper for consul discovered services.',
38-
long_description=README,
64+
long_description=read_md(README),
3965

4066
packages=PACKAGES,
4167
package_dir=PACKAGE_DIR,
4268

43-
url='https://github.com/swistakm/ianitor',
69+
url='https://github.com/ClearcodeHQ/ianitor',
4470
include_package_data=True,
4571
install_requires=INSTALL_REQUIRES,
4672
zip_safe=False,
4773

48-
license="WTFPL",
74+
license="LGPL",
4975
classifiers=[
5076
'Development Status :: 4 - Beta',
5177
'Intended Audience :: Developers',
5278
'Operating System :: OS Independent',
5379
'Programming Language :: Python',
5480
'Programming Language :: Python :: 3',
81+
'License :: OSI Approved :: GNU Lesser General Public License v3 or later (LGPLv3+)', # noqa
5582
],
5683

5784
entry_points={

0 commit comments

Comments
 (0)