터치 패널 대시보드 주기와 메모리 카드 정리
This commit is contained in:
1 parent
a2a45a0118
commit
763d2c9e38
2 files changed
+44
-15
No files matched your search
+42
-13
@@ -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:
|
||||
|
||||
Reference in new issue
Block a user