59 lines
2.1 KiB
Python
59 lines
2.1 KiB
Python
import paramiko, time, json
|
|
|
|
k = paramiko.Ed25519Key.from_private_key_file(r'C:\Users\fabia\.ssh\id_ed25519')
|
|
c = paramiko.SSHClient()
|
|
c.set_missing_host_key_policy(paramiko.AutoAddPolicy())
|
|
c.connect('192.168.178.150', username='fabian', pkey=k, timeout=10)
|
|
print("Connected. Monitoring sampling progress...")
|
|
|
|
for i in range(40): # up to 10 minutes
|
|
# Check log for sampling progress
|
|
_, o, _ = c.exec_command('tail -5 /tmp/comfyui.log 2>/dev/null')
|
|
log = o.read().decode(errors='replace').strip()
|
|
|
|
# Check GPU temp
|
|
_, o, _ = c.exec_command('cat /sys/class/drm/card0/device/hwmon/hwmon*/temp1_input 2>/dev/null')
|
|
temp = o.read().decode().strip()
|
|
temp_c = int(temp) // 1000 if temp.isdigit() else '?'
|
|
|
|
# Check GPU usage
|
|
_, o, _ = c.exec_command('cat /sys/class/drm/card0/device/gpu_busy_percent 2>/dev/null')
|
|
gpu_pct = o.read().decode().strip()
|
|
|
|
# Check output dir for generated images
|
|
_, o, _ = c.exec_command('ls ~/ComfyUI/output/*.png 2>/dev/null')
|
|
files = o.read().decode().strip()
|
|
|
|
# Check queue
|
|
_, o, _ = c.exec_command('curl -s http://127.0.0.1:8188/queue 2>/dev/null')
|
|
queue_raw = o.read().decode().strip()
|
|
|
|
# Parse last log line for progress
|
|
last_line = log.split('\n')[-1] if log else ''
|
|
print(f"[{i*15:>3}s] GPU:{gpu_pct}% temp:{temp_c}C | {last_line[-120:]}")
|
|
|
|
if files:
|
|
print(f"\n*** IMAGE GENERATED! ***")
|
|
print(f"Files: {files}")
|
|
# Get last 10 lines of log for timing info
|
|
_, o, _ = c.exec_command('tail -10 /tmp/comfyui.log 2>/dev/null')
|
|
print(o.read().decode(errors='replace'))
|
|
break
|
|
|
|
try:
|
|
qdata = json.loads(queue_raw)
|
|
running = len(qdata.get('queue_running', []))
|
|
pending = len(qdata.get('queue_pending', []))
|
|
if running == 0 and pending == 0 and i > 3:
|
|
print("\nQueue empty - job finished or failed. Last 30 log lines:")
|
|
_, o, _ = c.exec_command('tail -30 /tmp/comfyui.log 2>/dev/null')
|
|
print(o.read().decode(errors='replace'))
|
|
break
|
|
except:
|
|
pass
|
|
|
|
time.sleep(15)
|
|
|
|
c.close()
|
|
print("Monitor done.")
|