Fixed sync user tasks .
All checks were successful
Docker hub build / docker (push) Successful in 5m36s

This commit is contained in:
AB from home.homenet
2025-08-08 14:35:19 +03:00
parent c148bb99dc
commit 402e4d84fc
2 changed files with 46 additions and 5 deletions

View File

@@ -125,7 +125,7 @@ class TaskExecutionLogAdmin(admin.ModelAdmin):
def task_name_display(self, obj): def task_name_display(self, obj):
task_names = { task_names = {
'sync_all_servers': '🔄 Sync All', 'sync_all_servers': '🔄 Sync All',
'sync_all_users_on_server': '👥 Server Sync', 'sync_server_users': '👥 Server Sync',
'sync_server_info': '⚙️ Server Info', 'sync_server_info': '⚙️ Server Info',
'sync_user_on_server': '👤 User Sync', 'sync_user_on_server': '👤 User Sync',
'cleanup_task_logs': '🧹 Cleanup', 'cleanup_task_logs': '🧹 Cleanup',
@@ -708,14 +708,14 @@ class ServerAdmin(PolymorphicParentModelAdmin):
return return
try: try:
from vpn.tasks import sync_all_users_on_server from vpn.tasks import sync_server_users
tasks_started = 0 tasks_started = 0
errors = [] errors = []
for server in queryset: for server in queryset:
try: try:
task = sync_all_users_on_server.delay(server.id) task = sync_server_users.delay(server.id)
tasks_started += 1 tasks_started += 1
self.message_user( self.message_user(
request, request,
@@ -2073,7 +2073,7 @@ try:
def task_name_display(self, obj): def task_name_display(self, obj):
task_names = { task_names = {
'sync_all_servers': '🔄 Sync All Servers', 'sync_all_servers': '🔄 Sync All Servers',
'sync_all_users_on_server': '👥 Sync Users on Server', 'sync_server_users': '👥 Sync Users on Server',
'sync_server_info': '⚙️ Sync Server Info', 'sync_server_info': '⚙️ Sync Server Info',
'sync_user_on_server': '👤 Sync User on Server', 'sync_user_on_server': '👤 Sync User on Server',
'cleanup_task_logs': '🧹 Cleanup Old Logs', 'cleanup_task_logs': '🧹 Cleanup Old Logs',

View File

@@ -705,10 +705,22 @@ def sync_server_users(self, server_id):
from vpn.models import User, ACL from vpn.models import User, ACL
from vpn.models_xray import UserSubscription from vpn.models_xray import UserSubscription
start_time = datetime.now()
task_id = self.request.id
try: try:
server = Server.objects.get(id=server_id) server = Server.objects.get(id=server_id)
real_server = server.get_real_instance() real_server = server.get_real_instance()
# Create initial log entry
create_task_log(
task_id=task_id,
task_name='sync_server_users',
action=f'Starting user sync for server {server.name}',
status='STARTED',
server=server
)
# Get all users who should have access to this server # Get all users who should have access to this server
# For Xray v2, users access through subscription groups # For Xray v2, users access through subscription groups
users_to_sync = User.objects.filter( users_to_sync = User.objects.filter(
@@ -719,17 +731,46 @@ def sync_server_users(self, server_id):
logger.info(f"Syncing {users_to_sync.count()} users for Xray server {server.name}") logger.info(f"Syncing {users_to_sync.count()} users for Xray server {server.name}")
added_count = 0 added_count = 0
failed_count = 0
for user in users_to_sync: for user in users_to_sync:
try: try:
if real_server.add_user(user): if real_server.add_user(user):
added_count += 1 added_count += 1
except Exception as e: except Exception as e:
failed_count += 1
logger.error(f"Failed to sync user {user.username} on server {server.name}: {e}") logger.error(f"Failed to sync user {user.username} on server {server.name}: {e}")
# Calculate execution time
execution_time = (datetime.now() - start_time).total_seconds()
# Create success log
create_task_log(
task_id=task_id,
task_name='sync_server_users',
action=f'Completed user sync for server {server.name}',
status='SUCCESS',
server=server,
message=f'Synced {added_count} of {users_to_sync.count()} users. Failed: {failed_count}',
execution_time=execution_time
)
logger.info(f"Successfully synced {added_count} users for server {server.name}") logger.info(f"Successfully synced {added_count} users for server {server.name}")
return {"users_added": added_count, "total_users": users_to_sync.count()} return {"users_added": added_count, "total_users": users_to_sync.count(), "failed": failed_count}
except Exception as e: except Exception as e:
# Calculate execution time
execution_time = (datetime.now() - start_time).total_seconds()
# Create failure log
create_task_log(
task_id=task_id,
task_name='sync_server_users',
action=f'Failed to sync users for server {server_id}',
status='FAILURE',
message=str(e),
execution_time=execution_time
)
logger.error(f"Error syncing users for server {server_id}: {e}") logger.error(f"Error syncing users for server {server_id}: {e}")
raise raise