Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
39fad4f
adding comment to clarify that log line occurs when DATADOG_PRIORITY_…
ZStriker19 Apr 19, 2021
9a22d05
Update writer.py
ZStriker19 Apr 21, 2021
aed7bfe
got mariadb integration working on sample app
ZStriker19 Apr 26, 2021
2d74914
testing for mariadb integration setup
ZStriker19 May 3, 2021
a501d42
fixed riot.py file so mariadb tests run
ZStriker19 May 10, 2021
3f23a64
beginning conversion of mysql tests to mariadb tests with new formats
ZStriker19 May 10, 2021
71b3506
committing to merge in master updates
ZStriker19 May 17, 2021
cdc7aab
Merge remote-tracking branch 'origin' into add_mariadb
ZStriker19 May 17, 2021
b37d210
made all mariadb tests pass
ZStriker19 Jun 7, 2021
6001351
added first snapshot test
ZStriker19 Jun 7, 2021
3e32f6f
removed print statement and added more snapshot tests for mariadb int…
ZStriker19 Jun 14, 2021
bfd87e9
updated docs to include mariadb integration and made documentation in…
ZStriker19 Jun 14, 2021
0500961
Merge remote-tracking branch 'origin' into add_mariadb
ZStriker19 Jun 21, 2021
6c0d22a
added mariadb to circleci config.yaml
ZStriker19 Jun 24, 2021
74e945a
added mariadb build steps to dev image
ZStriker19 Jun 24, 2021
cb8b2ab
added malformed query snapshot test
ZStriker19 Jun 28, 2021
158fff0
Fix grammar in mariadb docs
ZStriker19 Jul 6, 2021
5330d3d
added mariadb test snapshots, reformatted tests, added guards for pat…
ZStriker19 Jul 6, 2021
7999026
Merge branch 'add_mariadb' of github.com:DataDog/dd-trace-py into add…
ZStriker19 Jul 6, 2021
015adf8
Merge branch 'master' into add_mariadb
ZStriker19 Jul 6, 2021
1f29742
added release notes
ZStriker19 Jul 12, 2021
2b8683a
add link to library this instruments
ZStriker19 Jul 13, 2021
8d3e56b
remove comment
ZStriker19 Jul 13, 2021
eac06e3
Update ddtrace/contrib/mariadb/__init__.py
ZStriker19 Jul 13, 2021
489eddb
Update ddtrace/contrib/mariadb/__init__.py
ZStriker19 Jul 13, 2021
b7cb45e
Update ddtrace/contrib/mariadb/patch.py
ZStriker19 Jul 13, 2021
123d41b
Update docs/integrations.rst
ZStriker19 Jul 13, 2021
ceb1923
Update releasenotes/notes/mariadb-8e7bc94a0d1b8f02.yaml
ZStriker19 Jul 13, 2021
e6c0759
edits to comments
ZStriker19 Jul 13, 2021
68c82d5
Update tests/contrib/mariadb/test_mariadb.py
ZStriker19 Jul 13, 2021
8626c45
Update tests/contrib/mariadb/test_mariadb.py
ZStriker19 Jul 13, 2021
faad6eb
Update tests/contrib/mariadb/test_mariadb.py
ZStriker19 Jul 13, 2021
8ecb782
switched tests to snapshots and other small changes
ZStriker19 Jul 14, 2021
20d0cb9
getting rid of .DS_Stores
ZStriker19 Jul 14, 2021
2676143
getting rid of DS_Store
ZStriker19 Jul 14, 2021
cb628d7
fixing merge conflict
ZStriker19 Jul 14, 2021
f2ba27e
Merge branch 'master' into add_mariadb
ZStriker19 Jul 14, 2021
ce44785
Update ddtrace/contrib/mariadb/__init__.py
ZStriker19 Jul 15, 2021
597a69d
Update tests/contrib/mariadb/test_mariadb.py
ZStriker19 Jul 15, 2021
6ddcde4
Update tests/contrib/mariadb/test_mariadb.py
ZStriker19 Jul 15, 2021
1903bc2
fix merge conflict
ZStriker19 Jul 15, 2021
cb8cbbe
remove benchmark changes
ZStriker19 Jul 15, 2021
721e00a
Update tests/utils.py
ZStriker19 Jul 15, 2021
f8a7f7f
Merge branch 'add_mariadb' of github.com:DataDog/dd-trace-py into add…
ZStriker19 Jul 15, 2021
7c37778
Update ddtrace/contrib/mariadb/__init__.py
ZStriker19 Jul 15, 2021
24616bb
Update .gitignore
ZStriker19 Jul 15, 2021
8c444d0
Update ddtrace/contrib/mariadb/patch.py
ZStriker19 Jul 15, 2021
0282b78
Merge branch 'add_mariadb' of github.com:DataDog/dd-trace-py into add…
ZStriker19 Jul 15, 2021
92eac3e
Update .gitignore
ZStriker19 Jul 15, 2021
f874781
Update .gitignore
ZStriker19 Jul 15, 2021
d10c59f
fix spelling in circleci
ZStriker19 Jul 15, 2021
906dd85
fixing formatting
ZStriker19 Jul 16, 2021
8fc8596
Remove changes to Dockerfile.buster
ZStriker19 Jul 16, 2021
a7a601c
Merge remote-tracking branch 'origin/master' into add_mariadb
ZStriker19 Jul 16, 2021
671771b
flake8 formatting
ZStriker19 Jul 16, 2021
aaa5d90
Merge branch 'master' into add_mariadb
Kyle-Verhoog Jul 17, 2021
88e7cc1
recreated snapshots and added mariadb to spelling_wordlist
ZStriker19 Jul 19, 2021
1b5aae6
Merge branch 'add_mariadb' of github.com:DataDog/dd-trace-py into add…
ZStriker19 Jul 19, 2021
59ef781
changing test case so tracer flushes
ZStriker19 Jul 19, 2021
ff54feb
changing test case to pass in CI
ZStriker19 Jul 19, 2021
8ff94b4
formatting
ZStriker19 Jul 19, 2021
5d53d39
Update ddtrace/contrib/mariadb/__init__.py
ZStriker19 Jul 19, 2021
cc74fc0
Update ddtrace/contrib/mariadb/__init__.py
ZStriker19 Jul 19, 2021
83d5e01
snapshots
ZStriker19 Jul 19, 2021
9172168
Merge branch 'add_mariadb' of github.com:DataDog/dd-trace-py into add…
ZStriker19 Jul 19, 2021
3cd4893
updating tests so connection closes on each
ZStriker19 Jul 20, 2021
82f47fc
Extend environment instead of replacing it
Kyle-Verhoog Jul 20, 2021
e567e5f
fix formatting and refactor a bit in tests
ZStriker19 Jul 20, 2021
64dfb74
Update ddtrace/contrib/mariadb/__init__.py
ZStriker19 Jul 20, 2021
e521fe4
Merge branch 'master' into add_mariadb
Kyle-Verhoog Jul 20, 2021
c373a38
formatting
ZStriker19 Jul 21, 2021
6baf6e7
formatting
ZStriker19 Jul 21, 2021
10b19e5
Merge branch 'master' into add_mariadb
mergify[bot] Jul 21, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -625,6 +625,14 @@ jobs:
pattern: "grpc"
snapshot: true

mariadb:
<<: *machine_executor
steps:
- run_test:
pattern: 'mariadb$'
snapshot: true
docker_services: "mariadb"

molten:
<<: *contrib_job
steps:
Expand Down Expand Up @@ -946,6 +954,7 @@ requires_tests: &requires_tests
- jinja2
- kombu
- mako
- mariadb
- molten
- mongoengine
- mysqlconnector
Expand Down Expand Up @@ -1027,6 +1036,7 @@ workflows:
- jinja2: *requires_base_venvs
- kombu: *requires_base_venvs
- mako: *requires_base_venvs
- mariadb: *requires_base_venvs
- molten: *requires_base_venvs
- mongoengine: *requires_base_venvs
- mysqlconnector: *requires_base_venvs
Expand Down
65 changes: 65 additions & 0 deletions ddtrace/contrib/mariadb/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
"""
The MariaDB integration instruments the
`MariaDB library <https://mariadb-corporation.github.io/mariadb-connector-python/usage.html>`_ to trace queries.


Enabling
~~~~~~~~

The MariaDB integration is enabled automatically when using
:ref:`ddtrace-run<ddtracerun>` or :ref:`patch_all()<patch_all>`.

Or use :ref:`patch()<patch>` to manually enable the integration::

from ddtrace import patch
patch(mariadb=True)


Global Configuration
~~~~~~~~~~~~~~~~~~~~

.. py:data:: ddtrace.config.mariadb["service"]

The service name reported by default for MariaDB spans.

This option can also be set with the ``DD_MARIADB_SERVICE`` environment
variable.

Default: ``"mariadb"``


Instance Configuration
~~~~~~~~~~~~~~~~~~~~~~

To configure the mariadb integration on an per-connection basis use the
``Pin`` API::

from ddtrace import Pin
from ddtrace import patch

# Make sure to patch before importing mariadb
patch(mariadb=True)

import mariadb.connector

# This will report a span with the default settings
conn = mariadb.connector.connect(user="alice", password="b0b", host="localhost", port=3306, database="test")

# Use a pin to override the service name for this connection.
Pin.override(conn, service="mariadb-users")

cursor = conn.cursor()
cursor.execute("SELECT 6*7 AS the_answer;")

"""
from ...utils.importlib import require_modules


required_modules = ["mariadb"]

with require_modules(required_modules) as missing_modules:
if not missing_modules:
from .patch import patch
from .patch import unpatch

__all__ = ["patch", "unpatch"]
49 changes: 49 additions & 0 deletions ddtrace/contrib/mariadb/patch.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
import mariadb

from ddtrace import Pin
from ddtrace import config
from ddtrace.contrib.dbapi import TracedConnection
from ddtrace.ext import db
from ddtrace.ext import net
from ddtrace.utils.formats import asbool
from ddtrace.utils.formats import get_env
from ddtrace.utils.wrappers import unwrap
from ddtrace.vendor import wrapt


config._add(
"mariadb",
dict(
trace_fetch_methods=asbool(get_env("mariadb", "trace_fetch_methods", default=False)),
_default_service="mariadb",
),
)


def patch():
if getattr(mariadb, "_datadog_patch", False):
return
setattr(mariadb, "_datadog_patch", True)
wrapt.wrap_function_wrapper("mariadb", "connect", _connect)


def unpatch():
if getattr(mariadb, "_datadog_patch", False):
setattr(mariadb, "_datadog_patch", False)
unwrap(mariadb, "connect")


def _connect(func, instance, args, kwargs):
conn = func(*args, **kwargs)
tags = {
net.TARGET_HOST: kwargs["host"],
net.TARGET_PORT: kwargs["port"],
db.USER: kwargs["user"],
db.NAME: kwargs["database"],
}

pin = Pin(app="mariadb", tags=tags)

wrapped = TracedConnection(conn, pin=pin, cfg=config.mariadb)
pin.onto(wrapped)
return wrapped
1 change: 1 addition & 0 deletions ddtrace/monkey.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
"mysql": True,
"mysqldb": True,
"pymysql": True,
"mariadb": True,
"psycopg": True,
"pylibmc": True,
"pymemcache": True,
Expand Down
9 changes: 9 additions & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,15 @@ services:
- POSTGRES_DB=postgres
ports:
- "127.0.0.1:5432:5432"
mariadb:
image: mariadb
environment:
- MYSQL_ROOT_PASSWORD=example
- MYSQL_DATABASE=test
- MYSQL_USER=test
- MYSQL_PASSWORD=test
ports:
- "127.0.0.1:3306:3306"
mysql:
image: mysql:5.7
environment:
Expand Down
2 changes: 2 additions & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,8 @@ contacting support.
+--------------------------------------------------+---------------+----------------+
| :ref:`mako` | >= 0.1.0 | Yes |
+--------------------------------------------------+---------------+----------------+
| :ref:`mariadb` | >= 1.0.0 | Yes |
+--------------------------------------------------+---------------+----------------+
| :ref:`kombu` | >= 4.0 | No |
+--------------------------------------------------+---------------+----------------+
| :ref:`molten` | >= 0.7.0 | Yes |
Expand Down
7 changes: 7 additions & 0 deletions docs/integrations.rst
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,13 @@ Mako
.. automodule:: ddtrace.contrib.mako


.. _mariadb:

MariaDB
^^^^^^^
.. automodule:: ddtrace.contrib.mariadb


.. _molten:

Molten
Expand Down
1 change: 1 addition & 0 deletions docs/spelling_wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,7 @@ kwarg
lifecycle
lookups
mako
mariadb
memcached
metadata
microservices
Expand Down
4 changes: 4 additions & 0 deletions releasenotes/notes/mariadb-8e7bc94a0d1b8f02.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
---
features:
- |
Add MariaDB integration.
16 changes: 16 additions & 0 deletions riotfile.py
Original file line number Diff line number Diff line change
Expand Up @@ -862,6 +862,22 @@ def select_pys(min_version=MIN_PYTHON_VERSION, max_version=MAX_PYTHON_VERSION):
pys=select_pys(min_version="3.6"),
command="pytest {cmdargs} tests/contrib/asgi",
),
Venv(
name="mariadb",
command="pytest {cmdargs} tests/contrib/mariadb",
venvs=[
Venv(
pys=select_pys(min_version="3.6"),
pkgs={
"mariadb": [
"~=1.0.0",
"~=1.0",
latest,
],
},
),
],
),
Venv(
name="fastapi",
command="pytest {cmdargs} tests/contrib/fastapi",
Expand Down
8 changes: 8 additions & 0 deletions tests/contrib/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,14 @@
"database": os.getenv("TEST_MYSQL_DATABASE", "test"),
}

MARIADB_CONFIG = {
"host": "127.0.0.1",
"port": int(os.getenv("TEST_MARIADB_PORT", 3306)),
"user": os.getenv("TEST_MARIADB_USER", "test"),
"password": os.getenv("TEST_MARIADB_PASSWORD", "test"),
"database": os.getenv("TEST_MARIADB_DATABASE", "test"),
}

REDIS_CONFIG = {
"port": int(os.getenv("TEST_REDIS_PORT", 6379)),
}
Expand Down
Empty file.
Loading