터치 패널 대시보드 주기와 메모리 카드 정리

This commit is contained in:
seo committed 2026-07-30 22:05:57 +09:00
1 parent a2a45a0118
commit 763d2c9e38
2 files changed
+44 -15

No files matched your search

+42 -13
View File
@@ -74,6 +74,22 @@ def cpu_temp():
return round(raw / 1000, 1) if raw > 0 else 0.0
def memory_percent():
rows = {}
for line in read_text("/proc/meminfo").splitlines():
if ":" not in line:
continue
key, value = line.split(":", 1)
parts = value.strip().split()
if parts and parts[0].isdigit():
rows[key] = int(parts[0])
total = rows.get("MemTotal", 0)
available = rows.get("MemAvailable", 0)
if total <= 0:
return 0.0
return round((total - available) / total * 100, 1)
def fan_paths():
for pwm in Path("/sys/devices/platform/cooling_fan/hwmon").glob("hwmon*/pwm1"):
base = pwm.parent
@@ -460,6 +476,10 @@ class TouchPanel(QMainWindow):
self.current_rates = {"wan": {"rx": 0.0, "tx": 0.0}}
self.disk_temp = None
self.current_pwm = read_int(self.fan["pwm"])
self.latest_temp = 0.0
self.latest_rpm = 0
self.latest_pwm = self.current_pwm
self.latest_percent = 0.0
self.temp_history = deque(maxlen=80)
self.rpm_history = deque(maxlen=80)
self.net_history = {"wan": {"rx": deque(maxlen=80), "tx": deque(maxlen=80)}}
@@ -473,9 +493,9 @@ class TouchPanel(QMainWindow):
self.sample_timer.timeout.connect(self.sample)
self.sample_timer.start(50)
self.graph_timer = QTimer(self)
self.graph_timer.timeout.connect(self.update_graphs)
self.graph_timer.start(500)
self.dashboard_timer = QTimer(self)
self.dashboard_timer.timeout.connect(self.update_dashboard)
self.dashboard_timer.start(1000)
self.pc_ping = QProcess(self)
self.pc_ping.finished.connect(self.pc_ping_finished)
@@ -495,6 +515,7 @@ class TouchPanel(QMainWindow):
self.sample()
self.ping_pc()
self.update_disk_temp()
self.update_dashboard()
def _build_ui(self):
root = QWidget()
@@ -541,7 +562,7 @@ class TouchPanel(QMainWindow):
metric_grid = QGridLayout()
metric_grid.setHorizontalSpacing(8)
metric_grid.setVerticalSpacing(8)
for index, (key, title) in enumerate([("rpm", "팬 RPM"), ("temp", "CPU 온도"), ("pwm", "PWM"), ("wan", "WAN")]):
for index, (key, title) in enumerate([("rpm", "팬 RPM"), ("temp", "CPU 온도"), ("pwm", "PWM"), ("mem", "메모리")]):
card = MetricCard(title)
self.metrics[key] = card
metric_grid.addWidget(card, 0, index)
@@ -617,9 +638,9 @@ class TouchPanel(QMainWindow):
self.last_net[key] = current
self.current_rates = rates
self.render(temp, rpm, pwm, percent, enable, groups, rates, activity, io_read_activity, io_write_activity, disk_error)
self.render_status(temp, rpm, pwm, percent, enable, groups, rates, activity, io_read_activity, io_write_activity, disk_error)
def render(self, temp, rpm, pwm, percent, enable, groups, rates, activity, io_read_activity, io_write_activity, disk_error):
def render_status(self, temp, rpm, pwm, percent, enable, groups, rates, activity, io_read_activity, io_write_activity, disk_error):
disk_temp_text = f"{self.disk_temp:.1f} C" if self.disk_temp is not None else "- C"
self.rows["io"].set_state(disk_temp_text, disk_error, io_read_activity, io_write_activity)
self.rows["wan"].set_state(self.iface_detail(groups["wan"]), activity["wan"]["error"], activity["wan"]["read"], activity["wan"]["write"])
@@ -627,22 +648,30 @@ class TouchPanel(QMainWindow):
self.rows["wifi24"].set_state(self.iface_detail(groups["wifi24"]), activity["wifi24"]["error"], activity["wifi24"]["read"], activity["wifi24"]["write"])
self.rows["wifi5"].set_state(self.iface_detail(groups["wifi5"]), activity["wifi5"]["error"], activity["wifi5"]["read"], activity["wifi5"]["write"])
self.latest_temp = temp
self.latest_rpm = rpm
self.latest_pwm = pwm
self.latest_percent = percent
del enable
def update_dashboard(self):
rpm = getattr(self, "latest_rpm", read_int(self.fan["rpm"]))
temp = getattr(self, "latest_temp", cpu_temp())
pwm = getattr(self, "latest_pwm", read_int(self.fan["pwm"]))
percent = getattr(self, "latest_percent", pwm / 255 * 100 if pwm > 0 else 0)
mem_percent = memory_percent()
self.metrics["rpm"].set_value(f"{rpm:,}")
self.metrics["temp"].set_value(f"{temp:.1f} C")
self.metrics["pwm"].set_value(f"{pwm} / {percent:.1f}%")
wan_factor, wan_unit = byte_rate_unit([rates["wan"]["rx"], rates["wan"]["tx"]])
rx_text = format_byte_rate(rates["wan"]["rx"], wan_factor, wan_unit)
tx_text = format_byte_rate(rates["wan"]["tx"], wan_factor, wan_unit)
self.metrics["wan"].set_value(f"{rx_text}/{tx_text}")
self.metrics["mem"].set_value(f"{mem_percent:.1f}%")
self.slider.blockSignals(True)
self.slider.setValue(pwm)
self.slider.blockSignals(False)
del enable
self.clock.setText(time.strftime("%H:%M:%S"))
self.latest_temp = temp
self.latest_rpm = rpm
self.update_graphs()
def ping_pc(self):
if self.pc_ping.state() != QProcess.NotRunning: