Skip to content

Commit 64a798c

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 51316fd commit 64a798c

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

@@ -70,12 +70,12 @@ def log_info_with_request_and_response(message, response, **kwargs):
7070
**kwargs
7171
)
7272

73-
@event.listens_for(engine, "before_cursor_execute")
73+
@event.listens_for(Engine, "before_cursor_execute")
7474
def before_cursor_execute(conn, cursor, statement, parameters, context, executemany):
7575
context._query_start_time = time.time()
7676

7777

78-
@event.listens_for(engine, "after_cursor_execute")
78+
@event.listens_for(Engine, "after_cursor_execute")
7979
def after_cursor_execute(conn, cursor, statement, parameters, context, executemany):
8080
# this timing info may be suspect, at least in terms of dbms cpu time...
8181
# it is likely that it includes that time as well as any overhead that
@@ -86,7 +86,8 @@ def after_cursor_execute(conn, cursor, statement, parameters, context, executema
8686
# Convert to milliseconds
8787
total_time *= 1000
8888
get_structured_logger("server_api").info(
89-
"Executed SQL", statement=statement, params=parameters, elapsed_time_ms=total_time
89+
"Executed SQL", statement=statement, params=parameters, elapsed_time_ms=total_time,
90+
engine_id=conn.get_execution_options().get('engine_id')
9091
)
9192

9293

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
@@ -28,33 +28,24 @@ def _require_admin():
2828
return token
2929

3030

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

4137

42-
def user_exists(user_email: str = None, api_key: str = None):
43-
user = User.find_user(user_email=user_email, api_key=api_key)
44-
return True if user else False
45-
46-
4738
@bp.route("/", methods=["GET", "POST"])
4839
def _index():
4940
token = _require_admin()
5041
flags = dict()
5142
if request.method == "POST":
5243
# register a new user
53-
if not user_exists(user_email=request.values["email"], api_key=request.values["api_key"]):
44+
if not User.find_user(user_email=request.values["email"], api_key=request.values["api_key"]):
5445
User.create_user(
5546
request.values["api_key"],
5647
request.values["email"],
57-
_parse_roles(request.values.getlist("roles")),
48+
set(request.values.getlist("roles")),
5849
)
5950
flags["banner"] = "Successfully Added"
6051
else:
@@ -82,7 +73,7 @@ def _detail(user_id: int):
8273
user=user,
8374
api_key=request.values["api_key"],
8475
email=request.values["email"],
85-
roles=_parse_roles(request.values.getlist("roles")),
76+
roles=set(request.values.getlist("roles")),
8677
)
8778
flags["banner"] = "Successfully Saved"
8879
return _render("detail", token, flags, user=user.as_dict)
@@ -112,7 +103,7 @@ def _register():
112103

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

0 commit comments

Comments
 (0)