Skip to content

Commit 1a63c31

Browse files
authored
backend: errors endpoint: Parse JSON-l errors before returning (#799)
1 parent e6e46b5 commit 1a63c31

File tree

2 files changed

+26
-5
lines changed

2 files changed

+26
-5
lines changed

backend/btrixcloud/crawls.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
from .pagination import DEFAULT_PAGE_SIZE, paginated_format
2525
from .storages import get_presigned_url, delete_crawl_file_object, get_wacz_logs
2626
from .users import User
27-
from .utils import dt_now, ts_now, get_redis_crawl_stats
27+
from .utils import dt_now, ts_now, get_redis_crawl_stats, parse_jsonl_error_messages
2828

2929

3030
CRAWL_STATES = (
@@ -784,12 +784,14 @@ async def get_errors_from_redis(
784784
try:
785785
redis = await self.get_redis(crawl_id)
786786
errors = await redis.lrange(f"{crawl_id}:e", skip, page_size)
787-
total = len(errors)
788787
except exceptions.ConnectionError:
789788
# pylint: disable=raise-missing-from
790789
raise HTTPException(status_code=503, detail="redis_connection_error")
791790

792-
return errors, total
791+
parsed_errors = parse_jsonl_error_messages(errors)
792+
total = len(parsed_errors)
793+
794+
return parsed_errors, total
793795

794796
async def get_redis(self, crawl_id):
795797
"""get redis url for crawl id"""
@@ -1240,8 +1242,9 @@ async def get_crawl_errors(
12401242
skip = (page - 1) * pageSize
12411243
upper_bound = skip + pageSize - 1
12421244
errors = crawl.errors[skip:upper_bound]
1243-
total = len(errors)
1244-
return paginated_format(errors, total, page, pageSize)
1245+
parsed_errors = parse_jsonl_error_messages(errors)
1246+
total = len(parsed_errors)
1247+
return paginated_format(parsed_errors, total, page, pageSize)
12451248

12461249
errors, total = await ops.get_errors_from_redis(crawl_id, pageSize, page)
12471250
return paginated_format(errors, total, page, pageSize)

backend/btrixcloud/utils.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import os
44
import asyncio
5+
import json
56
import sys
67
import signal
78
import atexit
@@ -83,3 +84,20 @@ def exit_handler():
8384
sys.exit(1)
8485

8586
loop.add_signal_handler(signal.SIGTERM, exit_handler)
87+
88+
89+
def parse_jsonl_error_messages(errors):
90+
"""parse json-l error strings from redis/db into json"""
91+
parsed_errors = []
92+
for error_line in errors:
93+
if not error_line:
94+
continue
95+
try:
96+
result = json.loads(error_line)
97+
parsed_errors.append(result)
98+
except json.JSONDecodeError as err:
99+
print(
100+
f"Error decoding json-l error line: {error_line}. Error: {err}",
101+
flush=True,
102+
)
103+
return parsed_errors

0 commit comments

Comments
 (0)