added gui for nginx deployer app
This commit is contained in:
164
app/nginx_deploy_gui.py
Normal file
164
app/nginx_deploy_gui.py
Normal file
@@ -0,0 +1,164 @@
|
||||
import sys
|
||||
import os
|
||||
from PySide6.QtWidgets import (
|
||||
QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,
|
||||
QPushButton, QLineEdit, QTextEdit, QLabel, QFileDialog, QStatusBar
|
||||
)
|
||||
from PySide6.QtCore import Qt
|
||||
from datetime import datetime
|
||||
|
||||
LOG_FILE = "logs/nginx_deploy_gui.log"
|
||||
|
||||
class Logger:
|
||||
def __init__(self, log_widget):
|
||||
self.log_widget = log_widget
|
||||
self.log_file = open(LOG_FILE, "a")
|
||||
|
||||
def log(self, message):
|
||||
timestamp = datetime.now().strftime("[%Y-%m-%d %H:%M:%S]")
|
||||
full_message = f"{timestamp} {message}\n"
|
||||
self.log_widget.append(full_message)
|
||||
self.log_file.write(full_message)
|
||||
self.log_file.flush()
|
||||
|
||||
def close(self):
|
||||
self.log_file.close()
|
||||
|
||||
class DeploymentController:
|
||||
def __init__(self, logger):
|
||||
self.logger = logger
|
||||
# These will be set by the UI
|
||||
self.ssh_key = None
|
||||
self.config_dir = None
|
||||
|
||||
def preflight_checks(self):
|
||||
self.logger.log("Running pre-flight checks...")
|
||||
# Stub: implement actual checks
|
||||
self.logger.log("Pre-flight checks complete.")
|
||||
|
||||
def scan_domains(self):
|
||||
self.logger.log("Scanning for domains in configs...")
|
||||
# Stub: implement domain scan
|
||||
self.logger.log("Domain scan complete.")
|
||||
|
||||
def transfer_files(self):
|
||||
self.logger.log("Transferring files to remote server...")
|
||||
# Stub: implement file transfer
|
||||
self.logger.log("File transfer complete.")
|
||||
|
||||
def remote_ops(self):
|
||||
self.logger.log("Performing remote file operations...")
|
||||
# Stub: implement remote ops
|
||||
self.logger.log("Remote operations complete.")
|
||||
|
||||
def run_certbot(self):
|
||||
self.logger.log("Prompting user for Certbot run...")
|
||||
# Stub: implement certbot prompt and run
|
||||
self.logger.log("Certbot step complete.")
|
||||
|
||||
def cleanup(self):
|
||||
self.logger.log("Performing cleanup...")
|
||||
# Stub: implement cleanup
|
||||
self.logger.log("Cleanup complete.")
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
self.setWindowTitle("NGINX Deployment Controller")
|
||||
self.resize(700, 500)
|
||||
self.central = QWidget()
|
||||
self.setCentralWidget(self.central)
|
||||
self.layout = QVBoxLayout(self.central)
|
||||
|
||||
# SSH Key Picker
|
||||
self.ssh_key_line = QLineEdit()
|
||||
self.ssh_key_browse = QPushButton("Browse")
|
||||
self.ssh_key_browse.clicked.connect(self.browse_ssh_key)
|
||||
ssh_key_layout = QHBoxLayout()
|
||||
ssh_key_layout.addWidget(QLabel("SSH Key:"))
|
||||
ssh_key_layout.addWidget(self.ssh_key_line)
|
||||
ssh_key_layout.addWidget(self.ssh_key_browse)
|
||||
self.layout.addLayout(ssh_key_layout)
|
||||
|
||||
# Config Directory Picker
|
||||
self.config_dir_line = QLineEdit()
|
||||
self.config_dir_browse = QPushButton("Browse")
|
||||
self.config_dir_browse.clicked.connect(self.browse_config_dir)
|
||||
config_dir_layout = QHBoxLayout()
|
||||
config_dir_layout.addWidget(QLabel("Config Dir:"))
|
||||
config_dir_layout.addWidget(self.config_dir_line)
|
||||
config_dir_layout.addWidget(self.config_dir_browse)
|
||||
self.layout.addLayout(config_dir_layout)
|
||||
|
||||
# Stage Buttons
|
||||
self.buttons = {}
|
||||
stages = [
|
||||
("Pre-flight Checks", self.preflight_checks),
|
||||
("Scan Domains", self.scan_domains),
|
||||
("Transfer Files", self.transfer_files),
|
||||
("Remote Ops", self.remote_ops),
|
||||
("Run Certbot", self.run_certbot),
|
||||
("Cleanup", self.cleanup),
|
||||
]
|
||||
btn_layout = QHBoxLayout()
|
||||
for label, handler in stages:
|
||||
btn = QPushButton(label)
|
||||
btn.clicked.connect(handler)
|
||||
btn_layout.addWidget(btn)
|
||||
self.buttons[label] = btn
|
||||
self.layout.addLayout(btn_layout)
|
||||
|
||||
# Log Output
|
||||
self.log_widget = QTextEdit()
|
||||
self.log_widget.setReadOnly(True)
|
||||
self.layout.addWidget(self.log_widget)
|
||||
|
||||
# Status Bar
|
||||
self.status = QStatusBar()
|
||||
self.setStatusBar(self.status)
|
||||
|
||||
# Logger and Controller
|
||||
self.logger = Logger(self.log_widget)
|
||||
self.controller = DeploymentController(self.logger)
|
||||
|
||||
def browse_ssh_key(self):
|
||||
file, _ = QFileDialog.getOpenFileName(self, "Select SSH Key", os.path.expanduser("~"))
|
||||
if file:
|
||||
self.ssh_key_line.setText(file)
|
||||
self.controller.ssh_key = file
|
||||
self.status.showMessage(f"SSH Key set: {file}", 3000)
|
||||
|
||||
def browse_config_dir(self):
|
||||
dir = QFileDialog.getExistingDirectory(self, "Select Config Directory", os.path.expanduser("~"))
|
||||
if dir:
|
||||
self.config_dir_line.setText(dir)
|
||||
self.controller.config_dir = dir
|
||||
self.status.showMessage(f"Config directory set: {dir}", 3000)
|
||||
|
||||
def preflight_checks(self):
|
||||
self.controller.preflight_checks()
|
||||
|
||||
def scan_domains(self):
|
||||
self.controller.scan_domains()
|
||||
|
||||
def transfer_files(self):
|
||||
self.controller.transfer_files()
|
||||
|
||||
def remote_ops(self):
|
||||
self.controller.remote_ops()
|
||||
|
||||
def run_certbot(self):
|
||||
self.controller.run_certbot()
|
||||
|
||||
def cleanup(self):
|
||||
self.controller.cleanup()
|
||||
|
||||
def closeEvent(self, event):
|
||||
self.logger.close()
|
||||
super().closeEvent(event)
|
||||
|
||||
if __name__ == "__main__":
|
||||
app = QApplication(sys.argv)
|
||||
window = MainWindow()
|
||||
window.show()
|
||||
sys.exit(app.exec())
|
||||
Reference in New Issue
Block a user