PKxHdddHcollectd_rabbitmq-1.2.2.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 PKxHщmcollectd_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 PKxH"̧ $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) PKxHG 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__")) PKxH" collectd_rabbitmq/__init__.py__version__ = '1.2.2' PKxHZo 1collectd_rabbitmq-1.2.2.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/NYTimes.com/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.1 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. See `this example`_ for further details. .. _this example: config/collectd.conf 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. PKxH1**/collectd_rabbitmq-1.2.2.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.2"}PKxH /collectd_rabbitmq-1.2.2.dist-info/top_level.txtcollectd_rabbitmq PKxHndnn'collectd_rabbitmq-1.2.2.dist-info/WHEELWheel-Version: 1.0 Generator: bdist_wheel (0.26.0) Root-Is-Purelib: true Tag: py2-none-any Tag: py3-none-any PKxHn  *collectd_rabbitmq-1.2.2.dist-info/METADATAMetadata-Version: 2.0 Name: collectd-rabbitmq Version: 1.2.2 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/NYTimes.com/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.1 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. See `this example`_ for further details. .. _this example: config/collectd.conf 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. PKxH Z(collectd_rabbitmq-1.2.2.dist-info/RECORDcollectd_rabbitmq/__init__.py,sha256=TyoJr5e3yETpfn6Cqp5KwpweiqaDNZKKhK7N7U81GVQ,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.2.data/data/share/collect-rabbitmq/types.db.custom,sha256=THVWyFTjc9lLSQpN-q3ZYQWPNRnGkc1zKJUL5a_cr-8,1892 collectd_rabbitmq-1.2.2.dist-info/DESCRIPTION.rst,sha256=2SEEb8NQeILq1frjAvB95vyavPOhbD8_plU1q1l3vRo,2977 collectd_rabbitmq-1.2.2.dist-info/METADATA,sha256=Qqz21_oXhNS62PUy6JX0V6THUtPjDlaxqKKPXWqLOnw,3594 collectd_rabbitmq-1.2.2.dist-info/RECORD,, collectd_rabbitmq-1.2.2.dist-info/WHEEL,sha256=GrqQvamwgBV4nLoJe0vhYRSWzWsx7xjlt74FT0SWYfE,110 collectd_rabbitmq-1.2.2.dist-info/metadata.json,sha256=Y8BAtHP5rF8UrSvvet1p3-A8l_ZzgGcSOfONlds1evc,810 collectd_rabbitmq-1.2.2.dist-info/top_level.txt,sha256=ii997zQ7VaKPp4Ogt_7bdLjsU91UOO2sE5c4rpHLSWg,18 PKxHdddHcollectd_rabbitmq-1.2.2.data/data/share/collect-rabbitmq/types.db.customPKxHщmcollectd_rabbitmq/rabbit.pyPKxH"̧ $collectd_rabbitmq/collectd_plugin.pyPKxHG @collectd_rabbitmq/utils.pyPKxH" Lcollectd_rabbitmq/__init__.pyPKxHZo 1(Mcollectd_rabbitmq-1.2.2.dist-info/DESCRIPTION.rstPKxH1**/Ycollectd_rabbitmq-1.2.2.dist-info/metadata.jsonPKxH /\collectd_rabbitmq-1.2.2.dist-info/top_level.txtPKxHndnn'\collectd_rabbitmq-1.2.2.dist-info/WHEELPKxHn  *]collectd_rabbitmq-1.2.2.dist-info/METADATAPKxH Z(kcollectd_rabbitmq-1.2.2.dist-info/RECORDPK Ap