{ "info": { "author": "Alberto Donato", "author_email": "alberto.donato@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: System Administrators", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Utilities" ], "description": "Export Prometheus metrics from SQL queries\n==========================================\n\n|Latest Version| |Build Status| |Coverage Status| |Snap Status|\n\n``query-exporter`` is a Prometheus_ exporter which allows collecting metrics\nfrom database queries, at specified time intervals.\n\nIt uses SQLAlchemy_ to connect to different database engines, including\nPostgreSQL, MySQL, Oracle and Microsoft SQL Server.\n\nEach query can be run on multiple databases, and update multiple metrics.\n\nThe application is simply run as::\n\n query-exporter config.yaml\n\nwhere the passed configuration file contains the definitions of the databases\nto connect and queries to perform to update metrics.\n\n\nConfiguration file format\n-------------------------\n\nA sample configuration file for the application looks like this:\n\n.. code:: yaml\n\n databases:\n db1:\n dsn: sqlite://\n db2:\n dsn: sqlite://\n keep-connected: false\n\n metrics:\n metric1:\n type: gauge\n description: A sample gauge\n metric2:\n type: summary\n description: A sample summary\n labels: [l1, l2]\n metric3:\n type: histogram\n description: A sample histogram\n buckets: [10, 20, 50, 100, 1000]\n metric4:\n type: enum\n description: A sample enum\n states: [foo, bar, baz]\n\n queries:\n query1:\n interval: 5\n databases: [db1]\n metrics: [metric1]\n sql: SELECT random() / 1000000000000000\n query2:\n interval: 20\n databases: [db1, db2]\n metrics: [metric2, metric3]\n sql: |\n SELECT abs(random() / 1000000000000000) AS metric2,\n abs(random() / 10000000000000000) AS metric3,\n \"value1\" AS l1,\n \"value2\" AS l2\n query3:\n interval: 10\n databases: [db2]\n metrics: [metric4]\n sql: |\n SELECT value FROM (\n SELECT \"foo\" AS value UNION\n SELECT \"bar\" UNION\n SELECT \"baz\")\n ORDER BY random()\n LIMIT 1\n\n``databases`` section\n~~~~~~~~~~~~~~~~~~~~~\n\nThis section contains defintions for databases to connect to. Key names are\narbitrary and only used to reference databases in the ``queries`` section.\n\nEach database defintions can have the following keys:\n\n``dsn``:\n the connection string for the database, in the following format::\n\n dialect[+driver]://[username:password][@host:port]/database[?option=value&...]\n\n See `SQLAlchemy documentation`_ for details on available engines.\n\n It's also possible to get the connection string from an environment variable\n (e.g. ``$CONNECTION_STRING``) by setting ``dsn`` to::\n\n env:CONNECTION_STRING\n\n``keep-connected``:\n whether to keep the connection open for the database between queries, or\n disconnect after each one. If not specified, defaults to ``true``. Setting\n this option to ``false`` might be useful if queries on a database are run\n with very long interval, to avoid holding idle connections.\n\n``metrics`` section\n~~~~~~~~~~~~~~~~~~~\n\nThis section contains Prometheus_ metrics definitions. Keys are used as metric\nnames, and must therefore be valid metric identifiers.\n\nEach metric definition can have the following keys:\n\n``type``:\n the type of the metric, must be specified. The following metric types are\n supported::\n\n counter, enum, gauge, histogram, summary\n\n``description``:\n an optional description of the metric.\n\n``labels``:\n an optional list of label names to apply to the metric.\n\n If specified, queries updating the metric must return rows that include\n values for each label in addition to the metric value. Column names must\n match metric and labels names.\n\n``buckets``:\n for ``histogram`` metrics, a list of buckets for the metrics.\n\n If not specified, default buckets are applied.\n\n``states``:\n for ``enum`` metrics, a list of string values for possible states.\n\n Queries for updating the enum must return valid states.\n\n``queries`` section\n~~~~~~~~~~~~~~~~~~~\n\nThis section contains definitions for queries to perform. Key names are\narbitrary and only used to identify queries in logs.\n\nEach query definition can have the following keys:la-\n\n``interval``:\n the time interval at which queries are run.\n\n The value is interpreted as seconds if no suffix is specified; valid suffixes\n are ``s``, ``m``, ``h``, ``d``. Only integer values are accepted.\n\n If no value is specified (or specified as ``null``), the query is only\n executed upon HTTP requests.\n\n``databases``:\n the list of databases to run the query on.\n\n Names must match those defined in the ``databases`` section.\n\n Metrics are automatically tagged with the ``database`` label so that\n indipendent series are generated for each database that a query is run on.\n\n``metrics``:\n the list of metrics that the query updates.\n\n Names must match those defined in the ``metrics`` section.\n\n``sql``:\n the SQL text of the query.\n\n The query must return a number of rows that match the number of ``metrics``\n specified for the query plus labels for those metrics (if any).\n\n The names of returned columns should match those of declared metrics and\n their labels. As an exception, if no metric for the query has labels and\n column names don't match those of metrics, the order of metrics declaration\n is used. For example:\n\n .. code:: yaml\n\n query:\n databases: [db]\n metrics: [metric1, metric2]\n sql: SELECT 10.0, 20.0\n\n will update ``metric1`` to ``10.0`` and ``metric2`` to ``20.0``.\n\n\nMetrics endpoint\n----------------\n\nThe exporter uses port ``9560`` by default for exposting metrics, under the\nstandard ``/metrics`` endpoint.\n\nFor the configuration above, the endpoint would return something like this::\n\n # HELP database_errors_total Number of database errors\n # TYPE database_errors_total counter\n # HELP queries_total Number of database queries\n # TYPE queries_total counter\n queries_total{database=\"db2\",status=\"success\"} 2.0\n queries_total{database=\"db1\",status=\"success\"} 3.0\n # TYPE queries_created gauge\n queries_created{database=\"db2\",status=\"success\"} 1.558334663380845e+09\n queries_created{database=\"db1\",status=\"success\"} 1.558334663381175e+09\n # HELP metric1 A sample gauge\n # TYPE metric1 gauge\n metric1{database=\"db1\"} 2580.0\n # HELP metric2 A sample summary\n # TYPE metric2 summary\n metric2_count{database=\"db2\",l1=\"value1\",l2=\"value2\"} 1.0\n metric2_sum{database=\"db2\",l1=\"value1\",l2=\"value2\"} 6476.0\n metric2_count{database=\"db1\",l1=\"value1\",l2=\"value2\"} 1.0\n metric2_sum{database=\"db1\",l1=\"value1\",l2=\"value2\"} 2340.0\n # TYPE metric2_created gauge\n metric2_created{database=\"db2\",l1=\"value1\",l2=\"value2\"} 1.5583346633805697e+09\n metric2_created{database=\"db1\",l1=\"value1\",l2=\"value2\"} 1.5583346633816812e+09\n # HELP metric3 A sample histogram\n # TYPE metric3 histogram\n metric3_bucket{database=\"db2\",le=\"10.0\"} 0.0\n metric3_bucket{database=\"db2\",le=\"20.0\"} 0.0\n metric3_bucket{database=\"db2\",le=\"50.0\"} 0.0\n metric3_bucket{database=\"db2\",le=\"100.0\"} 0.0\n metric3_bucket{database=\"db2\",le=\"1000.0\"} 1.0\n metric3_bucket{database=\"db2\",le=\"+Inf\"} 1.0\n metric3_count{database=\"db2\"} 1.0\n metric3_sum{database=\"db2\"} 135.0\n metric3_bucket{database=\"db1\",le=\"10.0\"} 0.0\n metric3_bucket{database=\"db1\",le=\"20.0\"} 0.0\n metric3_bucket{database=\"db1\",le=\"50.0\"} 0.0\n metric3_bucket{database=\"db1\",le=\"100.0\"} 0.0\n metric3_bucket{database=\"db1\",le=\"1000.0\"} 1.0\n metric3_bucket{database=\"db1\",le=\"+Inf\"} 1.0\n metric3_count{database=\"db1\"} 1.0\n metric3_sum{database=\"db1\"} 164.0\n # TYPE metric3_created gauge\n metric3_created{database=\"db2\"} 1.5583346633807e+09\n metric3_created{database=\"db1\"} 1.558334663381795e+09\n # HELP metric4 A sample enum\n # TYPE metric4 gauge\n metric4{database=\"db2\",metric4=\"foo\"} 0.0\n metric4{database=\"db2\",metric4=\"bar\"} 0.0\n metric4{database=\"db2\",metric4=\"baz\"} 1.0\n\n\nDatabase engines\n----------------\n\nSQLAlchemy_ doesn't depend on specific Python database modules at\ninstallation. This means additional modules might need to be installed for\nengines in use. These can be installed as follows::\n\n pip install SQLAlchemy[postgresql] SQLAlchemy[mysql] ...\n\nbased on which database engines are needed.\n\nSee `supported databases`_ for details.\n\n\nInstall from Snap\n-----------------\n\n|Get it from the Snap Store|\n\n``query-exporter`` can be installed from `Snap Store`_ on systems where Snaps\nare supported, via::\n\n sudo snap install query-exporter\n\nThe snap provides both the ``query-exporter`` command and a deamon instance of\nthe command, managed via a Systemd service.\n\nTo configure the daemon:\n\n- create or edit ``/var/snap/query-exporter/current/config.yaml`` with the\n configuration\n- run ``sudo snap restart query-exporter``\n\nThe snap has builtin support for the following databases:\n\n- MySQL\n- PostgreSQL\n- SQLite\n\n\n.. _Prometheus: https://prometheus.io/\n.. _SQLAlchemy: https://www.sqlalchemy.org/\n.. _`SQLAlchemy documentation`:\n http://docs.sqlalchemy.org/en/latest/core/engines.html#database-urls\n.. _`supported databases`:\n http://docs.sqlalchemy.org/en/latest/core/engines.html#supported-databases\n.. _`Snap Store`: https://snapcraft.io\n\n.. |Latest Version| image:: https://img.shields.io/pypi/v/query-exporter.svg\n :target: https://pypi.python.org/pypi/query-exporter\n.. |Build Status| image:: https://img.shields.io/travis/albertodonato/query-exporter.svg\n :target: https://travis-ci.org/albertodonato/query-exporter\n.. |Coverage Status| image:: https://img.shields.io/codecov/c/github/albertodonato/query-exporter/master.svg\n :target: https://codecov.io/gh/albertodonato/query-exporter\n.. |Snap Status| image:: https://build.snapcraft.io/badge/albertodonato/query-exporter.svg\n :target: https://build.snapcraft.io/user/albertodonato/query-exporter\n.. |Get it from the Snap Store| image:: https://snapcraft.io/static/images/badges/en/snap-store-black.svg\n :target: https://snapcraft.io/query-exporter", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/albertodonato/query-exporter", "keywords": "sql metric prometheus exporter", "license": "GPLv3+", "maintainer": "Alberto Donato", "maintainer_email": "alberto.donato@gmail.com", "name": "query-exporter", "package_url": "https://pypi.org/project/query-exporter/", "platform": "", "project_url": "https://pypi.org/project/query-exporter/", "project_urls": { "Homepage": "https://github.com/albertodonato/query-exporter" }, "release_url": "https://pypi.org/project/query-exporter/1.8.1/", "requires_dist": null, "requires_python": "", "summary": "Export Prometheus metrics generated from SQL queries.", "version": "1.8.1" }, "last_serial": 5530593, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "6eb4e36238a566858fea4819ffddb0f0", "sha256": "d914026a8d31f0fc81370ce1e057766bbbe297153168a663d626682624544076" }, "downloads": -1, "filename": "query-exporter-0.1.2.tar.gz", "has_sig": false, "md5_digest": "6eb4e36238a566858fea4819ffddb0f0", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22986, "upload_time": "2017-05-07T17:51:54", "url": "https://files.pythonhosted.org/packages/59/53/6ecf5d5257b0efc9d8de73022cc3f563b2e40a7ff7764520fdce9ceb0e4d/query-exporter-0.1.2.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "8b7925c06a84c23c66b94ac5c1d24f58", "sha256": "8ec01bb5d5a9d2c1fa39398b134bb9738ffaec44b33b0de4da30cc400ffea7c3" }, "downloads": -1, "filename": "query-exporter-1.0.0.tar.gz", "has_sig": false, "md5_digest": "8b7925c06a84c23c66b94ac5c1d24f58", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23193, "upload_time": "2017-05-13T09:58:06", "url": "https://files.pythonhosted.org/packages/9d/ef/21bf98e8df0ada2876290ff9f73bffacccc793dea3ef8972951a12d95cf0/query-exporter-1.0.0.tar.gz" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "c9372b93bdd2d52ac27440fa3a72ed65", "sha256": "91228f06353ccdaee7102648a59b9ec86a4cc2a8b4fdcba1e7fe33f3e2339887" }, "downloads": -1, "filename": "query-exporter-1.1.0.tar.gz", "has_sig": false, "md5_digest": "c9372b93bdd2d52ac27440fa3a72ed65", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 22950, "upload_time": "2017-05-21T11:34:34", "url": "https://files.pythonhosted.org/packages/f0/80/cc771113504582bff11de1db4952d742f50e5c196cb840728c06d71be994/query-exporter-1.1.0.tar.gz" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "2b86ea2ba37d23c879b65e46376fc2f6", "sha256": "7b71eedeaf656ced0a12a7ca6ca54f35bbb1ee2fbcd7b8f785b7b2a6e27da97a" }, "downloads": -1, "filename": "query-exporter-1.2.0.tar.gz", "has_sig": false, "md5_digest": "2b86ea2ba37d23c879b65e46376fc2f6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23711, "upload_time": "2017-06-30T19:29:57", "url": "https://files.pythonhosted.org/packages/27/cc/5a4ef5ddfd270dd5b674a2c8daae77b22703f3fa5c535ab320bf8ed0b137/query-exporter-1.2.0.tar.gz" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "43e6ce27386c00374b1ccd42895fea4c", "sha256": "4dfb5273bb855859a7ee5f73a0479e35c11258f21ebbb145b1c0c1097629b8b1" }, "downloads": -1, "filename": "query_exporter-1.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "43e6ce27386c00374b1ccd42895fea4c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15275, "upload_time": "2017-10-24T23:42:04", "url": "https://files.pythonhosted.org/packages/74/71/fa4e5086309c8fb19c7f098deccfa8242e46c357970b2b1a7c1bd7be74b5/query_exporter-1.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bb2e98d662cebfd291c1bdff02369aed", "sha256": "a3db9446d92d22f9e1b701a5c64385f2f64e1dd7b4ba5443ca6fafb2ab008f3e" }, "downloads": -1, "filename": "query-exporter-1.2.1.tar.gz", "has_sig": false, "md5_digest": "bb2e98d662cebfd291c1bdff02369aed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23890, "upload_time": "2017-10-24T23:42:06", "url": "https://files.pythonhosted.org/packages/54/a7/206ca5de441f35b8b13d0b9dc24b462e27f4fb152e1faf214bcdda311f65/query-exporter-1.2.1.tar.gz" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "f27af40a02a60dc02536d8f6bd9dde9e", "sha256": "9c387da277019936ec5f9bdb319e0ad153eec06d034e1202982e9f07f7893e32" }, "downloads": -1, "filename": "query_exporter-1.2.2-py3-none-any.whl", "has_sig": false, "md5_digest": "f27af40a02a60dc02536d8f6bd9dde9e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15229, "upload_time": "2017-10-24T23:53:25", "url": "https://files.pythonhosted.org/packages/1a/7f/b28fd709776d1dd559ba7352664ffd21903fe9678c17fe1698bbfc5acfad/query_exporter-1.2.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "21bc11e4073571d10bc7cb82e410e462", "sha256": "c7a7982a54e73359bb2bcd66aecbd1bda0dbc4c932a52810e373f3eaed2ff588" }, "downloads": -1, "filename": "query-exporter-1.2.2.tar.gz", "has_sig": false, "md5_digest": "21bc11e4073571d10bc7cb82e410e462", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23859, "upload_time": "2017-10-24T23:53:27", "url": "https://files.pythonhosted.org/packages/f5/79/01f728e03f7fc1fbe0b6595c8ff229ed9618801c5eb1828015ea9704913d/query-exporter-1.2.2.tar.gz" } ], "1.3.0": [ { "comment_text": "", "digests": { "md5": "5c15bac6a5f6bb71cbe952e647db50f1", "sha256": "607b1982e6b8680ed405bccab19d8c96b2f3297ad6fef828d5a3554268e41f50" }, "downloads": -1, "filename": "query_exporter-1.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "5c15bac6a5f6bb71cbe952e647db50f1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15778, "upload_time": "2018-02-19T23:41:00", "url": "https://files.pythonhosted.org/packages/a3/f1/938e899b30043b6b628d7f889567762fade7df33db736323a6237d541bd3/query_exporter-1.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9db108e9c18a1c4ce1481bf30a62ee27", "sha256": "94da98db2a138a0d45d9580852adb358aeae17674ecbf94d4d0e67e31d59144a" }, "downloads": -1, "filename": "query-exporter-1.3.0.tar.gz", "has_sig": false, "md5_digest": "9db108e9c18a1c4ce1481bf30a62ee27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24445, "upload_time": "2018-02-19T23:41:03", "url": "https://files.pythonhosted.org/packages/a6/86/982b47f6c80f2458dcac788fd147cde048e3f6a09238023c63c3114163d3/query-exporter-1.3.0.tar.gz" } ], "1.4.0": [ { "comment_text": "", "digests": { "md5": "78bd3a69a2c65e5256bc8d0797a9fd76", "sha256": "3acbc325877c5bd7dbeb297f6dd700961019007e960989586c45ff60a82bf9d0" }, "downloads": -1, "filename": "query_exporter-1.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "78bd3a69a2c65e5256bc8d0797a9fd76", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 15823, "upload_time": "2018-06-08T16:18:59", "url": "https://files.pythonhosted.org/packages/8e/62/807f030f9d71b6d12bf07c6f22558f2332011a60698531056f04a954c49b/query_exporter-1.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "75aa2e9866deffd6383a092cfcf10ade", "sha256": "84ae6468798018f995e629be1bd15c9e604ba742af92eecbe132afe480d456ff" }, "downloads": -1, "filename": "query-exporter-1.4.0.tar.gz", "has_sig": false, "md5_digest": "75aa2e9866deffd6383a092cfcf10ade", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24621, "upload_time": "2018-06-08T16:25:44", "url": "https://files.pythonhosted.org/packages/30/7e/86aca2e886f5417e0c151050bec9339a16946bb8309c3532f7aa1ba2afed/query-exporter-1.4.0.tar.gz" } ], "1.5.0": [ { "comment_text": "", "digests": { "md5": "1f6e810714074a27941cd621ae26c3ef", "sha256": "f1914673fbe403ecded3a07231c6a09d8d94cb97d73ada61ea39cef867e18789" }, "downloads": -1, "filename": "query_exporter-1.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "1f6e810714074a27941cd621ae26c3ef", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 17711, "upload_time": "2018-12-28T14:21:32", "url": "https://files.pythonhosted.org/packages/67/12/c906e9f08c5d23f30f9c3e11a1320da33e87d1c358714d8812f4d8ead29f/query_exporter-1.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1014cbe19387a39d1e9bac6bfe418286", "sha256": "0290a45ab313f00e228835575a621ec22c5c463c060b496ccd67b4240f56d5bb" }, "downloads": -1, "filename": "query-exporter-1.5.0.tar.gz", "has_sig": false, "md5_digest": "1014cbe19387a39d1e9bac6bfe418286", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26331, "upload_time": "2018-12-28T14:21:34", "url": "https://files.pythonhosted.org/packages/9a/d9/b8d8d6e2ca23e0d87d16c81638b5f56e1ac117b6cbf2ee611d763ec9f071/query-exporter-1.5.0.tar.gz" } ], "1.6.0": [ { "comment_text": "", "digests": { "md5": "dc7ed7ddd714b0cff91fd9f690714af8", "sha256": "29a9c8cc61ddd91befeed87b34d95494420fc3b8169d41164d86322f65fcc6a2" }, "downloads": -1, "filename": "query-exporter-1.6.0.tar.gz", "has_sig": false, "md5_digest": "dc7ed7ddd714b0cff91fd9f690714af8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26371, "upload_time": "2019-03-26T22:47:49", "url": "https://files.pythonhosted.org/packages/0d/0b/50daf1f05078b0a1bc7eecd54523967db68fa6154b682e093240494ed55f/query-exporter-1.6.0.tar.gz" } ], "1.7.0": [ { "comment_text": "", "digests": { "md5": "f762a8e2146a25f7d1c93b0aa487e7e4", "sha256": "f51890b7bcd0cfcff864ab868e1f834b7ced0fc9f012ec48a3f22ae8f5a8a115" }, "downloads": -1, "filename": "query-exporter-1.7.0.tar.gz", "has_sig": false, "md5_digest": "f762a8e2146a25f7d1c93b0aa487e7e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28866, "upload_time": "2019-04-11T07:05:13", "url": "https://files.pythonhosted.org/packages/94/af/23d686d6422415eff5ad5d1f3b2e224e5e9570a234450884af3aba89e4ff/query-exporter-1.7.0.tar.gz" } ], "1.8.0": [ { "comment_text": "", "digests": { "md5": "ce04595c9bb00b1c8145fdae61cd039b", "sha256": "a9f57bcde6a6b921889276b112c6fc7246caac5781443de3f3c004120924885c" }, "downloads": -1, "filename": "query-exporter-1.8.0.tar.gz", "has_sig": false, "md5_digest": "ce04595c9bb00b1c8145fdae61cd039b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34152, "upload_time": "2019-05-25T10:42:47", "url": "https://files.pythonhosted.org/packages/97/c2/45080922ed09f8367c651a0d5de1f09d350bbfcf10b98488264f6b8c80e3/query-exporter-1.8.0.tar.gz" } ], "1.8.1": [ { "comment_text": "", "digests": { "md5": "66b2667ad5651ce6b98470c5db4ce8b7", "sha256": "cb5252a4d882f5c3163fe9f6aa9be9f45af6e40053e7182939d23ae55f19066a" }, "downloads": -1, "filename": "query-exporter-1.8.1.tar.gz", "has_sig": false, "md5_digest": "66b2667ad5651ce6b98470c5db4ce8b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34257, "upload_time": "2019-07-14T10:06:05", "url": "https://files.pythonhosted.org/packages/4e/ec/474304c639c1b5ad7897e7901b91178c31a643d2faf18346057293b4718f/query-exporter-1.8.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "66b2667ad5651ce6b98470c5db4ce8b7", "sha256": "cb5252a4d882f5c3163fe9f6aa9be9f45af6e40053e7182939d23ae55f19066a" }, "downloads": -1, "filename": "query-exporter-1.8.1.tar.gz", "has_sig": false, "md5_digest": "66b2667ad5651ce6b98470c5db4ce8b7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34257, "upload_time": "2019-07-14T10:06:05", "url": "https://files.pythonhosted.org/packages/4e/ec/474304c639c1b5ad7897e7901b91178c31a643d2faf18346057293b4718f/query-exporter-1.8.1.tar.gz" } ] }