Skip to content

Commit 5482158

Browse files
committed
feat(teacher): include pc_name in logs for multi-client sessions
1 parent 234f493 commit 5482158

3 files changed

Lines changed: 73 additions & 14 deletions

File tree

teacher/main.py

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,28 +98,40 @@ def poll_queue() -> None:
9898
while True:
9999
kind, data = event_q.get_nowait()
100100
if kind == "client_registered":
101+
hn = data.get("hostname") or "-"
101102
app.log_line(
102-
"上线: %s [%s] %s (%s)"
103+
"上线: pc_name=%s [%s] %s (%s)"
103104
% (
104-
data.get("hostname"),
105+
hn,
105106
(data.get("machine_id") or "")[:12] or "-",
106107
data.get("ipv4"),
107108
data.get("addr"),
108109
)
109110
)
110111
elif kind == "client_disconnected":
111-
app.log_line("断开: session=%s" % data.get("session_id"))
112+
app.log_line(
113+
"断开: pc_name=%s session=%s"
114+
% (data.get("hostname") or "-", data.get("session_id"))
115+
)
112116
elif kind == "command_result":
113117
app.log_line(
114-
"结果 cmd_id=%s ok=%s %s"
118+
"结果 pc_name=%s cmd_id=%s ok=%s %s"
115119
% (
120+
data.get("hostname") or "-",
116121
data.get("cmd_id"),
117122
data.get("ok"),
118123
data.get("message"),
119124
)
120125
)
121126
elif kind == "client_error":
122-
app.log_line("连接错误: %s" % data.get("message"))
127+
app.log_line(
128+
"连接错误: pc_name=%s session=%s %s"
129+
% (
130+
data.get("hostname") or "-",
131+
data.get("session_id") or "-",
132+
data.get("message"),
133+
)
134+
)
123135
elif kind == "heartbeat":
124136
pass
125137
except queue.Empty:

teacher/server.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -247,10 +247,16 @@ def _client_loop(self, conn: socket.socket, peer_ip: str) -> None:
247247
},
248248
)
249249
elif mtype == MSG_RESULT:
250+
res_host = ""
251+
with self._sessions_lock:
252+
s_res = self._sessions.get(session_id)
253+
if s_res:
254+
res_host = str(s_res.hostname or "")
250255
self._emit(
251256
"command_result",
252257
{
253258
"session_id": session_id,
259+
"hostname": res_host,
254260
"cmd_id": msg.get("cmd_id"),
255261
"ok": bool(msg.get("ok")),
256262
"message": str(msg.get("message") or ""),
@@ -267,6 +273,7 @@ def _client_loop(self, conn: socket.socket, peer_ip: str) -> None:
267273
"client_error",
268274
{
269275
"session_id": session_id,
276+
"hostname": str(session.hostname or ""),
270277
"message": f"read config file error: {e}",
271278
},
272279
)
@@ -289,19 +296,32 @@ def _client_loop(self, conn: socket.socket, peer_ip: str) -> None:
289296
},
290297
)
291298
except (ConnectionError, OSError, ValueError, json.JSONDecodeError) as e:
299+
err_host = ""
300+
if session_id:
301+
with self._sessions_lock:
302+
s_err = self._sessions.get(session_id)
303+
if s_err:
304+
err_host = str(s_err.hostname or "")
292305
self._emit(
293306
"client_error",
294307
{
295308
"session_id": session_id or "",
309+
"hostname": err_host,
296310
"message": str(e),
297311
},
298312
)
299313
finally:
300314
if session_id:
315+
disc_host = ""
301316
with self._sessions_lock:
302-
self._sessions.pop(session_id, None)
317+
s_disc = self._sessions.pop(session_id, None)
303318
self._conn_to_session.pop(conn, None)
304-
self._emit("client_disconnected", {"session_id": session_id})
319+
if s_disc:
320+
disc_host = str(s_disc.hostname or "")
321+
self._emit(
322+
"client_disconnected",
323+
{"session_id": session_id, "hostname": disc_host},
324+
)
305325
try:
306326
conn.close()
307327
except OSError:

teacher/ui.py

Lines changed: 34 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,13 @@ def selected_session_ids(self) -> List[str]:
331331
sel = self.tree.selection()
332332
return [str(sid) for sid in sel]
333333

334+
def _pc_name_for_session(self, sid: str) -> str:
335+
for s in self._sessions_cache:
336+
if s.session_id == sid:
337+
h = (s.hostname or "").strip()
338+
return h if h else "-"
339+
return "-"
340+
334341
def _session_values(self, s: "ClientSession") -> Tuple[str, str, str, str, str, str, str]:
335342
status = "在线" if s.online else "离线"
336343
return (
@@ -500,7 +507,10 @@ def ok() -> None:
500507
return
501508
cmd_id = self.next_cmd_id()
502509
if self._on_enqueue_rename(sid, cmd_id, name):
503-
self.log_line("已排队: 改名 cmd_id=%s session=%s -> %s" % (cmd_id, sid, name))
510+
self.log_line(
511+
"已排队: 改名 pc_name=%s cmd_id=%s session=%s -> %s"
512+
% (self._pc_name_for_session(sid), cmd_id, sid, name)
513+
)
504514
d.destroy()
505515
else:
506516
messagebox.showerror("错误", "会话不存在或已断开。", parent=d)
@@ -573,8 +583,13 @@ def ok() -> None:
573583
cmd_id = self.next_cmd_id()
574584
if self._on_enqueue_set_ipv4(sid, cmd_id, payload):
575585
self.log_line(
576-
"已排队: 设 IP cmd_id=%s session=%s %s"
577-
% (cmd_id, sid, json.dumps(payload, ensure_ascii=False))
586+
"已排队: 设 IP pc_name=%s cmd_id=%s session=%s %s"
587+
% (
588+
self._pc_name_for_session(sid),
589+
cmd_id,
590+
sid,
591+
json.dumps(payload, ensure_ascii=False),
592+
)
578593
)
579594
d.destroy()
580595
else:
@@ -599,9 +614,15 @@ def run_power_action(act: str) -> None:
599614
for sid in sids:
600615
cmd_id = self.next_cmd_id()
601616
if self._on_enqueue_power(sid, cmd_id, act):
602-
self.log_line("已排队: 电源 cmd_id=%s session=%s action=%s" % (cmd_id, sid, act))
617+
self.log_line(
618+
"已排队: 电源 pc_name=%s cmd_id=%s session=%s action=%s"
619+
% (self._pc_name_for_session(sid), cmd_id, sid, act)
620+
)
603621
else:
604-
self.log_line("失败: 电源操作 session=%s 会话不存在或已断开" % sid)
622+
self.log_line(
623+
"失败: 电源操作 pc_name=%s session=%s 会话不存在或已断开"
624+
% (self._pc_name_for_session(sid), sid)
625+
)
605626
d.destroy()
606627

607628
bf = ttk.Frame(d, padding=8)
@@ -1025,9 +1046,15 @@ def ok():
10251046
for sid in sids:
10261047
cmd_id = self.next_cmd_id()
10271048
if self._on_enqueue_network_restrict(sid, cmd_id, payload):
1028-
self.log_line("已排队: 网络限制 cmd_id=%s session=%s mode=%s" % (cmd_id, sid, mode_name))
1049+
self.log_line(
1050+
"已排队: 网络限制 pc_name=%s cmd_id=%s session=%s mode=%s"
1051+
% (self._pc_name_for_session(sid), cmd_id, sid, mode_name)
1052+
)
10291053
else:
1030-
self.log_line("失败: 网络限制 session=%s 会话不存在或已断开" % sid)
1054+
self.log_line(
1055+
"失败: 网络限制 pc_name=%s session=%s 会话不存在或已断开"
1056+
% (self._pc_name_for_session(sid), sid)
1057+
)
10311058
d.destroy()
10321059

10331060
bf = ttk.Frame(d)

0 commit comments

Comments
 (0)