56 lines
2.1 KiB
Python
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
|