PK wHdd d H collectd_rabbitmq-1.2.1.data/data/share/collect-rabbitmq/types.db.customdisk_free value:GAUGE:0:U
disk_free_details value:GAUGE:0:U
disk_free_limit value:GAUGE:0:U
fd_total value:GAUGE:0:U
fd_used value:GAUGE:0:U
fd_used_details value:GAUGE:0:U
mem_limit value:GAUGE:0:U
mem_used value:GAUGE:0:U
mem_used_details value:GAUGE:0:U
proc_total value:GAUGE:0:U
proc_used value:GAUGE:0:U
proc_used_details value:GAUGE:0:U
processors value:GAUGE:0:U
run_queue value:GAUGE:0:U
sockets_total value:GAUGE:0:U
sockets_used value:GAUGE:0:U
sockets_used_details value:GAUGE:0:U
rabbitmq_memory value:GAUGE:0:U
rabbitmq_messages value:GAUGE:0:U
rabbitmq_messages_ready value:GAUGE:0:U
rabbitmq_messages_unacknowledged value:GAUGE:0:U
rabbitmq_consumers value:GAUGE:0:U
rabbitmq_details avg:GAUGE:0:U avg_rate:GAUGE:0:U rate:GAUGE:0:U samples:GAUGE:0:U
rabbitmq_consumers value:GAUGE:0:U
rabbitmq_details avg:GAUGE:0:U, avg_rate:GAUGE:0:U, rate:GAUGE:0:U, samples:GAUGE:0:U
ack value:GAUGE:0:U
ack_details value:GAUGE:0:U
publish value:GAUGE:0:U
publish_details value:GAUGE:0:U
publish_in value:GAUGE:0:U
publish_in_details value:GAUGE:0:U
publish_out value:GAUGE:0:U
publish_out_details value:GAUGE:0:U
confirm value:GAUGE:0:U
confirm_details value:GAUGE:0:U
deliver value:GAUGE:0:U
deliver_details value:GAUGE:0:U
deliver_noack value:GAUGE:0:U
get value:GAUGE:0:U
get_noack value:GAUGE:0:U
deliver_get value:GAUGE:0:U
deliver_get_details value:GAUGE:0:U
redeliver value:GAUGE:0:U
return value:GAUGE:0:U
PK ڡwHщm collectd_rabbitmq/rabbit.py# -*- coding: iso-8859-15 -*-
# Copyright (c) 2014 The New York Times Company
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
python plugin for collectd to obtain rabbitmq stats
"""
import collectd
import json
import urllib
import urllib2
class RabbitMQStats(object):
"""
Class to interface with the RabbitMQ API.
"""
def __init__(self, config):
self.config = config
self.api = "{0}/api".format(self.config.connection.url)
@staticmethod
def get_names(items):
"""
Return URL encoded names.
"""
collectd.debug("Getting names for %s" % items)
names = list()
for item in items:
name = item.get('name', None)
if name:
name = urllib.quote(name, '')
names.append(name)
return names
def get_info(self, *args):
"""
return JSON object from URL.
"""
url = "{0}/{1}".format(self.api, '/'.join(args))
collectd.debug("Getting info for %s" % url)
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password(realm=self.config.auth.realm,
uri=self.api,
user=self.config.auth.username,
passwd=self.config.auth.password)
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
try:
info = urllib2.urlopen(url)
except urllib2.HTTPError as http_error:
collectd.error("HTTP Error: %s" % http_error)
return None
except urllib2.URLError as url_error:
collectd.error("URL Error: %s" % url_error)
return None
except ValueError as value_error:
collectd.error("Value Error: %s" % value_error)
return None
try:
return_value = json.load(info)
except ValueError as err:
collectd.error("ValueError parsing JSON from %s: %s" % (url, err))
return_value = None
except TypeError as err:
collectd.error("TypeError parsing JSON from %s: %s" % (url, err))
return_value = None
return return_value
def get_nodes(self):
"""
Return a list of nodes.
"""
return self.get_info("nodes") or list()
nodes = property(get_nodes)
# Vhosts
def get_vhosts(self):
"""
Returns a list of vhosts.
"""
collectd.debug("Getting a list of vhosts")
return self.get_info("vhosts") or list()
def get_vhost_names(self):
"""
Returns a list of vhost names.
"""
collectd.debug("Getting vhost names")
all_vhosts = self.get_vhosts()
return self.get_names(all_vhosts) or list()
vhost_names = property(get_vhost_names)
# Exchanges
def get_exchanges(self, vhost_name=None):
"""
Returns raw exchange data.
"""
collectd.debug("Getting exchanges for %s" % vhost_name)
return self.get_info("exchanges", vhost_name)
def get_exchange_names(self, vhost_name=None):
"""
Returns a list of all exchange names.
"""
collectd.debug("Getting exchange names for %s" % vhost_name)
all_exchanges = self.get_exchanges(vhost_name)
return self.get_names(all_exchanges)
def get_exchange_stats(self, exchange_name=None, vhost_name=None):
"""
Returns a dictionary of stats for exchange_name.
"""
collectd.debug("Getting exchange stats for %s in %s" %
(exchange_name, vhost_name))
return self.get_stats('exchange', exchange_name, vhost_name)
# Queues
def get_queues(self, vhost_name=None):
"""
Returns raw queue data.
"""
collectd.debug("Getting queues for %s" % vhost_name)
return self.get_info("queues", vhost_name)
def get_queue_names(self, vhost_name=None):
"""
Returns a list of all queue names.
"""
collectd.debug("Getting queue names for %s" % vhost_name)
all_queues = self.get_queues(vhost_name)
return self.get_names(all_queues)
def get_queue_stats(self, queue_name=None, vhost_name=None):
"""
Returns a dictionary of stats for queue_name.
"""
return self.get_stats('queue', queue_name, vhost_name)
def get_stats(self, stat_type, stat_name, vhost_name):
"""
Returns a dictionary of stats.
"""
collectd.debug("Getting stats for %s %s%s in %s" %
(stat_name or 'all',
stat_type,
's' if not stat_name else '',
vhost_name))
if stat_type not in('exchange', 'queue'):
raise ValueError("Unsupported stat type {0}".format(stat_type))
stat_name_func = getattr(self, 'get_{0}_names'.format(stat_type))
if not vhost_name:
vhosts = self.get_vhost_names()
else:
vhosts = [vhost_name]
stats = dict()
for vhost in vhosts:
if not stat_name:
names = stat_name_func(vhost)
else:
names = [stat_name]
for name in names:
if not self.config.is_ignored(stat_type, name):
stats[name] = self.get_info("{0}s".format(stat_type),
vhost,
name)
return stats
PK ۡwH"̧ $ collectd_rabbitmq/collectd_plugin.py# -*- coding: iso-8859-15 -*-
# Copyright (c) 2014 The New York Times Company
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""
This module controls the interactions with collectd
"""
import collectd
import re
from collectd_rabbitmq import rabbit
from collectd_rabbitmq import utils
CONFIG = None
AUTH = None
CONN = None
PLUGIN = None
def configure(config_values):
"""
Converts a collectd configuration into rabbitmq configuration.
"""
collectd.info('Configuring RabbitMQ Plugin')
data_to_ignore = dict()
for config_value in config_values.children:
collectd.info("%s = %s" % (config_value.key, config_value.values))
if len(config_value.values) > 0:
if config_value.key == 'Username':
username = config_value.values[0]
elif config_value.key == 'Password':
password = config_value.values[0]
elif config_value.key == 'Host':
host = config_value.values[0]
elif config_value.key == 'Port':
port = config_value.values[0]
elif config_value.key == 'Realm':
realm = config_value.values[0]
elif config_value.key == 'Ignore':
type_rmq = config_value.values[0]
data_to_ignore[type_rmq] = list()
for regex in config_value.children:
data_to_ignore[type_rmq].append(regex.values[0])
global AUTH # pylint: disable=W0603
global CONN # pylint: disable=W0603
global CONFIG # pylint: disable=W0603
AUTH = utils.Auth(username, password, realm)
CONN = utils.ConnectionInfo(host, port)
CONFIG = utils.Config(AUTH, CONN, data_to_ignore)
def init():
"""
Creates the logs stash plugin object.
"""
global PLUGIN # pylint: disable=W0603
PLUGIN = CollectdPlugin()
def read():
"""
Reads and dispatches data.
"""
collectd.info("Reading data from rabbit and dispatching")
if not PLUGIN:
collectd.warning('Plugin not ready')
return
PLUGIN.read()
class CollectdPlugin(object):
"""
Controls interaction between rabbitmq stats and collectd.
"""
message_stats = ['ack', 'publish', 'publish_in', 'publish_out', 'confirm',
'deliver', 'deliver_noack', 'get', 'get_noack',
'deliver_get', 'redeliver', 'return']
message_details = ['avg', 'avg_rate', 'rate', 'sample']
node_stats = ['disk_free', 'disk_free_limit', 'fd_total',
'fd_used', 'mem_limit', 'mem_used',
'proc_total', 'proc_used', 'processors', 'run_queue',
'sockets_total', 'sockets_used']
def __init__(self):
self.rabbit = rabbit.RabbitMQStats(CONFIG)
def read(self):
"""
Dispatches values to collectd.
"""
self.dispatch_nodes()
for vhost_name in self.rabbit.vhost_names:
self.dispatch_exchanges(vhost_name)
self.dispatch_queues(vhost_name)
@staticmethod
def generate_vhost_name(name):
"""
Generate a "normalized" vhost name without /.
"""
if not name or name == '/':
name = 'default'
else:
name = re.sub(r'^/', 'slash_', name)
name = re.sub(r'/$', '_slash', name)
name = re.sub(r'/', '_slash_', name)
return 'rabbitmq_%s' % name
def dispatch_message_stats(self, data, vhost, plugin, plugin_instance):
"""
Sends message stats to collectd.
"""
if not data:
collectd.debug("No data for %s in vhost %s" % (plugin, vhost))
return
vhost = self.generate_vhost_name(vhost)
for name in self.message_stats:
if 'message_stats' not in data:
return
collectd.debug("Dispatching stat %s for %s in %s" %
(name, plugin_instance, vhost))
value = data['message_stats'].get(name, 0)
self.dispatch_values(value, vhost, plugin, plugin_instance, name)
details = data['message_stats'].get("%s_details" % name, None)
if not details:
continue
for detail in self.message_details:
self.dispatch_values(
(details.get(detail, 0)), vhost, plugin, plugin_instance,
"%s_details" % name, detail)
def dispatch_nodes(self):
"""
Dispatches nodes stats.
"""
stats = self.rabbit.get_nodes()
for node in stats:
name = node['name'].split('@')[1]
collectd.debug("Getting stats for %s node" % name)
for stat_name in self.node_stats:
value = node.get(stat_name, 0)
self.dispatch_values(value, name, 'rabbitmq', None, stat_name)
details = node.get("%s_details" % stat_name, None)
if not details:
continue
for detail in self.message_details:
value = details.get(detail, 0)
self.dispatch_values(value, name, 'rabbitmq', None,
"%s_details" % stat_name, detail)
def dispatch_exchanges(self, vhost_name):
"""
Dispatches exchange data for vhost_name.
"""
collectd.debug("Dispatching exchange data for {0}".format(vhost_name))
stats = self.rabbit.get_exchange_stats(vhost_name=vhost_name)
for exchange_name, value in stats.iteritems():
self.dispatch_message_stats(value, vhost_name, 'exchanges',
exchange_name)
def dispatch_queues(self, vhost_name):
"""
Dispatches queue data for vhost_name.
"""
collectd.debug("Dispatching queue data for {0}".format(vhost_name))
stats = self.rabbit.get_queue_stats(vhost_name=vhost_name)
for exchange_name, value in stats.iteritems():
self.dispatch_message_stats(value, vhost_name, 'queues',
exchange_name)
# pylint: disable=R0913
@staticmethod
def dispatch_values(values, host, plugin, plugin_instance,
metric_type, type_instance=None):
"""
Dispatch metrics to collectd.
:param values (tuple or list): The values to dispatch. It will be
coerced into a list.
:param host: (str): The name of the vhost.
:param plugin (str): The name of the plugin. Should be
queue/exchange.
:param plugin_instance (str): The queue/exchange name.
:param metric_type: (str): The name of metric.
:param type_instance: Optional.
"""
path = "{0}.{1}.{2}.{3}.{4}".format(host, plugin,
plugin_instance,
metric_type, type_instance)
collectd.debug("Dispatching %s values: %s" % (path, values))
metric = collectd.Values()
metric.host = host
metric.plugin = plugin
if plugin_instance:
metric.plugin_instance = plugin_instance
metric.type = metric_type
if type_instance:
metric.type_instance = type_instance
if utils.is_sequence(values):
metric.values = values
else:
metric.values = [values]
# Tiny hack to fix bug with write_http plugin in Collectd
# versions < 5.5.
# See https://github.com/phobos182/collectd-elasticsearch/issues/15
# for details
metric.meta = {'0': True}
metric.dispatch()
# Register callbacks
collectd.register_config(configure)
collectd.register_init(init)
collectd.register_read(read)
PK ۡwHG collectd_rabbitmq/utils.py# -*- coding: iso-8859-15 -*-
# Copyright (c) 2014 The New York Times Company
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
""" Module that contains utility classes and functions """
import re
from urlparse import urlparse
class Auth(object):
"""
Stores Auth data.
"""
def __init__(self, username='guest', password='guest', realm=None):
self.username = username
self.password = password
self.realm = realm or "RabbitMQ Management"
class ConnectionInfo(object):
"""
Stores connection information.
"""
def __init__(self, host='localhost', port=15672, scheme='http'):
self.host = host
self.port = port
self.scheme = scheme
@property
def url(self):
"""
Returns a url made from scheme, host and port.
"""
return "{0}://{1}:{2}".format(self.scheme, self.host, self.port)
@url.setter
def url(self, value):
"""
Sets scheme, host, and port from URL.
"""
parsed_url = urlparse(value)
self.host = parsed_url.hostname
self.port = parsed_url.port
self.scheme = parsed_url.scheme
class Config(object):
"""
Class that contains configuration data.
"""
def __init__(self, auth, connection, data_to_ignore=None):
self.auth = auth
self.connection = connection
self.data_to_ignore = dict()
if data_to_ignore:
for key, values in data_to_ignore.items():
self.data_to_ignore[key] = list()
for value in values:
self.data_to_ignore[key].append(re.compile(value))
def is_ignored(self, stat_type, name):
"""
Return true if name of type qtype should be ignored.
"""
if stat_type in self.data_to_ignore:
for regex in self.data_to_ignore[stat_type]:
match = regex.match(name)
if match:
return True
return False
def filter_dictionary(dictionary, keys):
"""
Returns a dictionary with only keys.
"""
if not keys:
return dict()
if not dictionary:
return dict()
return dict((key, dictionary[key]) for key in keys if key in dictionary)
def is_sequence(arg):
"""
Returns true if arg behaves like a sequence,
unless it also implements strip, such as strings.
"""
return (not hasattr(arg, "strip") and
hasattr(arg, "__getitem__") or
hasattr(arg, "__iter__"))
PK ]xHd collectd_rabbitmq/__init__.py__version__ = '1.2.1'
PK
]xH9
1 collectd_rabbitmq-1.2.1.dist-info/DESCRIPTION.rst===============================
collectd-rabbitmq
===============================
.. image:: https://img.shields.io/pypi/v/collectd-rabbitmq.svg
:target: https://pypi.python.org/pypi/collectd-rabbitmq
.. image:: https://img.shields.io/travis/jimbydamonk/collectd-rabbitmq.svg
:target: https://travis-ci.org/NYTimes/collectd-rabbitmq
.. image:: https://readthedocs.org/projects/collectd-rabbitmq/badge/?version=latest
:target: https://readthedocs.org/projects/collectd-rabbitmq/?badge=latest
:alt: Documentation Status
"A collected plugin, written in python, to collect statistics from RabbitMQ."
* Free software: Apache license
* Documentation: https://collectd-rabbitmq.readthedocs.org.
* For the older single file version see https://github.com/NYTimes/collectd-rabbitmq/tree/0.1.0
Features
--------
* Support queue, exchange, and node stats,
Configuration
-------------
This plugin supports a small amount of configuration options:
* `Username`: The rabbitmq user. Defaults to `guest`
* `Password`: The rabbitmq user password. Defaults to `guest`
* `Realm`: The http realm for authentication. Defaults to `RabbitMQ Management`
* `Scheme`: The protocol that the rabbitmq management API is running on. Defaults to `http`
* `Host`: The hostname that the rabbitmq server running on. Defaults to `localhost`
* `Port`: The port that the rabbitmq server is listening on. Defaults to `15672`
* `Ignore`: The queue to ignore, matching by Regex. See example.
Example Configuration
---------------------
```
LoadPlugin python
ModulePath "/usr/lib/python2.7/site-packages/collectd-rabbitmq"
LogTraces true
Interactive false
Import rabbitmq
Username "guest"
Password "guest"
Realm "RabbitMQ Management"
Host "localhost"
Port "15672"
Regex "amq-gen-.*"
Regex "tmp-.*"
```
Nodes
-----
For each node the following statistics are gathered:
* disk_free_limit
* fd_total
* fd_used
* mem_limit
* mem_used
* proc_total
* proc_used
* processors
* run_queue
* sockets_total
* sockets_used
Queues
-------
For each queue in each vhost the following statistics are gathered:
_NOTE_: The `/` vhost name is sent as `default`
* message_stats
* deliver_get
* deliver_get_details
* rate
* get
* get_details
* rate
* publish
* publish_details
* rate
* redeliver
* redeliver_details
* rate
* messages
* messages_details
* rate
* messages_ready
* messages_ready_details
* rate
* messages_unacknowledged
* messages_unacknowledged_details
* rate
* memory
* consumers
Exchanges
----------
For each exchange in each vhost the following statistics are gathered:
_NOTE_: The `/` vhost name is sent as `default`
* disk_free
* disk_free_limit
* fd_total
* fd_used
* mem_limit
* mem_used
* proc_total
* proc_used
* processors
* run_queue
* sockets_total
* sockets_used
Credits
---------
This package was created with Cookiecutter_ and the `cookiecutter-pypackage`_ project template.
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage
History
-------
0.1.0 (2014-09-18)
---------------------
* First public release.
PK
]xHR* * / collectd_rabbitmq-1.2.1.dist-info/metadata.json{"classifiers": ["Development Status :: 2 - Pre-Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: Apache Software License", "Natural Language :: English", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7"], "extensions": {"python.details": {"contacts": [{"email": "mike.buzzetti@gmail.com", "name": "Mike Buzzetti", "role": "author"}], "document_names": {"description": "DESCRIPTION.rst"}, "project_urls": {"Home": "https://github.com/NYTimes/collectd-rabbitmq"}}}, "generator": "bdist_wheel (0.26.0)", "keywords": ["collectd-rabbitmq"], "license": "Apache", "metadata_version": "2.0", "name": "collectd-rabbitmq", "summary": "A collected plugin, written in python, tocollect statistics from RabbitMQ.", "test_requires": [{"requires": []}], "version": "1.2.1"}PK
]xH
/ collectd_rabbitmq-1.2.1.dist-info/top_level.txtcollectd_rabbitmq
PK
]xHndn n ' collectd_rabbitmq-1.2.1.dist-info/WHEELWheel-Version: 1.0
Generator: bdist_wheel (0.26.0)
Root-Is-Purelib: true
Tag: py2-none-any
Tag: py3-none-any
PK
]xH*3q q * collectd_rabbitmq-1.2.1.dist-info/METADATAMetadata-Version: 2.0
Name: collectd-rabbitmq
Version: 1.2.1
Summary: A collected plugin, written in python, tocollect statistics from RabbitMQ.
Home-page: https://github.com/NYTimes/collectd-rabbitmq
Author: Mike Buzzetti
Author-email: mike.buzzetti@gmail.com
License: Apache
Keywords: collectd-rabbitmq
Platform: UNKNOWN
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Natural Language :: English
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
===============================
collectd-rabbitmq
===============================
.. image:: https://img.shields.io/pypi/v/collectd-rabbitmq.svg
:target: https://pypi.python.org/pypi/collectd-rabbitmq
.. image:: https://img.shields.io/travis/jimbydamonk/collectd-rabbitmq.svg
:target: https://travis-ci.org/NYTimes/collectd-rabbitmq
.. image:: https://readthedocs.org/projects/collectd-rabbitmq/badge/?version=latest
:target: https://readthedocs.org/projects/collectd-rabbitmq/?badge=latest
:alt: Documentation Status
"A collected plugin, written in python, to collect statistics from RabbitMQ."
* Free software: Apache license
* Documentation: https://collectd-rabbitmq.readthedocs.org.
* For the older single file version see https://github.com/NYTimes/collectd-rabbitmq/tree/0.1.0
Features
--------
* Support queue, exchange, and node stats,
Configuration
-------------
This plugin supports a small amount of configuration options:
* `Username`: The rabbitmq user. Defaults to `guest`
* `Password`: The rabbitmq user password. Defaults to `guest`
* `Realm`: The http realm for authentication. Defaults to `RabbitMQ Management`
* `Scheme`: The protocol that the rabbitmq management API is running on. Defaults to `http`
* `Host`: The hostname that the rabbitmq server running on. Defaults to `localhost`
* `Port`: The port that the rabbitmq server is listening on. Defaults to `15672`
* `Ignore`: The queue to ignore, matching by Regex. See example.
Example Configuration
---------------------
```
LoadPlugin python
ModulePath "/usr/lib/python2.7/site-packages/collectd-rabbitmq"
LogTraces true
Interactive false
Import rabbitmq
Username "guest"
Password "guest"
Realm "RabbitMQ Management"
Host "localhost"
Port "15672"
Regex "amq-gen-.*"
Regex "tmp-.*"
```
Nodes
-----
For each node the following statistics are gathered:
* disk_free_limit
* fd_total
* fd_used
* mem_limit
* mem_used
* proc_total
* proc_used
* processors
* run_queue
* sockets_total
* sockets_used
Queues
-------
For each queue in each vhost the following statistics are gathered:
_NOTE_: The `/` vhost name is sent as `default`
* message_stats
* deliver_get
* deliver_get_details
* rate
* get
* get_details
* rate
* publish
* publish_details
* rate
* redeliver
* redeliver_details
* rate
* messages
* messages_details
* rate
* messages_ready
* messages_ready_details
* rate
* messages_unacknowledged
* messages_unacknowledged_details
* rate
* memory
* consumers
Exchanges
----------
For each exchange in each vhost the following statistics are gathered:
_NOTE_: The `/` vhost name is sent as `default`
* disk_free
* disk_free_limit
* fd_total
* fd_used
* mem_limit
* mem_used
* proc_total
* proc_used
* processors
* run_queue
* sockets_total
* sockets_used
Credits
---------
This package was created with Cookiecutter_ and the `cookiecutter-pypackage`_ project template.
.. _Cookiecutter: https://github.com/audreyr/cookiecutter
.. _`cookiecutter-pypackage`: https://github.com/audreyr/cookiecutter-pypackage
History
-------
0.1.0 (2014-09-18)
---------------------
* First public release.
PK
]xHK ( collectd_rabbitmq-1.2.1.dist-info/RECORDcollectd_rabbitmq/__init__.py,sha256=kmfHpHo2YhSrigutlRQs8qXIR8nEm-D-c8lScQQN64M,22
collectd_rabbitmq/collectd_plugin.py,sha256=OfCtmTOjyvBn-d-feddo5MCVZLVpggZkI_2T1c53WN8,8359
collectd_rabbitmq/rabbit.py,sha256=XV6_OP2ig6OnXo7IrC9mEGlESf1qFTyDYS5qX9rwRPM,6108
collectd_rabbitmq/utils.py,sha256=b4OdbTbG-RS6_RA5cWI7NfaE8MKXw6e3_Nb6PeP5WrE,3031
collectd_rabbitmq-1.2.1.data/data/share/collect-rabbitmq/types.db.custom,sha256=THVWyFTjc9lLSQpN-q3ZYQWPNRnGkc1zKJUL5a_cr-8,1892
collectd_rabbitmq-1.2.1.dist-info/DESCRIPTION.rst,sha256=n0nVEANwrwISH0sKsNod9hvvAwdxeTZrQ6A6yCp7-1U,3336
collectd_rabbitmq-1.2.1.dist-info/METADATA,sha256=13Kg8uAzxCYXPu666fNU_XbM44uYpgI7L5DmruRoqME,3953
collectd_rabbitmq-1.2.1.dist-info/RECORD,,
collectd_rabbitmq-1.2.1.dist-info/WHEEL,sha256=GrqQvamwgBV4nLoJe0vhYRSWzWsx7xjlt74FT0SWYfE,110
collectd_rabbitmq-1.2.1.dist-info/metadata.json,sha256=Ml1_eKZ1HQAwZFaI_owLJNVJi5hClPYxvGWV_bUBBeM,810
collectd_rabbitmq-1.2.1.dist-info/top_level.txt,sha256=ii997zQ7VaKPp4Ogt_7bdLjsU91UOO2sE5c4rpHLSWg,18
PK wHdd d H collectd_rabbitmq-1.2.1.data/data/share/collect-rabbitmq/types.db.customPK ڡwHщm collectd_rabbitmq/rabbit.pyPK ۡwH"̧ $ collectd_rabbitmq/collectd_plugin.pyPK ۡwHG @ collectd_rabbitmq/utils.pyPK ]xHd L collectd_rabbitmq/__init__.pyPK
]xH9
1 (M collectd_rabbitmq-1.2.1.dist-info/DESCRIPTION.rstPK
]xHR* * / Z collectd_rabbitmq-1.2.1.dist-info/metadata.jsonPK
]xH
/ ] collectd_rabbitmq-1.2.1.dist-info/top_level.txtPK
]xHndn n ' U^ collectd_rabbitmq-1.2.1.dist-info/WHEELPK
]xH*3q q * _ collectd_rabbitmq-1.2.1.dist-info/METADATAPK
]xHK ( n collectd_rabbitmq-1.2.1.dist-info/RECORDPK s