{ "info": { "author": "Vitaly R. Samigullin", "author_email": "vrs@pilosus.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Environment :: MacOS X", "Framework :: Flask", "Intended Audience :: Developers", "Intended Audience :: Information Technology", "Intended Audience :: System Administrators", "License :: OSI Approved :: MIT License", "Operating System :: POSIX :: Linux", "Operating System :: Unix", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3 :: Only", "Topic :: Internet", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "## Flask Prometheus Metrics ##\n\n[![Build Status](https://travis-ci.org/pilosus/flask_prometheus_metrics.svg?branch=master)](https://travis-ci.org/pilosus/flask_prometheus_metrics)\n[![Test Coverage](https://api.codeclimate.com/v1/badges/6b414e49d4f9302fe460/test_coverage)](https://codeclimate.com/github/pilosus/flask_prometheus_metrics/test_coverage)\n[![Maintainability](https://api.codeclimate.com/v1/badges/6b414e49d4f9302fe460/maintainability)](https://codeclimate.com/github/pilosus/flask_prometheus_metrics/maintainability)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/python/black)\n\nPrometheus metrics exporter for Flask web applications.\n\n``flask_prometheus_metrics`` uses official [Prometheus Python Client](https://github.com/prometheus/client_python)\nproviding basic metrics about process resource usage, app's requests metrics and information.\n\n\n## Installation ##\n\n```bash\npip install -U flask_prometheus_metrics\n```\n\nYou will need ``Flask`` to run examples below:\n\n```bash\npip install -U 'flask_prometheus_metrics[flask]'\n```\n\n## Usage ##\n\nRun the following minimal example in Python shell:\n\n```python\nfrom flask import Flask\nfrom prometheus_client import make_wsgi_app\nfrom werkzeug.middleware.dispatcher import DispatcherMiddleware\nfrom werkzeug.serving import run_simple\nfrom flask_prometheus_metrics import register_metrics\n\napp = Flask(__name__)\n\n@app.route(\"/\")\ndef index():\n return \"Test\"\n\n# provide app's version and deploy environment/config name to set a gauge metric\nregister_metrics(app, app_version=\"v0.1.2\", app_config=\"staging\")\n\n# Plug metrics WSGI app to your main app with dispatcher\ndispatcher = DispatcherMiddleware(app.wsgi_app, {\"/metrics\": make_wsgi_app()})\n\nrun_simple(hostname=\"localhost\", port=5000, application=dispatcher)\n```\n\nThen go over ``http://localhost:5000/``, refresh page a few times and check your\napp's metrics at ``http://localhost:5000/metrics``.\n\nSee also [example.py](https://github.com/pilosus/flask_prometheus_metrics/blob/master/flask_prometheus_metrics/example.py)\nfor more elaborate example of library usage in real Flask applications.\n\n## Metrics ##\n\n``flask_prometheus_metrics`` exposes the following application metrics:\n\n- ``app_request_latency_seconds`` (histogram) - Application request latency\n- ``app_request_count_total`` (counter) - application request count\n- ``app_version_info`` (gauge) - application version\n\nLibrary also provides some metrics about a Python interpreter used and process\nresource usage:\n\n- ``python_gc_objects_collected_total`` (counter) - objects collected during gc\n- ``python_gc_objects_uncollectable_total`` (counter) - uncollectable object found during GC\n- ``python_gc_collections_total`` (counter) - number of times this generation was collected\n- ``python_info`` (gauge) - Python platform information\n- ``process_virtual_memory_bytes`` (gauge) - virtual memory size in bytes\n- ``process_resident_memory_bytes`` (gauge) - resident memory size in bytes\n- ``process_start_time_seconds`` (gauge) - start time of the process since unix epoch in seconds\n- ``process_cpu_seconds_total`` (counter) - total user and system CPU time spent in seconds\n- ``process_open_fds`` (gauge) - number of open file descriptors\n- ``process_max_fds`` (gauge) - maximum number of open file descriptors\n\n## Grafana dashboard ##\n\nThe metrics exported by ``flask_prometheus_metrics`` can be scraped by\n[Prometheus](https://prometheus.io/) monitoring system and then visualized in\n[Grafana](https://grafana.com/).\n\nYou can download Grafana dashboard crafted specifically for the ``flask_prometheus_metrics``\ndefault metrics [here](https://github.com/pilosus/prometheus-client-python-app-grafana-dashboard/).\n\n[![Grafana visualisation](https://raw.githubusercontent.com/pilosus/prometheus-client-python-app-grafana-dashboard/master/docs/flask-app-2.png)](https://github.com/pilosus/prometheus-client-python-app-grafana-dashboard/)\n\n\n## Testing ##\n\nWhen testing Flask application with ``DispatcherMiddleware`` (see Usage example above)\nyou may want to use a [little hack](https://github.com/pilosus/flask_prometheus_metrics/blob/master/tests/conftest.py#L22)\nin order to make Flask's ``test_client()`` work properly.\n\n\n## History ##\n\n### v1.0.0 (2019-06-06) ###\n* Library is ready for production\n* Minor setup.py fixes (#12)\n\n\n### v0.7.0 (2019-06-06) ###\n* README.md adjusted to work both on GitHub and PyPi (#11)\n\n\n### v0.6.2 (2019-06-06) ###\n* Codeclimate integration added\n\n\n### v0.6.1 (2019-06-06) ###\n* Travis CI configuration fixed\n\n\n### v0.6.0 (2019-06-06) ###\n* README and CHANGELOG as long description added\n\n\n### v0.5.0 (2019-06-06) ###\n* CHANGELOG.md added\n\n\n### v0.4.0 (2019-06-06) ###\n* Import simplified for metrics registration function\n\n\n### v0.3.1 (2019-06-05) ###\n* Minor CI config fix\n\n\n### v0.3.0 (2019-06-05) ###\n* Dependencies versions and safety checks added\n\n\n### v0.2.1 (2019-06-01) ###\n* Update installation example in README\n\n\n### v0.2.0 (2019-06-01) ###\n* README added, some code refactoring\n\n\n### v0.1.2 (2019-06-01) ###\n* Version bumped\n\n\n### v0.1.1 (2019-06-01) ###\n* Package versioning fix\n\n\n### v0.1.0 (2019-06-01) ###\n* MVP\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/pilosus/flask_prometheus_metrics/", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "flask-prometheus-metrics", "package_url": "https://pypi.org/project/flask-prometheus-metrics/", "platform": "", "project_url": "https://pypi.org/project/flask-prometheus-metrics/", "project_urls": { "Homepage": "https://github.com/pilosus/flask_prometheus_metrics/" }, "release_url": "https://pypi.org/project/flask-prometheus-metrics/1.0.0/", "requires_dist": [ "prometheus-client (>=0.6.0)", "Flask (>=1.0.0) ; extra == 'flask'" ], "requires_python": ">=3.6", "summary": "Prometheus Metrics for Flask Web App", "version": "1.0.0" }, "last_serial": 5366952, "releases": { "0.2.0": [ { "comment_text": "", "digests": { "md5": "9c3cd0dcc80d5eac4f3f3ecd3dc14168", "sha256": "9357aa8d062a82bce5abbbdc80adefece07397feb05af00f6a7566a3ecf851db" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "9c3cd0dcc80d5eac4f3f3ecd3dc14168", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4850, "upload_time": "2019-06-01T17:21:59", "url": "https://files.pythonhosted.org/packages/66/9c/deab985f5063198bc30d4398e8a2360e5ba9efc864a2b5bb2608cd00462e/flask_prometheus_metrics-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c574911028518b8e7d97a3cbf26bdc35", "sha256": "64b2c7d9db91af052982006806c8cb0b6b7aa55e362b14595b4a134d533e8734" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c574911028518b8e7d97a3cbf26bdc35", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5000, "upload_time": "2019-06-01T17:22:02", "url": "https://files.pythonhosted.org/packages/bf/b9/7d538d68f53d2a93080d4bf71f4ed1c724b956b737bdb6c3ab5f7a9fddca/flask_prometheus_metrics-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "283a41c570797561b1fef026061c70e7", "sha256": "d383086fa6bcf975fde968e8d408f00ced72a5e3141393595c8faecbcfd789f1" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "283a41c570797561b1fef026061c70e7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4851, "upload_time": "2019-06-01T17:28:12", "url": "https://files.pythonhosted.org/packages/17/8e/d9f661833f65418a6d201622872f740e20f7321e8777b09e5733e1445771/flask_prometheus_metrics-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4e61addb5b9bbe412613a7a181b88e8", "sha256": "ec70f45b35b55c125a0d5299d55c95d1826452bec9a946a94f59618ad35ffa57" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.2.1.tar.gz", "has_sig": false, "md5_digest": "e4e61addb5b9bbe412613a7a181b88e8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5010, "upload_time": "2019-06-01T17:28:13", "url": "https://files.pythonhosted.org/packages/51/de/96eb0f829177ebe489766c43c90fc5293cb8c90bf703fbb3724cf566b760/flask_prometheus_metrics-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "aac5416c0acc1f0e31c19f8502503f65", "sha256": "3536a2e8eba674a92bbc2de67279ee089a05bea137fb68b140379f6ffd0f2de8" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "aac5416c0acc1f0e31c19f8502503f65", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4851, "upload_time": "2019-06-05T17:49:10", "url": "https://files.pythonhosted.org/packages/d6/6b/307c74b8b2792aa7a91b8a2fc9f2b85543804de480db54c577832e819129/flask_prometheus_metrics-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ddc98b31a6a24d12d6f7ed4bc40e1ad", "sha256": "1603ea886eb0edfb2719aca1814b1715f867e888a3c9039ae200cfd9c7a00b22" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.3.0.tar.gz", "has_sig": false, "md5_digest": "8ddc98b31a6a24d12d6f7ed4bc40e1ad", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5014, "upload_time": "2019-06-05T17:49:12", "url": "https://files.pythonhosted.org/packages/55/c9/2479a0d892c9b73d78dcc64e8a801f9ba53ac6c2987595676feb4d4c7631/flask_prometheus_metrics-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "3d2b617853ebad51308a822b1a65a14b", "sha256": "39bcad55858d0ad0c6f65cdfc99382916118beba1d475eb235a6209c8ee3de35" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3d2b617853ebad51308a822b1a65a14b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4850, "upload_time": "2019-06-05T18:07:42", "url": "https://files.pythonhosted.org/packages/a6/e6/10ae4ef4a7e64a347a3b9d59cba5d0506e4bfa48aa29521bebea4225ebec/flask_prometheus_metrics-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "282d549822843fe05ed345e28a24e41c", "sha256": "6a50de94be136643b145b69d19937aa58c25cdfb8db1cb24870c8debc4f88738" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.3.1.tar.gz", "has_sig": false, "md5_digest": "282d549822843fe05ed345e28a24e41c", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5022, "upload_time": "2019-06-05T18:07:43", "url": "https://files.pythonhosted.org/packages/f2/c3/39576958527d049142a6f95c2c3a43913e229ba525b878ba198bf85ef536/flask_prometheus_metrics-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "d0830662770ba31b86fe07edad561419", "sha256": "180fd92e0ed1fbddaff36b1b12ff685a6444012744530d5ab7d33abc029fecd4" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "d0830662770ba31b86fe07edad561419", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 4391, "upload_time": "2019-06-05T21:16:58", "url": "https://files.pythonhosted.org/packages/fd/63/85f0f5e36ecf0824663c1ccf1da8c92656cd0d5aca86195aa96a10c26029/flask_prometheus_metrics-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "93a6e4f96fa08e578b484b1b9e24e24f", "sha256": "aec831297f180921a249b2426923c63b8eecb8c33bdbf621876e9cbac354e78e" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.4.0.tar.gz", "has_sig": false, "md5_digest": "93a6e4f96fa08e578b484b1b9e24e24f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 4942, "upload_time": "2019-06-05T21:17:00", "url": "https://files.pythonhosted.org/packages/46/41/2e8423f2d36891becc60f1040831636522ea38116fef8afaff51e80e730c/flask_prometheus_metrics-0.4.0.tar.gz" } ], "0.6.0": [ { "comment_text": "", "digests": { "md5": "4453a40f712e9986bd1c60469bd7ae29", "sha256": "a0c538bdccf7f04592479ff752e7d60e670651073975cefab94d840ee2591aea" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.6.0-py3-none-any.whl", "has_sig": false, "md5_digest": "4453a40f712e9986bd1c60469bd7ae29", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6043, "upload_time": "2019-06-05T21:45:46", "url": "https://files.pythonhosted.org/packages/d2/2a/d4fabe044cd1556d1872d5fcabae8acba5bc8f4293ebff68f63555ca0365/flask_prometheus_metrics-0.6.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "768484605a7def39b089b91440a636a6", "sha256": "f292c2d7d6fc721639252eb8a66cacfbae63420f5f6f668fe7f10837d6e474ef" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.6.0.tar.gz", "has_sig": false, "md5_digest": "768484605a7def39b089b91440a636a6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5689, "upload_time": "2019-06-05T21:45:48", "url": "https://files.pythonhosted.org/packages/be/96/2891f73536a43b2661770c845908d98fd1a80566518efa345dd5be068ed9/flask_prometheus_metrics-0.6.0.tar.gz" } ], "0.6.1": [ { "comment_text": "", "digests": { "md5": "b0efe8698c3812a304a36779ddc8994a", "sha256": "ab05482e8ce35907b0d7baec745201f643223ee7d3cf8a06d353a9d905bbb33b" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.6.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b0efe8698c3812a304a36779ddc8994a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6042, "upload_time": "2019-06-06T11:03:58", "url": "https://files.pythonhosted.org/packages/32/6e/90c971fa5e25745ab3dc3061d6b9ea098d03b2a042c67695dc2029f4facf/flask_prometheus_metrics-0.6.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "5a153d77c0b17df4b243f7788bb3763f", "sha256": "7b86977d752351c14b1d19c7def8f6d30e1731605e19840349bdeabf707b8007" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.6.1.tar.gz", "has_sig": false, "md5_digest": "5a153d77c0b17df4b243f7788bb3763f", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5588, "upload_time": "2019-06-06T11:04:00", "url": "https://files.pythonhosted.org/packages/6d/1c/0860d789d9ddbe751d1cde73224db3f3b93df5369399db1a737d6f64b6b8/flask_prometheus_metrics-0.6.1.tar.gz" } ], "0.6.2": [ { "comment_text": "", "digests": { "md5": "fae51f981b034d75621a821411e88efe", "sha256": "34a9a814566405e38cf1c8e08f99e343418eeb25b8ce7d2ef6e6eb09da47694c" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.6.2-py3-none-any.whl", "has_sig": false, "md5_digest": "fae51f981b034d75621a821411e88efe", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6126, "upload_time": "2019-06-06T12:07:52", "url": "https://files.pythonhosted.org/packages/21/35/4f7503f86ee4a2e89bf63f9fbea95039cd19c998c1f8d37bae0f8155c39f/flask_prometheus_metrics-0.6.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "94857ebb03a5f0c96dd2ba6e7cd83896", "sha256": "715c26a3d859f4aca919942db58aed8d7188dc18c000ff55be7b4f892b2156a8" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.6.2.tar.gz", "has_sig": false, "md5_digest": "94857ebb03a5f0c96dd2ba6e7cd83896", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5730, "upload_time": "2019-06-06T12:07:53", "url": "https://files.pythonhosted.org/packages/b2/9f/934925fb2c9aee5c06351a0ff17e7935a1e7aed5ec1ffaeaa68d2e6db9f8/flask_prometheus_metrics-0.6.2.tar.gz" } ], "0.7.0": [ { "comment_text": "", "digests": { "md5": "11f92dd12ad84f17c4895c441c329df8", "sha256": "95817658a7edb133fbb4ec0b915656320669c526fdf2f6c9baf9fc6402c8cac3" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.7.0-py3-none-any.whl", "has_sig": false, "md5_digest": "11f92dd12ad84f17c4895c441c329df8", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6175, "upload_time": "2019-06-06T12:29:05", "url": "https://files.pythonhosted.org/packages/b7/07/e8989606352d3b430a3408792719e6714c9d8388c0e9ecaabe20273f0273/flask_prometheus_metrics-0.7.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d2f9622f1b11f0aa7ed08d16d8b788bf", "sha256": "2dafff8824225b216031346c22af0aa28002675464bde3dc45bcd89cfb9fb842" }, "downloads": -1, "filename": "flask_prometheus_metrics-0.7.0.tar.gz", "has_sig": false, "md5_digest": "d2f9622f1b11f0aa7ed08d16d8b788bf", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5777, "upload_time": "2019-06-06T12:29:07", "url": "https://files.pythonhosted.org/packages/8e/35/901496b2df72daad7b6d3a53ba5b0bfdd223b3bddc7ebbef597d54523fa3/flask_prometheus_metrics-0.7.0.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "c5e1ef5be75d42d812f816b15a77c9fd", "sha256": "f28e8d3a9d0b7ee4761f1490c9653a95d83e11136ba6ecd010697aa9b3b83724" }, "downloads": -1, "filename": "flask_prometheus_metrics-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c5e1ef5be75d42d812f816b15a77c9fd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6219, "upload_time": "2019-06-06T12:42:42", "url": "https://files.pythonhosted.org/packages/e6/64/09958116bdc267a1ee8f442e135166990d54403c8fdd4e8b3d275d7f7433/flask_prometheus_metrics-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f358667a31cffbae283616f2a8a133d6", "sha256": "a2f79c40b53a04e861c4192514c043ff7d807e2fb0131b3eee29a6984206b22e" }, "downloads": -1, "filename": "flask_prometheus_metrics-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f358667a31cffbae283616f2a8a133d6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5815, "upload_time": "2019-06-06T12:42:43", "url": "https://files.pythonhosted.org/packages/74/a2/83a59fb33c2024dff49d6a493cced94c34d57fbfe6ee1fa5e90faf86df90/flask_prometheus_metrics-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c5e1ef5be75d42d812f816b15a77c9fd", "sha256": "f28e8d3a9d0b7ee4761f1490c9653a95d83e11136ba6ecd010697aa9b3b83724" }, "downloads": -1, "filename": "flask_prometheus_metrics-1.0.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c5e1ef5be75d42d812f816b15a77c9fd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3.6", "size": 6219, "upload_time": "2019-06-06T12:42:42", "url": "https://files.pythonhosted.org/packages/e6/64/09958116bdc267a1ee8f442e135166990d54403c8fdd4e8b3d275d7f7433/flask_prometheus_metrics-1.0.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f358667a31cffbae283616f2a8a133d6", "sha256": "a2f79c40b53a04e861c4192514c043ff7d807e2fb0131b3eee29a6984206b22e" }, "downloads": -1, "filename": "flask_prometheus_metrics-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f358667a31cffbae283616f2a8a133d6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 5815, "upload_time": "2019-06-06T12:42:43", "url": "https://files.pythonhosted.org/packages/74/a2/83a59fb33c2024dff49d6a493cced94c34d57fbfe6ee1fa5e90faf86df90/flask_prometheus_metrics-1.0.0.tar.gz" } ] }