1
1
import re
2
2
import wrapt
3
+ from operator import methodcaller
3
4
4
5
from aws_xray_sdk .ext .dbapi2 import XRayTracedConn
5
6
@@ -16,14 +17,16 @@ def patch():
16
17
def _xray_traced_connect (wrapped , instance , args , kwargs ):
17
18
18
19
conn = wrapped (* args , ** kwargs )
19
- host = kwargs ['host' ] if 'host' in kwargs else re .search (r'host=(\S+)\b' , args [0 ]).groups ()[0 ]
20
- dbname = kwargs ['dbname' ] if 'dbname' in kwargs else re .search (r'dbname=(\S+)\b' , args [0 ]).groups ()[0 ]
21
- port = kwargs ['port' ] if 'port' in kwargs else re .search (r'port=(\S+)\b' , args [0 ]).groups ()[0 ]
22
- user = kwargs ['user' ] if 'user' in kwargs else re .search (r'user=(\S+)\b' , args [0 ]).groups ()[0 ]
20
+ parameterized_dsn = { c [0 ]: c [- 1 ] for c in map (methodcaller ('split' , '=' ), conn .dsn .split (' ' ))}
23
21
meta = {
24
22
'database_type' : 'PostgreSQL' ,
25
- 'url' : 'postgresql://{}@{}:{}/{}' .format (user , host , port , dbname ),
26
- 'user' : user ,
23
+ 'url' : 'postgresql://{}@{}:{}/{}' .format (
24
+ parameterized_dsn .get ('user' , 'unknown' ),
25
+ parameterized_dsn .get ('host' , 'unknown' ),
26
+ parameterized_dsn .get ('port' , 'unknown' ),
27
+ parameterized_dsn .get ('dbname' , 'unknown' ),
28
+ ),
29
+ 'user' : parameterized_dsn .get ('user' , 'unknown' ),
27
30
'database_version' : str (conn .server_version ),
28
31
'driver_version' : 'Psycopg 2'
29
32
}
0 commit comments