redis.py 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. """
  2. Instrumentation for Redis
  3. https://github.com/redis/redis-py
  4. """
  5. from sentry_sdk.integrations.redis._sync_common import (
  6. patch_redis_client,
  7. patch_redis_pipeline,
  8. )
  9. from sentry_sdk.integrations.redis.modules.queries import _set_db_data
  10. from typing import TYPE_CHECKING
  11. if TYPE_CHECKING:
  12. from typing import Any, Sequence
  13. def _get_redis_command_args(command):
  14. # type: (Any) -> Sequence[Any]
  15. return command[0]
  16. def _patch_redis(StrictRedis, client): # noqa: N803
  17. # type: (Any, Any) -> None
  18. patch_redis_client(
  19. StrictRedis,
  20. is_cluster=False,
  21. set_db_data_fn=_set_db_data,
  22. )
  23. patch_redis_pipeline(
  24. client.Pipeline,
  25. is_cluster=False,
  26. get_command_args_fn=_get_redis_command_args,
  27. set_db_data_fn=_set_db_data,
  28. )
  29. try:
  30. strict_pipeline = client.StrictPipeline
  31. except AttributeError:
  32. pass
  33. else:
  34. patch_redis_pipeline(
  35. strict_pipeline,
  36. is_cluster=False,
  37. get_command_args_fn=_get_redis_command_args,
  38. set_db_data_fn=_set_db_data,
  39. )
  40. try:
  41. import redis.asyncio
  42. except ImportError:
  43. pass
  44. else:
  45. from sentry_sdk.integrations.redis._async_common import (
  46. patch_redis_async_client,
  47. patch_redis_async_pipeline,
  48. )
  49. patch_redis_async_client(
  50. redis.asyncio.client.StrictRedis,
  51. is_cluster=False,
  52. set_db_data_fn=_set_db_data,
  53. )
  54. patch_redis_async_pipeline(
  55. redis.asyncio.client.Pipeline,
  56. False,
  57. _get_redis_command_args,
  58. set_db_data_fn=_set_db_data,
  59. )