{ "info": { "author": "Kevin ZHANG Qing", "author_email": "ezhqing@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6" ], "description": "# sanic-zipkin\nsanic plugin/extension to integrate aiozipkin (opentracing reporting)\n\n## Features\n* adding \"Request span\" by default\n* if Request is from another micro-service endpoint, span will be attached (Inject/Extract) to that endpoint\n* use \"logger\" decorator to create span for \"methods\" calls\n* use \"sz_rpc\" method to create sub-span for RPC calls, attaching to parent span\n\n## Install and Initialize\n```\npip install sanic-zipkin\n# app.py\nfrom sanic_zipkin import SanicZipkin, logger, sz_rpc\nsz = SanicZipkin(app)\n```\n\n## Examples\n1. run `examples/servic_a.py` and `examples/service_b.py`\n2. use Docker to run zipkin or jaeger:\n`docker run -d -p9411:9411 openzipkin/zipkin:latest`\nor\n`docker run -d -e COLLECTOR_ZIPKIN_HTTP_PORT=9411 -p5775:5775/udp -p6831:6831/udp -p6832:6832/udp -p5778:5778 -p16686:16686 -p14268:14268 -p9411:9411 jaegertracing/all-in-one`\n3. access the endpoint:\n- `curl localhost:8000/` to see plugin's basic usage\n\n```\nfrom sanic_zipkin import SanicZipkin, logger, sz_rpc\n\napp = Sanic(__name__)\n\n# initilize plugin, default parameters:\n# zipkin_address = 'http://127.0.0.1:9411/api/v2/spans'\n# service = __name__\n# host = '127.0.0.1'\n# port = 8000\nsz = SanicZipkin(app, service='service-a')\n\n\n@app.route(\"/\")\nasync def index(request):\n return response.json({\"hello\": \"from index\"})\n```\nThis \"/\" endpoint will add trace span to zipkin automatically\n\n\n- `curl localhost:8000/2` to see how to decorate methods and chain-calls\n\n```\n@logger()\nasync def db_access(context, data):\n await asyncio.sleep(0.1)\n print(f'db_access done. data: {data}')\n return\n\n@sz.route(\"/2\")\nasync def method_call(request, context):\n await db_access(context, 'this is method_call data')\n return response.json({\"hello\": 'method_call'})\n```\nUse \"@logger\" decorator to generate span for methods. Note: in this case, you need to use \"@sz.route\", and pass `context` parameter to method calls.\n\n- `curl localhost:8000/3` to see how RPC calls working, both GET/POST is supported\n\n```\n@logger()\nasync def decorate_demo(context, data):\n await db_access(context, data)\n data = {'payload': 'rpc call data of decorate_demo'}\n rsp = await sz_rpc(context, backend_service2, data, method='GET')\n print(rsp.status, await rsp.text())\n return\n\n@sz.route(\"/3\")\nasync def rpc_call(request, context):\n await decorate_demo(context, 'this is index4 data')\n data = {'payload': 'rpc call data of rpc_call'}\n rsp = await sz_rpc(context, backend_service1, data) # default method='POST'\n print(rsp.status, await rsp.text())\n return response.json({\"hello\": 'rpc_call'})\n```\nmethod `sz_rpc` just wrapper span injection to RPC POST/GET calls. In peer server, span-context will be automatically extracted and generate a chain-view in zipkin.\n\n4. check the tracing output in Zipkin/Jaeger UI\n\nCHANGES\n=======\n\n\n0.1.2 (2019-01-31)\n------------------\nbasic features:\n\n* Initial release\n* adding \"Request span\" by default\n* if Request is from another micro-service endpoint, span will be attached to that endpoint\n* use \"logger\" decorator to create span for \"methods\" calls\n* use \"sz_rpc\" method to create sub-span for RPC calls, attaching to parent span", "description_content_type": "", "docs_url": null, "download_url": "https://pypi.python.org/pypi/sanic-zipkin", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kevinqqnj/sanic-zipkin", "keywords": "sanic", "license": "LICENSE.txt", "maintainer": "", "maintainer_email": "", "name": "sanic-zipkin", "package_url": "https://pypi.org/project/sanic-zipkin/", "platform": "POSIX", "project_url": "https://pypi.org/project/sanic-zipkin/", "project_urls": { "Download": "https://pypi.python.org/pypi/sanic-zipkin", "Homepage": "https://github.com/kevinqqnj/sanic-zipkin" }, "release_url": "https://pypi.org/project/sanic-zipkin/0.1.2/", "requires_dist": null, "requires_python": "", "summary": "Sanic plugin to use Distributed tracing instrumentation for asyncio application with aiozipkin", "version": "0.1.2" }, "last_serial": 4763693, "releases": { "0.1.2": [ { "comment_text": "", "digests": { "md5": "0470a24b80371320160e092a51b7976e", "sha256": "94ce63c977a123b43958dfec99dfee7cd105f1db8a5f935f111108fcbe2abfdc" }, "downloads": -1, "filename": "sanic-zipkin-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0470a24b80371320160e092a51b7976e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6239, "upload_time": "2019-01-31T13:26:43", "url": "https://files.pythonhosted.org/packages/5f/6d/404bb0fc40a764e4e3cf08c8b5d5fcab4a203218825eb0c61f14e5673fc3/sanic-zipkin-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0470a24b80371320160e092a51b7976e", "sha256": "94ce63c977a123b43958dfec99dfee7cd105f1db8a5f935f111108fcbe2abfdc" }, "downloads": -1, "filename": "sanic-zipkin-0.1.2.tar.gz", "has_sig": false, "md5_digest": "0470a24b80371320160e092a51b7976e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6239, "upload_time": "2019-01-31T13:26:43", "url": "https://files.pythonhosted.org/packages/5f/6d/404bb0fc40a764e4e3cf08c8b5d5fcab4a203218825eb0c61f14e5673fc3/sanic-zipkin-0.1.2.tar.gz" } ] }