mirror of
https://github.com/simonw/datasette.git
synced 2025-12-10 16:51:24 +01:00
Include request duration in traces
This commit is contained in:
parent
cf406c0754
commit
669fa21a71
2 changed files with 10 additions and 5 deletions
|
|
@ -6,6 +6,7 @@ import json
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
import threading
|
import threading
|
||||||
|
import time
|
||||||
import traceback
|
import traceback
|
||||||
import urllib.parse
|
import urllib.parse
|
||||||
from concurrent import futures
|
from concurrent import futures
|
||||||
|
|
@ -654,6 +655,7 @@ class Datasette:
|
||||||
async def handle_request(self, request, write_callback, stream_callback):
|
async def handle_request(self, request, write_callback, stream_callback):
|
||||||
if request.args.get("_trace"):
|
if request.args.get("_trace"):
|
||||||
request["traces"] = []
|
request["traces"] = []
|
||||||
|
request["trace_start"] = time.time()
|
||||||
with capture_traces(request["traces"]):
|
with capture_traces(request["traces"]):
|
||||||
res = await super().handle_request(request, write_callback, stream_callback)
|
res = await super().handle_request(request, write_callback, stream_callback)
|
||||||
else:
|
else:
|
||||||
|
|
@ -756,7 +758,10 @@ class Datasette:
|
||||||
async def add_traces_to_response(request, response):
|
async def add_traces_to_response(request, response):
|
||||||
if request.get("traces") is None:
|
if request.get("traces") is None:
|
||||||
return
|
return
|
||||||
traces = request["traces"]
|
traces = {
|
||||||
|
"duration": time.time() - request["trace_start"],
|
||||||
|
"queries": request["traces"],
|
||||||
|
}
|
||||||
if "text/html" in response.content_type and b'</body>' in response.body:
|
if "text/html" in response.content_type and b'</body>' in response.body:
|
||||||
extra = json.dumps(traces, indent=2)
|
extra = json.dumps(traces, indent=2)
|
||||||
extra_html = "<pre>{}</pre></body>".format(extra).encode("utf8")
|
extra_html = "<pre>{}</pre></body>".format(extra).encode("utf8")
|
||||||
|
|
@ -765,9 +770,9 @@ class Datasette:
|
||||||
data = json.loads(response.body.decode("utf8"))
|
data = json.loads(response.body.decode("utf8"))
|
||||||
if "_traces" not in data:
|
if "_traces" not in data:
|
||||||
data["_traces"] = {
|
data["_traces"] = {
|
||||||
"num_traces": len(traces),
|
"num_traces": len(traces["queries"]),
|
||||||
"traces": traces,
|
"traces": traces,
|
||||||
"duration_sum_ms": sum(t[-1] for t in traces),
|
"duration_sum_ms": sum(t[-1] for t in traces["queries"]),
|
||||||
}
|
}
|
||||||
response.body = json.dumps(data).encode("utf8")
|
response.body = json.dumps(data).encode("utf8")
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1452,5 +1452,5 @@ def test_trace(app_client):
|
||||||
traces = data["_traces"]
|
traces = data["_traces"]
|
||||||
assert isinstance(traces["duration_sum_ms"], float)
|
assert isinstance(traces["duration_sum_ms"], float)
|
||||||
assert isinstance(traces["num_traces"], int)
|
assert isinstance(traces["num_traces"], int)
|
||||||
assert isinstance(traces["traces"], list)
|
assert isinstance(traces["traces"], dict)
|
||||||
assert len(traces["traces"]) == traces["num_traces"]
|
assert len(traces["traces"]["queries"]) == traces["num_traces"]
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue