{ "info": { "author": "Carlos Alberto Cortez", "author_email": "calberto.cortez@gmail.com", "bugtrack_url": null, "classifiers": [ "Intended Audience :: Developers", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "######################\nSQLAlchemy Opentracing\n######################\n\nThis package enables OpenTracing support for SQLAlchemy.\n\nInstallation\n============\n\nRun the following command::\n\n $ pip install sqlalchemy_opentracing\n\nGetting started\n===============\n\nPlease see the examples directory. Overall, basic usage requires that a tracer gets set, and statements get their parent spans assigned (if any):\n\n.. code-block:: python\n\n import sqlalchemy_opentracing\n\n sqlalchemy_opentracing.init_tracing(tracer) # A OpenTracing compatible tracer.\n\n with engine.begin() as conn:\n sel = select([users])\n sqlalchemy_opentracing.set_parent_span(sel, main_span)\n conn.execute(sel)\n\nBy default, all statements in all engines are traced. Alternatively, you can enable tracing of all queries under a specific Engine by specifying that not all engines are registered, and register the Engine yourself:\n\n.. code-block:: python\n\n sqlalchemy_opentracing.init_tracing(tracer, trace_all_engines=False)\n sqlalchemy_opentracing.register_engine(engine)\n\n # Only queries under `engine` will be traced.\n with engine.begin() as conn:\n sel = select([users])\n conn.execute(sel)\n\nIt is also possible to prevent tracing of all queries automatically (independently of whether all engines are traced or not), and have them marked explicitly (with or without a parent span):\n\n.. code-block:: python\n\n sqlalchemy_opentracing.init_tracing(tracer, trace_all_queries=False)\n\n with engine.begin() as conn:\n sel = select([users])\n sqlalchemy_opentracing.set_traced(sel)\n sqlalchemy_opentracing.set_parent_span(sel, main_span) # Optional\n\nThe resulting spans will have an operation name related to the sql statement (such as `create-table` or `insert`), and will include exception information (if any), the dialect/backend (such as sqlite), and a few other hints.\n\nTracing under a Connection\n===========================\n\nIt is possible to trace all statements being executed under a connection's transaction lifetime. For this, instead of marking a statement as traced, the connection is passed to set_traced() or set_parent_span():\n\n.. code-block:: python\n\n parent_span = tracer.start_span('ParentSpan')\n conn = engine.connect()\n\n with conn.begin() as trans:\n sqlalchemy_opentracing.set_parent_span(conn, parent_span)\n\n # these three statements will be traced as children of\n # parent_span\n conn.execute(users.insert().values(name='John'))\n conn.execute(users.insert().values(name='Jason'))\n conn.execute(users.insert().values(name='Jackie'))\n\nEither a commit or a rollback on a connection's transaction will finish its tracing. If the same Connection object is used afterwards, no tracing will be done for it (unless registered for tracing again). When using (emulated) nested transactions, the tracing needs to be marked at top-level transaction time, and tracing will happen for all statements under the nested transactions:\n\n.. code-block:: python\n\n with conn.begin() as trans:\n sqlalchemy_opentracing.set_parent_span(conn, parent_span)\n conn.execute(users.insert().values(name='John'))\n\n with conn.begin() as nested_trans:\n # This statement will also be traced as\n # child of parent_span\n conn.execute(users.insert().values(name='Jason'))\n\n\nTracing under a Session (ORM)\n=============================\n\nIt is also possible to trace all actual SQL statements happening during a Session's execution life time - that is, from being fresh to have its statements executed and committed (or rollbacked). For this, the Session object is passed to set_traced or set_parent_span():\n\n.. code-block:: python\n\n parent_span = tracer.start_span('ParentSpan')\n session = Session()\n\n sqlalchemy_opentracing.set_parent_span(session, parent_span)\n try:\n session.add(User(name='Jackie'))\n session.commit()\n except IntegrityError:\n session.rollback()\n\nSimilar to what happens for Connection, either a commit or a rollback will finish its tracing, and further work on it will not be reported.\n\nTracing raw SQL statements\n==========================\n\nExecuting raw SQL statements can be done through either a Connection or a Session, through their execute() method. Since there's no way to mark each statement individually, tracing them can be done through either tracing all statements, or through tracing a Connection's transaction or Session:\n\n.. code-block:: python\n\n sqlalchemy_opentracing.set_parent_span(session, parent_span)\n\n # this statement will be traced as part of the session's execution\n session.execute('INSERT INTO users VALUES (?, ?)', 1, 'John')\n\n\nRaw SQL statements will be traced having its operation name as `textclause`, to indicate their explicit text nature.\n\nManually cancel tracing\n=======================\n\nSometimes no commit nor rollback may happen for a Connection or Session (for example, when doing bulk insertion/update). In this case, manually canceling tracing for an object can be done through clear_traced():\n\n.. code-block:: python\n\n parent_span = tracer.start_span('ParentSpan')\n session = Session()\n\n sqlalchemy_opentracing.set_parent_span(session, parent_span)\n\n # this will generate tracing of a single INSERT statement.\n users = [User(name = 'User-%s' % i) for i in xrange(100)]\n session.bulk_save_objects(users)\n\n sqlalchemy_opentracing.clear_traced(session)\n\nManually canceling tracing will not clear any tracing already done - it will simply stop any further tracing for the current statement, Connection or Session object.\n\nFurther information\n===================\n\nIf you\u2019re interested in learning more about the OpenTracing standard, please visit `opentracing.io`_ or `join the mailing list`_. If you would like to implement OpenTracing in your project and need help, feel free to send us a note at `community@opentracing.io`_.\n\n.. _opentracing.io: http://opentracing.io/\n.. _join the mailing list: http://opentracing.us13.list-manage.com/subscribe?u=180afe03860541dae59e84153&id=19117aa6cd\n.. _community@opentracing.io: community@opentracing.io\n\n", "description_content_type": "", "docs_url": null, "download_url": "https://github.com/opentracing-contrib/python-sqlalchemy/tarball/0.1.6", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/opentracing-contrib/python-sqlalchemy/", "keywords": "", "license": "Apache License 2.0", "maintainer": "", "maintainer_email": "", "name": "sqlalchemy_opentracing", "package_url": "https://pypi.org/project/sqlalchemy_opentracing/", "platform": "any", "project_url": "https://pypi.org/project/sqlalchemy_opentracing/", "project_urls": { "Download": "https://github.com/opentracing-contrib/python-sqlalchemy/tarball/0.1.6", "Homepage": "https://github.com/opentracing-contrib/python-sqlalchemy/" }, "release_url": "https://pypi.org/project/sqlalchemy_opentracing/0.1.6/", "requires_dist": null, "requires_python": "", "summary": "OpenTracing support for SQLAlchemy", "version": "0.1.6" }, "last_serial": 4623456, "releases": { "0.1.0": [], "0.1.1": [ { "comment_text": "", "digests": { "md5": "378706809b44a28f4c844ab83e9e25b2", "sha256": "d6acf91fc8279aaf5eec3e2fb79e27bbe602a2c2cc514021ec126133515acdfc" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.1.tar.gz", "has_sig": false, "md5_digest": "378706809b44a28f4c844ab83e9e25b2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4770, "upload_time": "2017-03-29T09:42:18", "url": "https://files.pythonhosted.org/packages/41/8f/b697bf6bcbb77d7d995ef83f0fe1d1183c9110ded2f33039b33a227c8b02/sqlalchemy_opentracing-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "dfd0136293c9a22702d4e869df8f6358", "sha256": "ecc5e60e3235f5fd2642b6d990a79ff3b6027558e3e3ab11e58fbe6768865dbb" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.2.tar.gz", "has_sig": false, "md5_digest": "dfd0136293c9a22702d4e869df8f6358", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5279, "upload_time": "2017-03-31T15:03:19", "url": "https://files.pythonhosted.org/packages/4b/77/33c97fbd15e32935939f6ca98a687aff0261d53bba612e865dbd26086411/sqlalchemy_opentracing-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "15129a16eb076e08d49162a2fef2dad5", "sha256": "a0f6c73ebddee030a076eb39242948f93f12c62a4d4ffa8c4586ee7872b4e6e4" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.3.tar.gz", "has_sig": false, "md5_digest": "15129a16eb076e08d49162a2fef2dad5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5617, "upload_time": "2017-04-11T11:20:16", "url": "https://files.pythonhosted.org/packages/75/ff/de6375810f8fe32c287360832e97cf6b7d09b58d10252599bb2094b11aa5/sqlalchemy_opentracing-0.1.3.tar.gz" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "b8847d7d8c859b95e5cb26ddcebb6b50", "sha256": "8db9a6789e13875e00db628faaf1a403d28abea9d90072b38af877acbaf02ddc" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.4.tar.gz", "has_sig": false, "md5_digest": "b8847d7d8c859b95e5cb26ddcebb6b50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5533, "upload_time": "2017-04-28T09:14:32", "url": "https://files.pythonhosted.org/packages/c3/76/9fc21059585deeefafc45bf608724c6c1ca6fb5367739116566c347c9e87/sqlalchemy_opentracing-0.1.4.tar.gz" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "ec925e5677895b40815dd740dbe18aaf", "sha256": "893c0f2507ff210a056a2418c45b70340b366bf7371aaa60b33fd0d8942e785d" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.5.tar.gz", "has_sig": false, "md5_digest": "ec925e5677895b40815dd740dbe18aaf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5626, "upload_time": "2017-11-07T16:33:46", "url": "https://files.pythonhosted.org/packages/6c/b6/b287ef696356ad4007e9a43b6730fe53b8d0a0ed1109c9969f2a87b59497/sqlalchemy_opentracing-0.1.5.tar.gz" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "57e905127f589f8290b313ddab7099a8", "sha256": "add5ed588961410d6d062182f908022a189d5fa6456f67499798b33ec2cc8b33" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.6.tar.gz", "has_sig": false, "md5_digest": "57e905127f589f8290b313ddab7099a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11238, "upload_time": "2018-12-21T03:28:46", "url": "https://files.pythonhosted.org/packages/fd/f3/719d8e4b859c298481c8819f732c228bce5f64dd7c9c1affff7d92d6a361/sqlalchemy_opentracing-0.1.6.tar.gz" } ], "0.1.6rc1": [ { "comment_text": "", "digests": { "md5": "3043194588306f7065ca87521bc47cb5", "sha256": "43aa3f08a8c89f7a5e6ab948f1d540ab311bce4d69e721f873399bdf3d465e71" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.6rc1.tar.gz", "has_sig": false, "md5_digest": "3043194588306f7065ca87521bc47cb5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5636, "upload_time": "2018-02-16T14:26:16", "url": "https://files.pythonhosted.org/packages/e5/b3/3fd15114e9efc42bc88344f6b5e96665d4fa3eed6e115c1ba4284582f48f/sqlalchemy_opentracing-0.1.6rc1.tar.gz" } ], "0.1.6rc2": [ { "comment_text": "", "digests": { "md5": "e18a0654b961ae6ea8cdb03c3f004a64", "sha256": "b32517259d6200df81afce368cc3f35998805f074533849e850949fd725136a2" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.6rc2.tar.gz", "has_sig": false, "md5_digest": "e18a0654b961ae6ea8cdb03c3f004a64", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5632, "upload_time": "2018-02-16T15:02:40", "url": "https://files.pythonhosted.org/packages/fa/3c/eb564ecad1c70d935e1561fed41b0afd5c8da825b7ef2fe824c1ab070bfb/sqlalchemy_opentracing-0.1.6rc2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "57e905127f589f8290b313ddab7099a8", "sha256": "add5ed588961410d6d062182f908022a189d5fa6456f67499798b33ec2cc8b33" }, "downloads": -1, "filename": "sqlalchemy_opentracing-0.1.6.tar.gz", "has_sig": false, "md5_digest": "57e905127f589f8290b313ddab7099a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11238, "upload_time": "2018-12-21T03:28:46", "url": "https://files.pythonhosted.org/packages/fd/f3/719d8e4b859c298481c8819f732c228bce5f64dd7c9c1affff7d92d6a361/sqlalchemy_opentracing-0.1.6.tar.gz" } ] }