Skip to content

Commit

Permalink
Adds basic support to mask parameters with sha256
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasdesr committed Jun 25, 2020
1 parent 29d1c3f commit 9f5e7dc
Showing 1 changed file with 18 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@
---
"""

import json
import hashlib

import asyncpg
import wrapt
from asyncpg import exceptions
Expand All @@ -58,7 +61,14 @@ def _exception_to_canonical_code(exc: Exception) -> StatusCanonicalCode:
return StatusCanonicalCode.UNKNOWN


def _hydrate_span_from_args(connection, query, parameters) -> dict:
def _mask_parameters(parameters):
serialized = json.dumps(parameters, sort_keys=True)
m = hashlib.sha256(serialized.encode("utf-8"))

return ":".join((m.name, m.hexdigest()))


def _hydrate_span_from_args(connection, query, parameters, mask_parameters=True) -> dict:
span_attributes = {"db.type": "sql"}

params = getattr(connection, "_params", None)
Expand All @@ -69,13 +79,16 @@ def _hydrate_span_from_args(connection, query, parameters) -> dict:
span_attributes["db.statement"] = query

if parameters is not None and len(parameters) > 0:
span_attributes["db.statement.parameters"] = str(parameters)
if mask_parameters:
parameters = _mask_parameters(parameters)

span_attributes["db.statement.parameters"] = str(parameters)

return span_attributes


class AsyncPGInstrumentor(BaseInstrumentor):
def _instrument(self, capture_parameters=False, **kwargs):
def _instrument(self, capture_parameters=False, mask_parameters=True, **kwargs):
tracer_provider = kwargs.get(
"tracer_provider", trace.get_tracer_provider()
)
Expand All @@ -86,6 +99,7 @@ def _instrument(self, capture_parameters=False, **kwargs):
)

self.capture_parameters = capture_parameters
self.mask_parameters = mask_parameters

for method in [
"Connection.execute",
Expand Down Expand Up @@ -114,6 +128,7 @@ async def _do_execute(self, func, instance, args, kwargs):
instance,
args[0],
args[1:] if self.capture_parameters else None,
self.mask_parameters,
)
tracer = getattr(asyncpg, _APPLIED)

Expand Down

0 comments on commit 9f5e7dc

Please sign in to comment.