66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
# main.py
|
|
from PyQt6.QtWidgets import QApplication, QWidget, QGridLayout, QVBoxLayout
|
|
from PyQt6.QtCore import QTimer
|
|
import sys
|
|
from loading_overlay import LoadingOverlay
|
|
from monitor_data import get_monitor_data
|
|
from monitor_card import MonitorCard # 카드 UI는 따로 분리해도 좋음
|
|
|
|
class Dashboard(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.setWindowTitle("Server Monitor Dashboard")
|
|
self.setFixedSize(960, 640)
|
|
|
|
self.cards = {}
|
|
self.titles = [
|
|
"CPU", "RAM", "Disk", "Uptime",
|
|
"CPU Temp", "GPU Temp", "GPU Usage", "Swap",
|
|
"Download", "Upload", "Alive", "Processes"
|
|
]
|
|
|
|
# 메인 레이아웃
|
|
self.layout = QVBoxLayout(self)
|
|
self.setLayout(self.layout)
|
|
|
|
# 카드 그리드
|
|
self.grid = QGridLayout()
|
|
self.grid.setSpacing(10)
|
|
self.layout.addLayout(self.grid)
|
|
|
|
# 카드 생성
|
|
for i, title in enumerate(self.titles):
|
|
row = i // 4
|
|
col = i % 4
|
|
card = MonitorCard(title)
|
|
self.grid.addWidget(card, row, col)
|
|
self.cards[title] = card
|
|
|
|
# 오버레이 생성
|
|
self.overlay = LoadingOverlay(self)
|
|
self.overlay.start()
|
|
|
|
# 데이터 수신 후
|
|
QTimer.singleShot(2000, self.finish_loading)
|
|
|
|
# 주기적 업데이트
|
|
self.timer = QTimer()
|
|
self.timer.timeout.connect(self.update_data)
|
|
self.timer.start(3000)
|
|
|
|
def finish_loading(self):
|
|
self.overlay.stop()
|
|
self.update_data()
|
|
|
|
def update_data(self):
|
|
data = get_monitor_data()
|
|
for key in self.titles:
|
|
self.cards[key].update_value(data.get(key, "--"))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
app = QApplication(sys.argv)
|
|
dashboard = Dashboard()
|
|
dashboard.show()
|
|
sys.exit(app.exec())
|