diff --git a/webui/backend/ray_ui.py b/webui/backend/ray_ui.py
index 202b419762178..2e84d1f1fd7f2 100644
--- a/webui/backend/ray_ui.py
+++ b/webui/backend/ray_ui.py
@@ -50,7 +50,7 @@ async def hgetall_as_dict(redis_conn, key):
# Cache information about the local schedulers.
local_schedulers = {}
-errors = collections.defaultdict(list)
+errors = []
def duration_to_string(duration):
"""Format a duration in seconds as a string.
@@ -145,11 +145,13 @@ async def listen_for_errors(redis_ip_address, redis_port):
result = await data_conn.execute("hget", error_key, "message")
result = result.decode("ascii")
# TODO: Maybe also get rid of coloring?
- errors[worker].append(result)
+ errors.append({"worker_id": worker,
+ "task_id": task,
+ "error": result})
index += 1
async def handle_get_errors(websocket):
- """Renders error messages"""
+ """Renders error messages"""
await websocket.send(json.dumps(errors))
node_info = collections.OrderedDict()
diff --git a/webui/src/ray-app.html b/webui/src/ray-app.html
index 60a748b861f17..8daf6dbcf0f5a 100644
--- a/webui/src/ray-app.html
+++ b/webui/src/ray-app.html
@@ -75,6 +75,7 @@
Objects
Tasks
Events
+ Errors
Timeline
Recent Tasks
@@ -100,6 +101,7 @@
+
diff --git a/webui/src/ray-errors.html b/webui/src/ray-errors.html
new file mode 100644
index 0000000000000..c057424fb11d0
--- /dev/null
+++ b/webui/src/ray-errors.html
@@ -0,0 +1,56 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+