{ "info": { "author": "Weaveworks", "author_email": "help+grafanalib@weave.works", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: Apache Software License", "Programming Language :: Python :: 3.4", "Programming Language :: Python :: 3.5", "Topic :: System :: Monitoring" ], "description": "==========\ngrafanalib\n==========\n\n.. image:: https://circleci.com/gh/weaveworks/grafanalib.svg?style=shield\n :target: https://circleci.com/gh/weaveworks/grafanalib\n\nDo you like `Grafana `_ but wish you could version your\ndashboard configuration? Do you find yourself repeating common patterns? If\nso, grafanalib is for you.\n\ngrafanalib lets you generate Grafana dashboards from simple Python scripts.\n\nWriting dashboards\n==================\n\nThe following will configure a dashboard with a single row, with one QPS graph\nbroken down by status code and another latency graph showing median and 99th\npercentile latency:\n\n.. code-block:: python\n\n from grafanalib.core import *\n\n\n dashboard = Dashboard(\n title=\"Frontend Stats\",\n rows=[\n Row(panels=[\n Graph(\n title=\"Frontend QPS\",\n dataSource='My Prometheus',\n targets=[\n Target(\n expr='sum(irate(nginx_http_requests_total{job=\"default/frontend\",status=~\"1..\"}[1m]))',\n legendFormat=\"1xx\",\n refId='A',\n ),\n Target(\n expr='sum(irate(nginx_http_requests_total{job=\"default/frontend\",status=~\"2..\"}[1m]))',\n legendFormat=\"2xx\",\n refId='B',\n ),\n Target(\n expr='sum(irate(nginx_http_requests_total{job=\"default/frontend\",status=~\"3..\"}[1m]))',\n legendFormat=\"3xx\",\n refId='C',\n ),\n Target(\n expr='sum(irate(nginx_http_requests_total{job=\"default/frontend\",status=~\"4..\"}[1m]))',\n legendFormat=\"4xx\",\n refId='D',\n ),\n Target(\n expr='sum(irate(nginx_http_requests_total{job=\"default/frontend\",status=~\"5..\"}[1m]))',\n legendFormat=\"5xx\",\n refId='E',\n ),\n ],\n yAxes=[\n YAxis(format=OPS_FORMAT),\n YAxis(format=SHORT_FORMAT),\n ],\n alert=Alert(\n name=\"Too many 500s on Nginx\",\n message=\"More than 5 QPS of 500s on Nginx for 5 minutes\",\n alertConditions=[\n AlertCondition(\n Target(\n expr='sum(irate(nginx_http_requests_total{job=\"default/frontend\",status=~\"5..\"}[1m]))',\n legendFormat=\"5xx\",\n refId='A',\n ),\n timeRange=TimeRange(\"5m\", \"now\"),\n evaluator=GreaterThan(5),\n operator=OP_AND,\n reducerType=RTYPE_SUM,\n ),\n ],\n )\n ),\n Graph(\n title=\"Frontend latency\",\n dataSource='My Prometheus',\n targets=[\n Target(\n expr='histogram_quantile(0.5, sum(irate(nginx_http_request_duration_seconds_bucket{job=\"default/frontend\"}[1m])) by (le))',\n legendFormat=\"0.5 quantile\",\n refId='A',\n ),\n Target(\n expr='histogram_quantile(0.99, sum(irate(nginx_http_request_duration_seconds_bucket{job=\"default/frontend\"}[1m])) by (le))',\n legendFormat=\"0.99 quantile\",\n refId='B',\n ),\n ],\n yAxes=single_y_axis(format=SECONDS_FORMAT),\n ),\n ]),\n ],\n ).auto_panel_ids()\n\nThere is a fair bit of repetition here, but once you figure out what works for\nyour needs, you can factor that out.\nSee `our Weave-specific customizations `_ for inspiration.\n\nGenerating dashboards\n=====================\n\nIf you save the above as ``frontend.dashboard.py`` (the suffix must be\n``.dashboard.py``), you can then generate the JSON dashboard with:\n\n.. code-block:: console\n\n $ generate-dashboard -o frontend.json frontend.dashboard.py\n\nInstallation\n============\n\ngrafanalib is just a Python package, so:\n\n.. code-block:: console\n\n $ pip install grafanalib\n\nSupport\n=======\n\nThis library is in its very early stages. We'll probably make changes that\nbreak backwards compatibility, although we'll try hard not to.\n\ngrafanalib works with Python 2.7, 3.4, 3.5, and 3.6.\n\nDeveloping\n==========\nIf you're working on the project, and need to build from source, it's done as follows:\n\n.. code-block:: console\n\n $ virtualenv .env\n $ . ./.env/bin/activate\n $ pip install -e .\n\n`gfdatasource`\n==============\n\nThis module also provides a script and docker image which can configure grafana\nwith new sources, or enable app plugins.\n\nThe script answers the `--help` with full usage information, but basic\ninvocation looks like this:\n\n.. code-block:: console\n\n $ --grafana-url http://grafana. datasource --data-source-url http://datasource\n $ --grafana-url http://grafana. app --id my-plugin\n\nGetting Help\n============\n\nIf you have any questions about, feedback for or problems with ``grafanalib``:\n\n- Invite yourself to the `Weave community `_ Slack.\n- Ask a question on the `#general `_ Slack channel.\n- Send an email to `weave-users@weave.works `_.\n- `File an issue `_.\n\nYour feedback is always welcome!\n\n\n", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/weaveworks/grafanalib", "keywords": "", "license": "Apache", "maintainer": "", "maintainer_email": "", "name": "grafanalib", "package_url": "https://pypi.org/project/grafanalib/", "platform": "", "project_url": "https://pypi.org/project/grafanalib/", "project_urls": { "Homepage": "https://github.com/weaveworks/grafanalib" }, "release_url": "https://pypi.org/project/grafanalib/0.5.3/", "requires_dist": [ "attrs", "flake8; extra == 'dev'", "pytest; extra == 'dev'" ], "requires_python": "", "summary": "Library for building Grafana dashboards", "version": "0.5.3" }, "last_serial": 4082972, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "af8ff66fae68d00ff62209c8a78bfe7c", "sha256": "6e53e5fb673b221805dea93ac3e007a6690299b1c4eb4004d84b8c99340170d6" }, "downloads": -1, "filename": "grafanalib-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "af8ff66fae68d00ff62209c8a78bfe7c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7938, "upload_time": "2016-12-02T15:18:40", "url": "https://files.pythonhosted.org/packages/05/35/df514624dc8762c205063fa485ad63bd1142ca01aa1516214efdfbf9566e/grafanalib-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0068858d2f24531233c11f6155d282e4", "sha256": "dbec796fe5b4aef35e732b702218a90dacd9529067829c3184f5f0266e3a5ae5" }, "downloads": -1, "filename": "grafanalib-0.1.0.tar.gz", "has_sig": false, "md5_digest": "0068858d2f24531233c11f6155d282e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5823, "upload_time": "2016-12-02T15:18:42", "url": "https://files.pythonhosted.org/packages/67/01/44df8cfae78ca5a86794c47f867e7b65759a1a1ae9193119e38cc8d6d46c/grafanalib-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "fb7b81d624e0779bc1be890454e627ab", "sha256": "5afbc95f5f986703354fcbaf9d0c23718910457b9658ec718d4c99a09446545d" }, "downloads": -1, "filename": "grafanalib-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "fb7b81d624e0779bc1be890454e627ab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 10236, "upload_time": "2016-12-02T15:36:20", "url": "https://files.pythonhosted.org/packages/50/40/4e35600b03e2ef735e66ada4e10c8f91611d7306f89ab0e64daf0b5ac710/grafanalib-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "281eb343d66bdb70b10b306f35d985ed", "sha256": "38142fefaddb35a89fc19ee4944c4e93d0364dbd170b36a3e3af87a5394a0ccc" }, "downloads": -1, "filename": "grafanalib-0.1.1.tar.gz", "has_sig": false, "md5_digest": "281eb343d66bdb70b10b306f35d985ed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7351, "upload_time": "2016-12-02T15:36:22", "url": "https://files.pythonhosted.org/packages/0e/2e/d3d78142f77243e2c54c51f173729c7821818f669f08c1160983ec5bbed3/grafanalib-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "48bff961057e8626363f23d4654c8ec1", "sha256": "5e7e262f64d3415972214982560d75bdf09843fae15ed63fb358e3faffa6bfd6" }, "downloads": -1, "filename": "grafanalib-0.1.2-py2-none-any.whl", "has_sig": false, "md5_digest": "48bff961057e8626363f23d4654c8ec1", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 10516, "upload_time": "2017-01-03T11:58:11", "url": "https://files.pythonhosted.org/packages/dd/bc/0ab1d0b9fa7528ccfd366b1e7c777f56476a372de023490d4ac3307e2bb7/grafanalib-0.1.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "bbe86b7647cb93b2fb16fb90da6df495", "sha256": "38d88170712904365e48e01e97cfa81ced1f8163b5e481aa5df576e959d17e21" }, "downloads": -1, "filename": "grafanalib-0.1.2.tar.gz", "has_sig": false, "md5_digest": "bbe86b7647cb93b2fb16fb90da6df495", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7608, "upload_time": "2017-01-03T11:58:13", "url": "https://files.pythonhosted.org/packages/2d/88/618cad77c7ca6e5c19aff2fe7c576c57c1e39a63e5504f9749401c5aeab7/grafanalib-0.1.2.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "613ede1afe2436ae87c61f93cf7e5908", "sha256": "b76852ee452e86a2cb31e21e62a3e0d5a8030af9ec37c5f63042f4d5426424b5" }, "downloads": -1, "filename": "grafanalib-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "613ede1afe2436ae87c61f93cf7e5908", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 23642, "upload_time": "2017-07-27T14:05:38", "url": "https://files.pythonhosted.org/packages/f4/8d/9b1b23f4fbc3a120b83cad4f68f811072b80f61ed3f00181dfb9c3bc69cf/grafanalib-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4b8c260266093d90cdbe86791d0e287", "sha256": "6fec693b3291dfa53480d45d4719a18c1beb55b4071e86629eecec76160f299f" }, "downloads": -1, "filename": "grafanalib-0.3.0.tar.gz", "has_sig": false, "md5_digest": "e4b8c260266093d90cdbe86791d0e287", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18994, "upload_time": "2017-07-27T14:05:40", "url": "https://files.pythonhosted.org/packages/33/1a/98f6a01f5b5f8888a00ff7d7d1b661ec618393496ffafc9900d7974f63f0/grafanalib-0.3.0.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "8d5720661064979140165e1d822cd743", "sha256": "a7b97412d00c2125898bc1c15788fe8956aa6fbc332d914d299b684bdb9c3f52" }, "downloads": -1, "filename": "grafanalib-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "8d5720661064979140165e1d822cd743", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 24523, "upload_time": "2017-11-23T17:37:37", "url": "https://files.pythonhosted.org/packages/30/36/d1afa789538df89c0ef080e6015a622bd8872d2c9980b7b292935a40e2f7/grafanalib-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "074037f7d75222dc839f9a81aecc535d", "sha256": "121b1c0e9aa0dfa33577e42731dc3f18482a3e51b633721be6b36350cb6d9600" }, "downloads": -1, "filename": "grafanalib-0.4.0.tar.gz", "has_sig": false, "md5_digest": "074037f7d75222dc839f9a81aecc535d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19957, "upload_time": "2017-11-23T17:37:38", "url": "https://files.pythonhosted.org/packages/a3/8e/5d6af0c26de1e2ab534784d12a6d31c163505d9310cd520748dfcd950990/grafanalib-0.4.0.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "c166a0fb394defbb4e53078ae1cdc2a6", "sha256": "510fd2caf6ef795efb43500825978cbfc0d5b02503229705128f3519743d1281" }, "downloads": -1, "filename": "grafanalib-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "c166a0fb394defbb4e53078ae1cdc2a6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28173, "upload_time": "2018-02-26T19:43:58", "url": "https://files.pythonhosted.org/packages/90/7b/cbddab0f4d53b7835194e66eaac350fd59c9db9ec13ef2babd582ff14df4/grafanalib-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "104dc785a7ec3e6756b16868312ee698", "sha256": "1e20d56372aa0498fc40bba7421b7cc1b3a82755c3cf3f61e18b721e74585228" }, "downloads": -1, "filename": "grafanalib-0.5.0.tar.gz", "has_sig": false, "md5_digest": "104dc785a7ec3e6756b16868312ee698", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23860, "upload_time": "2018-02-26T19:44:00", "url": "https://files.pythonhosted.org/packages/0c/dd/0b2d28622a161270efb27c0e664730e9a2f21ef0a595c2051b4b75c22e2f/grafanalib-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "b26267c6f659244ac68ab0f861769c05", "sha256": "6c427c8a8bebaf426ec2bd2483e6a1e45a906f695cbc0ef797b0eb1658f6a9a2" }, "downloads": -1, "filename": "grafanalib-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "b26267c6f659244ac68ab0f861769c05", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 28164, "upload_time": "2018-02-27T13:47:59", "url": "https://files.pythonhosted.org/packages/76/80/18e0c3201572671cf78516172450cc253c5fa9090ced1f4872daae4220be/grafanalib-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c51ac78318bf3228a3ec2710218acf48", "sha256": "4112e41a8d50839c747beb361eb1699fa70fb2cece1875f19163eef7cacd6c24" }, "downloads": -1, "filename": "grafanalib-0.5.1.tar.gz", "has_sig": false, "md5_digest": "c51ac78318bf3228a3ec2710218acf48", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23856, "upload_time": "2018-02-27T13:48:00", "url": "https://files.pythonhosted.org/packages/4d/76/92617453a8506b50e675276a8796c16c546016750c830a7e5b89d634bf5f/grafanalib-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "d9c25e9de6897fac887df731b1f5dec4", "sha256": "01ce495e3d2f082a14e42c1f2d587b703e2fd0b32d179c482489ebe574a28b6d" }, "downloads": -1, "filename": "grafanalib-0.5.2-py2-none-any.whl", "has_sig": false, "md5_digest": "d9c25e9de6897fac887df731b1f5dec4", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26608, "upload_time": "2018-07-19T16:26:37", "url": "https://files.pythonhosted.org/packages/67/70/6cbaff28c0d485cf5e659bb3877ea6a3235867747ff69590e453a2bc530b/grafanalib-0.5.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "245b91455fee272ce8bb31381521af14", "sha256": "f8f8e22a632c58266d524b513d7dcacb6ce97d740816243a05e0db47b74e0ce0" }, "downloads": -1, "filename": "grafanalib-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "245b91455fee272ce8bb31381521af14", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26609, "upload_time": "2018-07-19T16:26:39", "url": "https://files.pythonhosted.org/packages/eb/be/e4b9c501574db240f29f79a3f2b51e471dd2001e8e4c27c245d30efa38ca/grafanalib-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1ea7f862d4be37ffdea928cc03416294", "sha256": "d9ad48a9d555d3d70b47d55ea1c46fbfeaa2fd58a3241341343a4fcbd727e1a1" }, "downloads": -1, "filename": "grafanalib-0.5.2.tar.gz", "has_sig": false, "md5_digest": "1ea7f862d4be37ffdea928cc03416294", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25236, "upload_time": "2018-07-19T16:26:40", "url": "https://files.pythonhosted.org/packages/25/52/4c20c918678d4e22bd394b042290384e9cdce6c12454b5c4b98e14b23240/grafanalib-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "6280cb78fa58a8e09ebc957cc4065fdf", "sha256": "885a9c3ca9bd8cd2390a1c3cd4a2bd500fd19e1d2521a2b972503b509547d853" }, "downloads": -1, "filename": "grafanalib-0.5.3-py2-none-any.whl", "has_sig": false, "md5_digest": "6280cb78fa58a8e09ebc957cc4065fdf", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26612, "upload_time": "2018-07-19T16:39:50", "url": "https://files.pythonhosted.org/packages/da/a8/ae814759bc99786f0ed33fae0accc177a513519dcdc0afdd931a89416401/grafanalib-0.5.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49154bacdaa9ef1fe6410c2d5c4ad60d", "sha256": "9d1372daa83bc7148d995059561bec24efaae7b628449b0a440e7e9f49b42521" }, "downloads": -1, "filename": "grafanalib-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "49154bacdaa9ef1fe6410c2d5c4ad60d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26612, "upload_time": "2018-07-19T16:39:51", "url": "https://files.pythonhosted.org/packages/dc/b2/690724e7e526f775c5f53d4c2d697293abf0e7455bed7d758282d6b40f09/grafanalib-0.5.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "137a2ce7a4c19fea4c16aec8f3238f66", "sha256": "aba4f87028edd826d6444967fdcfa7d1307e3e564bfe0cadea813a2595088e5d" }, "downloads": -1, "filename": "grafanalib-0.5.3.tar.gz", "has_sig": false, "md5_digest": "137a2ce7a4c19fea4c16aec8f3238f66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25257, "upload_time": "2018-07-19T16:39:52", "url": "https://files.pythonhosted.org/packages/52/98/c47b4438b83e4bb61900b3d7157f78364cfd2618022f1342b9d167b96aa2/grafanalib-0.5.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "6280cb78fa58a8e09ebc957cc4065fdf", "sha256": "885a9c3ca9bd8cd2390a1c3cd4a2bd500fd19e1d2521a2b972503b509547d853" }, "downloads": -1, "filename": "grafanalib-0.5.3-py2-none-any.whl", "has_sig": false, "md5_digest": "6280cb78fa58a8e09ebc957cc4065fdf", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 26612, "upload_time": "2018-07-19T16:39:50", "url": "https://files.pythonhosted.org/packages/da/a8/ae814759bc99786f0ed33fae0accc177a513519dcdc0afdd931a89416401/grafanalib-0.5.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "49154bacdaa9ef1fe6410c2d5c4ad60d", "sha256": "9d1372daa83bc7148d995059561bec24efaae7b628449b0a440e7e9f49b42521" }, "downloads": -1, "filename": "grafanalib-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "49154bacdaa9ef1fe6410c2d5c4ad60d", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 26612, "upload_time": "2018-07-19T16:39:51", "url": "https://files.pythonhosted.org/packages/dc/b2/690724e7e526f775c5f53d4c2d697293abf0e7455bed7d758282d6b40f09/grafanalib-0.5.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "137a2ce7a4c19fea4c16aec8f3238f66", "sha256": "aba4f87028edd826d6444967fdcfa7d1307e3e564bfe0cadea813a2595088e5d" }, "downloads": -1, "filename": "grafanalib-0.5.3.tar.gz", "has_sig": false, "md5_digest": "137a2ce7a4c19fea4c16aec8f3238f66", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25257, "upload_time": "2018-07-19T16:39:52", "url": "https://files.pythonhosted.org/packages/52/98/c47b4438b83e4bb61900b3d7157f78364cfd2618022f1342b9d167b96aa2/grafanalib-0.5.3.tar.gz" } ] }