{ "info": { "author": "Michal Kuffa", "author_email": "michal@bynder.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Software Development :: Debuggers" ], "description": "\n===============\nddtrace-graphql\n===============\n\n\n.. image:: https://travis-ci.org/beezz/ddtrace-graphql.svg?branch=master\n :target: https://travis-ci.org/beezz/ddtrace-graphql\n\n.. image:: https://codecov.io/gh/beezz/ddtrace-graphql/branch/master/graph/badge.svg\n :target: https://codecov.io/gh/beezz/ddtrace-graphql\n\n.. image:: https://pyup.io/repos/github/beezz/ddtrace-graphql/shield.svg\n :target: https://pyup.io/repos/github/beezz/ddtrace-graphql/\n\n\n.. image:: https://badge.fury.io/py/ddtrace-graphql.svg\n :target: https://badge.fury.io/py/ddtrace-graphql\n\n\nPython library to trace graphql calls with Datadog.\n\n* `graphql-core `_\n\n* `Datadog APM (Tracing) `_\n\n* `Datadog Trace Client `_\n\n\nCompatibility\n-------------\n\n``ddtrace-graphql`` is tested with:\n\n* Python versions: 3.5, 3.6, nightly\n* graphql-core: 2.0, 1.1.0, latest\n* ddtrace: 0.11.1, 0.10.1, latest\n\n*Screenshots for pyramid app serving GraphQL with tracing enabled:*\n\n.. figure:: screenshots/service.png\n :scale: 80%\n\n GraphQL service detail.\n\n\n.. figure:: screenshots/query.png\n :scale: 80%\n\n GraphQL query detail.\n\n\n\nInstallation\n============\n\nUsing pip\n---------\n\n.. code-block:: bash\n\n $ pip install ddtrace-graphql\n\n\nFrom source\n------------\n\n.. code-block:: bash\n\n $ git clone https://github.com/beezz/ddtrace-graphql.git\n $ cd ddtrace-graphql && python setup.py install\n\n\nUsage\n=====\n\nTo trace all GraphQL requests patch the library. Put this snippet to your\napplication main entry point.\n\n\n.. code-block:: python\n\n __import__('ddtrace_graphql').patch()\n\n # OR\n\n from ddtrace_graphql import patch\n patch()\n\n\nCheck out the `datadog trace client `_\nfor all supported libraries and frameworks.\n\n.. note:: For the patching to work properly, ``patch`` needs to be called\n before any other imports of the ``graphql`` function.\n\n.. code-block:: python\n\n # app/__init__.py\n __import__('ddtrace_graphql').patch()\n\n # from that point all calls to graphql are traced\n from graphql import graphql\n result = graphql(schema, query)\n\n\nTrace only certain calls with ``traced_graphql`` function\n\n.. code-block:: python\n\n from ddtrace_graphql import traced_graphql\n traced_graphql(schema, query)\n\n\nConfiguration\n=============\n\nEnvironment variables\n=====================\n\n:DDTRACE_GRAPHQL_SERVICE: Define service name under which traces are shown in Datadog. Default value is ``graphql``\n\n\n.. code-block:: bash\n\n $ export DDTRACE_GRAPHQL_SERVICE=foobar.graphql\n\n\nspan_kwargs\n===========\n\nDefault arguments passed to the tracing context manager can be updated using\n``span_kwargs`` argument of ``ddtrace_graphql.patch`` or\n``ddtrace_graphql.traced_graphql`` functions.\n\nDefault values:\n\n:name: Wrapped resource name. Default ``graphql.graphql``.\n:span_type: Span type. Default ``graphql``.\n:service: Service name. Defaults to ``DDTRACE_GRAPHQL_SERVICE`` environment variable if present, else ``graphql``.\n:resource: Processed resource. Defaults to query / mutation signature.\n\nFor more information visit `ddtrace.Tracer.trace `_ documentation.\n\n\n.. code-block:: python\n\n from ddtrace_graphql import patch\n patch(span_kwargs=dict(service='foo.graphql'))\n\n\n.. code-block:: python\n\n from ddtrace_graphql import traced_graphql\n traced_graphql(schema, query, span_kwargs=dict(resource='bar.resource'))\n\n\n\nspan_callback\n=============\n\nIn case you want to postprocess trace span you may use ``span_callback``\nargument. ``span_callback`` must be function with signature ``def callback(result=result, span=span)``\nwhere ``result`` is graphql execution result or ``None`` in case of fatal error and span is trace span object\n(`ddtrace.span.Span `_).\n\nWhat is it good for? Unfortunately one cannot filter/alarm on span metrics resp.\nmeta information even if those are numeric (why Datadog?) so you can use it to\nsend metrics based on span, result attributes.\n\n.. code-block:: python\n\n from datadog import statsd\n from ddtrace_graphql import patch, CLIENT_ERROR, INVALID\n\n def callback(result, span):\n tags = ['resource:{}'.format(span.resource.replace(' ', '_'))]\n statsd.increment('{}.request'.format(span.service), tags=tags)\n if span.error:\n statsd.increment('{}.error'.format(span.service), tags=tags)\n elif span.get_metric(CLIENT_ERROR):\n statsd.increment('{}.{}'.format(span.service, CLIENT_ERROR), tags=tags)\n if span.get_metric(INVALID):\n statsd.increment('{}.{}'.format(span.service, INVALID), tags=tags)\n\n patch(span_callback=callback)\n\n\nignore_exceptions\n=================\n\nSome frameworks use exceptions to handle 404s etc. you may want to ignore some\nexceptions resp. not consider them server error. To do this you can supply\n`ignore_exceptions` argument as list of exception classes to ignore.\n`ignore_exceptions` will be used in python's `isinstance` thus you can ignore\nalso using base classes.\n\n\n.. code-block:: python\n\n from ddtrace_graphql import patch\n patch(ignore_exceptions=(ObjectNotFound, PermissionsDenied))\n\n\n.. code-block:: python\n\n from ddtrace_graphql import traced_graphql\n traced_graphql(\n schema, query,\n ignore_exceptions=(ObjectNotFound, PermissionsDenied))\n\n\nDevelopment\n===========\n\nInstall from source in development mode\n---------------------------------------\n\n.. code-block:: bash\n\n $ git clone https://github.com/beezz/ddtrace-graphql.git\n $ pip install --editable ddtrace-graphql[test]\n\n\nRun tests\n---------\n\n.. code-block:: bash\n\n $ cd ddtrace-graphql\n $ tox\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/beezz/ddtrace-graphql", "keywords": "tracing datadog graphql graphene", "license": "", "maintainer": "", "maintainer_email": "", "name": "ddtrace-graphql", "package_url": "https://pypi.org/project/ddtrace-graphql/", "platform": "", "project_url": "https://pypi.org/project/ddtrace-graphql/", "project_urls": { "Homepage": "https://github.com/beezz/ddtrace-graphql" }, "release_url": "https://pypi.org/project/ddtrace-graphql/0.2.0/", "requires_dist": [ "ddtrace", "graphql-core", "wrapt", "tox ; extra == 'test'", "pytest ; extra == 'test'", "pytest-cov ; extra == 'test'" ], "requires_python": "", "summary": "Python library for tracing graphql calls with Datadog", "version": "0.2.0" }, "last_serial": 5432473, "releases": { "0.0.3": [ { "comment_text": "", "digests": { "md5": "9351d965eee816d0512521321faee2f5", "sha256": "074d2e6ba75f4a76c22d16623ab274e3fd586d71ae94a38b9a105a05db7fafd9" }, "downloads": -1, "filename": "ddtrace_graphql-0.0.3-py3-none-any.whl", "has_sig": false, "md5_digest": "9351d965eee816d0512521321faee2f5", "packagetype": "bdist_wheel", "python_version": "3.6", "requires_python": null, "size": 5315, "upload_time": "2018-01-08T22:31:48", "url": "https://files.pythonhosted.org/packages/6f/e9/59933b781773132645957fbc6b13c7402f0f2f75e8f425bac46e587fadb2/ddtrace_graphql-0.0.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8ce69298ab7c30d4ed87551b4ebfeaae", "sha256": "d4fc4b52696f8ce40af7efd06c91e5b4cc17dc35af044ce0498a6b966e193c75" }, "downloads": -1, "filename": "ddtrace-graphql-0.0.3.tar.gz", "has_sig": false, "md5_digest": "8ce69298ab7c30d4ed87551b4ebfeaae", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4064, "upload_time": "2018-01-08T22:31:46", "url": "https://files.pythonhosted.org/packages/14/91/672b84383c153a4741a06131c86892c34e03ba9e9d545024a9cf73284659/ddtrace-graphql-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "67c6269def952d42256e9a110612f4f6", "sha256": "fa3fc0649302de19a4e63e1fb68a339316e1409c67334989e402897c3747b778" }, "downloads": -1, "filename": "ddtrace_graphql-0.0.4-py3-none-any.whl", "has_sig": false, "md5_digest": "67c6269def952d42256e9a110612f4f6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 5464, "upload_time": "2018-01-10T12:52:19", "url": "https://files.pythonhosted.org/packages/ee/b0/ebff3dc69cdee45eb8110af5d4eae6a7c0fd858e2ec9c119acdb2dce1df0/ddtrace_graphql-0.0.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e33133b2df013e2ad2a0e82bec0fcb1c", "sha256": "ac28db41e463da1bd41e1c8effa996f51bbe4da0235c1f2914a53708b9f45d5a" }, "downloads": -1, "filename": "ddtrace-graphql-0.0.4.tar.gz", "has_sig": false, "md5_digest": "e33133b2df013e2ad2a0e82bec0fcb1c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4202, "upload_time": "2018-01-10T12:48:46", "url": "https://files.pythonhosted.org/packages/ca/97/344ee49811720790fed7f85d0ee4914a1857b9b8b226adb2d3dd2c10cc9d/ddtrace-graphql-0.0.4.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "61c33b1414ec69ea90e9b09c063f239b", "sha256": "2e2de24051146703a11ce68ea31b317d4b918b8d340c4343be2f98e6667db8df" }, "downloads": -1, "filename": "ddtrace_graphql-0.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "61c33b1414ec69ea90e9b09c063f239b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6632, "upload_time": "2018-03-30T21:38:10", "url": "https://files.pythonhosted.org/packages/c3/ac/3d59f0c6dd3ab9000f8998bec386a0040010b85a83ea8743e12b948fe5b5/ddtrace_graphql-0.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c4c47b00f6e38d62a5ebf68d97481355", "sha256": "7cbc99c4c7499f0e793714ba1400758adf34d8fed7e5ea41ba8ab43006bbb163" }, "downloads": -1, "filename": "ddtrace-graphql-0.0.7.tar.gz", "has_sig": false, "md5_digest": "c4c47b00f6e38d62a5ebf68d97481355", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5117, "upload_time": "2018-03-30T21:38:11", "url": "https://files.pythonhosted.org/packages/47/8e/fda22a7b54e1e50732df5a3faacabf7d4f79423b9ee2582c2ec66f2cf719/ddtrace-graphql-0.0.7.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "82468fdb0359ea7ebf4bb4986b31deab", "sha256": "c5af5c134cb05e993a71c982a07d8e2176cd16f992cce35f906bd2aaf7899a1e" }, "downloads": -1, "filename": "ddtrace_graphql-0.0.8-py3-none-any.whl", "has_sig": false, "md5_digest": "82468fdb0359ea7ebf4bb4986b31deab", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6692, "upload_time": "2018-03-31T23:22:14", "url": "https://files.pythonhosted.org/packages/d9/a1/561b011bb3f2f9892c791cf876907cd281ec2fbf456a5fc7c345248bbb42/ddtrace_graphql-0.0.8-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "70e93d419faf9b42433d4c5c8a0fc536", "sha256": "605f3faa7f3d8f60d6124e1d20ac177ee1b306cbd29cd280edfdb4136808938a" }, "downloads": -1, "filename": "ddtrace-graphql-0.0.8.tar.gz", "has_sig": false, "md5_digest": "70e93d419faf9b42433d4c5c8a0fc536", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 487703, "upload_time": "2018-03-31T23:22:16", "url": "https://files.pythonhosted.org/packages/68/dd/b76b3f1fd74df2b2c6434f3baaa81239c8d2a8a717f128460e7948c730a0/ddtrace-graphql-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "71e361e7510e1bc3beaee46ff0cc196e", "sha256": "60518ed89776fd0f3d649b0dc11f2058fe2da69cef6b251766a819c98f9193ac" }, "downloads": -1, "filename": "ddtrace_graphql-0.0.9-py3-none-any.whl", "has_sig": false, "md5_digest": "71e361e7510e1bc3beaee46ff0cc196e", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6893, "upload_time": "2018-04-01T01:37:43", "url": "https://files.pythonhosted.org/packages/95/3a/27b820e67f1fdd4342e5bfae6dcd33c37dd9e9fb28a16bfe492b14d8871e/ddtrace_graphql-0.0.9-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "14f711650a2aaec7226fb6aab5a3cf70", "sha256": "ba998bdac3ff8188e64998514298226c21cb33d2036418a97051a796dd19a632" }, "downloads": -1, "filename": "ddtrace-graphql-0.0.9.tar.gz", "has_sig": false, "md5_digest": "14f711650a2aaec7226fb6aab5a3cf70", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 487872, "upload_time": "2018-04-01T01:37:45", "url": "https://files.pythonhosted.org/packages/8c/31/b4c019e1ff0b3392d7ef4719aaac06c508f167f807b403bb61ee437d8df3/ddtrace-graphql-0.0.9.tar.gz" } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "2ae6bff7450e39b69966b6cd271a1125", "sha256": "691d8d509cb2ec10229bbb4e0d56b52146766130c5f55a27d926290931ba26d6" }, "downloads": -1, "filename": "ddtrace_graphql-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2ae6bff7450e39b69966b6cd271a1125", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8328, "upload_time": "2018-04-01T23:30:01", "url": "https://files.pythonhosted.org/packages/c9/39/3b42e767110ed0b301d2a7effc0686ef5c1712873137c1360df1673eead4/ddtrace_graphql-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9f7698154ae313f4ae7b4f5dc572fba1", "sha256": "191fecfea879f730d365f53ec8d0a5b5062c565854c384b40b8755c7655986a1" }, "downloads": -1, "filename": "ddtrace-graphql-0.1.0.tar.gz", "has_sig": false, "md5_digest": "9f7698154ae313f4ae7b4f5dc572fba1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 488849, "upload_time": "2018-04-01T23:30:03", "url": "https://files.pythonhosted.org/packages/ae/d9/bc2e37db76bae2b1afb662251bed605067b612e2740a78d2b54ed2e3a852/ddtrace-graphql-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "3d727866ed8125fd830ec19db02e0ed6", "sha256": "29f756e5b88fa8cfdeb6ddc75a307aa7d1f8f0e04515fc05936a1c1a118fe788" }, "downloads": -1, "filename": "ddtrace_graphql-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "3d727866ed8125fd830ec19db02e0ed6", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8840, "upload_time": "2018-05-14T09:43:12", "url": "https://files.pythonhosted.org/packages/ba/3b/11c5f12e652cc91d2e66c16d1c74d3248a7923081648b95f3e996765979b/ddtrace_graphql-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f3ff8eeeeff271a0e23f9b24c82ed33b", "sha256": "ebb1399670e46f640d4b77b72fe7e07491e6209ccd8de63b48b44a6490aa832d" }, "downloads": -1, "filename": "ddtrace-graphql-0.1.1.tar.gz", "has_sig": false, "md5_digest": "f3ff8eeeeff271a0e23f9b24c82ed33b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 489196, "upload_time": "2018-05-14T09:43:14", "url": "https://files.pythonhosted.org/packages/7c/ca/51a86665af5a04744e082f18582f17b57461a06a924f6174925697b0eea2/ddtrace-graphql-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "bc2aec88a9dc63c082ec0d78731052b9", "sha256": "6256ad706a62a5c4d2adedf81f256ac4531440d9f94fe0d763b51d8abcec3784" }, "downloads": -1, "filename": "ddtrace_graphql-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "bc2aec88a9dc63c082ec0d78731052b9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8902, "upload_time": "2018-05-14T13:55:30", "url": "https://files.pythonhosted.org/packages/4c/45/91de00ef4b952996d7e45805f5d74d07848cebdc89a4b8a4c7720f7e3d7e/ddtrace_graphql-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4c554ee0bcdc72706174a175d90d4d3b", "sha256": "c46ebd4d7590392c2d0042a6b2195f12c122996fac640d5fd026009d9b415990" }, "downloads": -1, "filename": "ddtrace-graphql-0.1.2.tar.gz", "has_sig": false, "md5_digest": "4c554ee0bcdc72706174a175d90d4d3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 489256, "upload_time": "2018-05-14T13:55:31", "url": "https://files.pythonhosted.org/packages/4c/fb/e566781c62e35f1538122249e9abcabefa281e09739de758af5e2ff82cdc/ddtrace-graphql-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "bca354281a24352901598cfe6f967b31", "sha256": "87eb15f277f37863ad70471c7b0f006165221e35d426a007ddd31d1a4c55dd44" }, "downloads": -1, "filename": "ddtrace_graphql-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "bca354281a24352901598cfe6f967b31", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9875, "upload_time": "2018-05-14T21:23:06", "url": "https://files.pythonhosted.org/packages/49/54/01ec29b39f8e4bfc854ca92b1d957d7533b6773e53ef1f873af9df4b5347/ddtrace_graphql-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e43ee28bd4f8c2937c7fe824490fa01e", "sha256": "6df63bdea1ef25b36a29d62361637f1a3d10ea26f77d0ce7fdb39c6883bb6402" }, "downloads": -1, "filename": "ddtrace-graphql-0.1.3.tar.gz", "has_sig": false, "md5_digest": "e43ee28bd4f8c2937c7fe824490fa01e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 489943, "upload_time": "2018-05-14T21:23:08", "url": "https://files.pythonhosted.org/packages/7a/e7/5d40c5f73c1c522cd17cf941c2afa122d278264a8a60f59e9af262b2a414/ddtrace-graphql-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "bcf5aba5fb15e45c8c1f3237a53abeb5", "sha256": "c9520b2b613666d2ef478d3dcd40f6681adc110060fb60cdd988780d6d01d1fd" }, "downloads": -1, "filename": "ddtrace_graphql-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bcf5aba5fb15e45c8c1f3237a53abeb5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7843, "upload_time": "2019-06-21T19:28:21", "url": "https://files.pythonhosted.org/packages/02/1d/8ae2d30c7dc72602c18f084f4f15bbb60bb269a5c93ef9967c0923066fc9/ddtrace_graphql-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0d3195d2412fc205e0dc30ade203aba", "sha256": "afa97b9453a3162e2fa1b37dd8b1208c379bb4811162ed322acbb2d74978885f" }, "downloads": -1, "filename": "ddtrace-graphql-0.2.0.tar.gz", "has_sig": false, "md5_digest": "a0d3195d2412fc205e0dc30ade203aba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 490335, "upload_time": "2019-06-21T19:28:32", "url": "https://files.pythonhosted.org/packages/dc/7d/906008012217f520700fb9fe60b543d44f5a5c9f2771a5e023f68c841eac/ddtrace-graphql-0.2.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "bcf5aba5fb15e45c8c1f3237a53abeb5", "sha256": "c9520b2b613666d2ef478d3dcd40f6681adc110060fb60cdd988780d6d01d1fd" }, "downloads": -1, "filename": "ddtrace_graphql-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "bcf5aba5fb15e45c8c1f3237a53abeb5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 7843, "upload_time": "2019-06-21T19:28:21", "url": "https://files.pythonhosted.org/packages/02/1d/8ae2d30c7dc72602c18f084f4f15bbb60bb269a5c93ef9967c0923066fc9/ddtrace_graphql-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a0d3195d2412fc205e0dc30ade203aba", "sha256": "afa97b9453a3162e2fa1b37dd8b1208c379bb4811162ed322acbb2d74978885f" }, "downloads": -1, "filename": "ddtrace-graphql-0.2.0.tar.gz", "has_sig": false, "md5_digest": "a0d3195d2412fc205e0dc30ade203aba", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 490335, "upload_time": "2019-06-21T19:28:32", "url": "https://files.pythonhosted.org/packages/dc/7d/906008012217f520700fb9fe60b543d44f5a5c9f2771a5e023f68c841eac/ddtrace-graphql-0.2.0.tar.gz" } ] }