Status LED
Dieser Commit ist enthalten in:
@ -96,6 +96,9 @@ class MainWindow:
|
||||
# Start periodic status check after a delay
|
||||
self.root.after(30000, self.check_process_status) # Start after 30 seconds
|
||||
|
||||
# Check service status immediately on start
|
||||
self.check_service_status()
|
||||
|
||||
# Initialize activity sync
|
||||
self.init_activity_sync()
|
||||
|
||||
@ -460,6 +463,9 @@ class MainWindow:
|
||||
elif project.id == "vps-docker-permanent":
|
||||
# Handle VPS Docker
|
||||
self.open_vps_docker()
|
||||
elif project.id == "activity-server-permanent":
|
||||
# Handle Activity Server
|
||||
self.open_activity_server()
|
||||
else:
|
||||
# Check if already running
|
||||
if self.process_tracker.is_running(project.id):
|
||||
@ -641,6 +647,51 @@ class MainWindow:
|
||||
|
||||
# Monitor the process
|
||||
self.monitor_process("vps-docker-permanent", process)
|
||||
|
||||
def open_activity_server(self):
|
||||
"""Open Activity Server connection"""
|
||||
# Check if already running
|
||||
if self.process_tracker.is_running("activity-server-permanent"):
|
||||
self.update_status("Activity Server connection already active", error=True)
|
||||
return
|
||||
|
||||
# Create connection script for Activity Server
|
||||
script = self.vps_connection.create_activity_server_script()
|
||||
import tempfile
|
||||
with tempfile.NamedTemporaryFile(mode='w', suffix='.bat', delete=False) as f:
|
||||
f.write(script)
|
||||
script_path = f.name
|
||||
|
||||
# Launch terminal
|
||||
import subprocess
|
||||
if os.path.exists(r"C:\Windows\System32\wt.exe"):
|
||||
process = subprocess.Popen([
|
||||
"wt.exe", "-w", "0", "new-tab",
|
||||
"--title", "CPM Activity Server",
|
||||
"--", "cmd", "/c", script_path
|
||||
])
|
||||
else:
|
||||
process = subprocess.Popen(['cmd', '/c', 'start', 'CPM Activity Server', script_path])
|
||||
|
||||
# Track the process
|
||||
self.process_manager.processes["activity-server-permanent"] = process
|
||||
self.process_manager.save_process_data()
|
||||
self.process_tracker.set_running("activity-server-permanent")
|
||||
|
||||
# Update tile status immediately
|
||||
if "activity-server-permanent" in self.project_tiles:
|
||||
self.project_tiles["activity-server-permanent"].update_status(True)
|
||||
|
||||
self.update_status("Connected to Activity Server")
|
||||
|
||||
# Update Activity Server project
|
||||
activity_project = self.project_manager.get_project("activity-server-permanent")
|
||||
if activity_project:
|
||||
activity_project.update_last_accessed()
|
||||
self.project_manager.save_projects()
|
||||
|
||||
# Monitor the process
|
||||
self.monitor_process("activity-server-permanent", process)
|
||||
|
||||
def open_readme(self, project: Project):
|
||||
"""Open project README"""
|
||||
@ -1200,6 +1251,54 @@ class MainWindow:
|
||||
# Schedule next check in 30 seconds (less frequent)
|
||||
self.root.after(30000, self.check_process_status)
|
||||
|
||||
# Also check service status
|
||||
self.check_service_status()
|
||||
|
||||
def check_service_status(self):
|
||||
"""Check status of Activity Server and Admin Panel"""
|
||||
import threading
|
||||
|
||||
def check_services():
|
||||
# Check Activity Server
|
||||
activity_status = self.check_activity_server_status()
|
||||
if "activity-server-permanent" in self.project_tiles:
|
||||
self.root.after(0, lambda: self.project_tiles["activity-server-permanent"].update_service_status(activity_status))
|
||||
|
||||
# Check Admin Panel
|
||||
admin_status = self.check_admin_panel_status()
|
||||
if "admin-panel-permanent" in self.project_tiles:
|
||||
self.root.after(0, lambda: self.project_tiles["admin-panel-permanent"].update_service_status(admin_status))
|
||||
|
||||
# Run in background thread
|
||||
threading.Thread(target=check_services, daemon=True).start()
|
||||
|
||||
# Schedule next check in 60 seconds
|
||||
self.root.after(60000, self.check_service_status)
|
||||
|
||||
def check_activity_server_status(self) -> bool:
|
||||
"""Check if Activity Server is running"""
|
||||
import requests
|
||||
try:
|
||||
# Activity Server runs on port 3001
|
||||
# Check /api/activities endpoint - returns 401 when running (needs auth)
|
||||
response = requests.get("http://91.99.192.14:3001/api/activities", timeout=5)
|
||||
# 401 means server is running but needs authentication
|
||||
return response.status_code in [200, 401, 403]
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
def check_admin_panel_status(self) -> bool:
|
||||
"""Check if Admin Panel is accessible"""
|
||||
import requests
|
||||
try:
|
||||
# Admin Panel runs on port 80 (not 8082)
|
||||
response = requests.get("http://91.99.192.14:80/", timeout=5)
|
||||
return response.status_code in [200, 301, 302] # OK or redirects
|
||||
except:
|
||||
pass
|
||||
return False
|
||||
|
||||
def open_gitea_window(self):
|
||||
"""Open Gitea integration window"""
|
||||
# Create Gitea window if not already open
|
||||
|
||||
In neuem Issue referenzieren
Einen Benutzer sperren