Files
SMANAGE/gvsds/apps/msync/apps.py
T
2026-06-16 11:55:14 +08:00

56 lines
2.1 KiB
Python

from django.apps import AppConfig
class MsyncConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'gvsds.apps.msync'
verbose_name = '微服务通信'
verbose_name_plural = '微服务通信'
def ready(self):
# 仅在主进程启动时确保 gvsds-master 节点存在
import os
if os.environ.get('RUN_MAIN') == 'true' or not os.environ.get('RUN_MAIN'):
try:
self._ensure_master_node()
except Exception:
pass # 数据库可能尚未迁移
def _ensure_master_node(self):
from gvsds.apps.msync.models import ServiceNode, _utcnow
from gvsds.app_config import get as _app_get
service_domain = _app_get('msync', 'SERVICE_DOMAIN', fallback='https://www.gvsds.com')
master_uuid = uuid.UUID('00000000-0000-0000-0000-000000000001')
try:
node = ServiceNode.objects.get(ServiceName='gvsds-master')
# 更新心跳、状态和元数据
node.ServiceStatus = 1
node.ServiceScope = ['*']
node.ServiceDomain = service_domain
node.ServiceType = 1
node.ServiceMetadata = {'DBName': 'Users'}
node.LastHeartbeat = _utcnow()
node.save(update_fields=['ServiceStatus', 'ServiceScope', 'ServiceDomain', 'ServiceType', 'ServiceMetadata', 'LastHeartbeat'])
except ServiceNode.DoesNotExist:
import bcrypt
secret = 'gvsds-master-internal'
secret_hash = bcrypt.hashpw(secret.encode('utf-8'), bcrypt.gensalt()).decode('utf-8')
node = ServiceNode(
ServiceUUID=master_uuid.bytes,
ServiceName='gvsds-master',
ServiceDomain=service_domain,
ServiceSecretHash=secret_hash,
ServiceScope=['*'],
ServiceStatus=1,
ServiceType=1,
ServiceMetadata={'DBName': 'Users'},
LastHeartbeat=_utcnow(),
)
node.SetSecret(secret)
node.save()
import uuid