Dieser Commit ist enthalten in:
Claude Project Manager
2025-07-08 13:13:46 +02:00
Ursprung d1667f9e0d
Commit 5f32daf3a4
15 geänderte Dateien mit 1139 neuen und 136 gelöschten Zeilen

Datei anzeigen

@ -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