Skip to content

Commit 03c27f2

Browse files
committed
make sure sql statements and timing are logged for all engines, plus tag engines with id and log those too, and superfluous user method cleanup
1 parent d36e29a commit 03c27f2

File tree

3 files changed

+11
-19
lines changed

3 files changed

+11
-19
lines changed

src/server/_common.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
from flask import Flask, g, request
55
from sqlalchemy import event
6-
from sqlalchemy.engine import Connection
6+
from sqlalchemy.engine import Connection, Engine
77
from werkzeug.exceptions import Unauthorized
88
from werkzeug.local import LocalProxy
99

@@ -85,12 +85,12 @@ def log_info_with_request_and_response(message, response, **kwargs):
8585
**kwargs
8686
)
8787

88-
@event.listens_for(engine, "before_cursor_execute")
88+
@event.listens_for(Engine, "before_cursor_execute")
8989
def before_cursor_execute(conn, cursor, statement, parameters, context, executemany):
9090
context._query_start_time = time.time()
9191

9292

93-
@event.listens_for(engine, "after_cursor_execute")
93+
@event.listens_for(Engine, "after_cursor_execute")
9494
def after_cursor_execute(conn, cursor, statement, parameters, context, executemany):
9595
# this timing info may be suspect, at least in terms of dbms cpu time...
9696
# it is likely that it includes that time as well as any overhead that
@@ -101,7 +101,8 @@ def after_cursor_execute(conn, cursor, statement, parameters, context, executema
101101
# Convert to milliseconds
102102
total_time *= 1000
103103
get_structured_logger("server_api").info(
104-
"Executed SQL", statement=statement, params=parameters, elapsed_time_ms=total_time
104+
"Executed SQL", statement=statement, params=parameters, elapsed_time_ms=total_time,
105+
engine_id=conn.get_execution_options().get('engine_id')
105106
)
106107

107108

src/server/_db.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,12 @@
99
# previously `_common` imported from `_security` which imported from `admin.models`, which imported (back again) from `_common` for database connection objects
1010

1111

12-
engine: Engine = create_engine(SQLALCHEMY_DATABASE_URI, **SQLALCHEMY_ENGINE_OPTIONS)
12+
engine: Engine = create_engine(SQLALCHEMY_DATABASE_URI, **SQLALCHEMY_ENGINE_OPTIONS).execution_options(engine_id='default')
1313
metadata = MetaData(bind=engine)
1414
Session = sessionmaker(bind=engine)
1515

1616
if SQLALCHEMY_DATABASE_URI_PRIMARY:
17-
write_engine: Engine = create_engine(SQLALCHEMY_DATABASE_URI_PRIMARY, **SQLALCHEMY_ENGINE_OPTIONS)
17+
write_engine: Engine = create_engine(SQLALCHEMY_DATABASE_URI_PRIMARY, **SQLALCHEMY_ENGINE_OPTIONS).execution_options(engine_id='write_engine')
1818
write_metadata = MetaData(bind=write_engine)
1919
WriteSession = sessionmaker(bind=write_engine)
2020
else:

src/server/endpoints/admin.py

+4-13
Original file line numberDiff line numberDiff line change
@@ -29,22 +29,13 @@ def _require_admin():
2929
return token
3030

3131

32-
def _parse_roles(roles: List[str]) -> Set[str]:
33-
return set(roles)
34-
35-
3632
def _render(mode: str, token: str, flags: Dict, **kwargs):
3733
template = (templates_dir / "index.html").read_text("utf8")
3834
return render_template_string(
3935
template, mode=mode, token=token, flags=flags, roles=UserRole.list_all_roles(), **kwargs
4036
)
4137

4238

43-
def user_exists(user_email: str = None, api_key: str = None):
44-
user = User.find_user(user_email=user_email, api_key=api_key)
45-
return True if user else False
46-
47-
4839
# ~~~~ PUBLIC ROUTES ~~~~
4940

5041

@@ -69,11 +60,11 @@ def _index():
6960
flags = dict()
7061
if request.method == "POST":
7162
# register a new user
72-
if not user_exists(user_email=request.values["email"], api_key=request.values["api_key"]):
63+
if not User.find_user(user_email=request.values["email"], api_key=request.values["api_key"]):
7364
User.create_user(
7465
request.values["api_key"],
7566
request.values["email"],
76-
_parse_roles(request.values.getlist("roles")),
67+
set(request.values.getlist("roles")),
7768
)
7869
flags["banner"] = "Successfully Added"
7970
else:
@@ -101,7 +92,7 @@ def _detail(user_id: int):
10192
user=user,
10293
api_key=request.values["api_key"],
10394
email=request.values["email"],
104-
roles=_parse_roles(request.values.getlist("roles")),
95+
roles=set(request.values.getlist("roles")),
10596
)
10697
flags["banner"] = "Successfully Saved"
10798
return _render("detail", token, flags, user=user.as_dict)
@@ -116,7 +107,7 @@ def _register():
116107

117108
user_api_key = body["user_api_key"]
118109
user_email = body["user_email"]
119-
if user_exists(user_email=user_email, api_key=user_api_key):
110+
if User.find_user(user_email=user_email, api_key=user_api_key):
120111
return make_response(
121112
"User with email and/or API Key already exists, use different parameters or contact us for help",
122113
409,

0 commit comments

Comments
 (0)