Files
TermiNexus 53af9884df refactor(msync): msync 整体搬迁至 SDK 并消除对 gvsds 的依赖
- msync 全部实现迁入 gvsdsdk(models/registry/ogm/transaction/auth +
  Django 集成层 middleware/sio/views/serializers/urls/admin/apps/migrations)
- 新增 gvsdsdk/secrets.py(secrets.ini 读取)与 serializer_base.py
  (PascalCase DRF 序列化器基类)
- msync 0001 迁移改用 gvsdsdk.models.UUIDField 并与模型 deep_deconstruct
  完全对齐(消除 makemigrations 漂移),dependencies 置空
- msync apps.py 移除 gvsds.app_config 软依赖,域名仅经环境变量/settings 解析
- 验证:屏蔽 gvsds 包后 50 个 gvsdsdk 子模块独立导入通过
2026-08-10 22:23:52 +08:00

69 lines
2.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from django.apps import AppConfig
class MsyncConfig(AppConfig):
default_auto_field = 'django.db.models.BigAutoField'
name = 'gvsdsdk.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 gvsdsdk.msync.models import ServiceNode, _utcnow
import uuid
service_domain = self._resolve_service_domain()
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()
@staticmethod
def _resolve_service_domain():
"""解析主服务器公开域名:环境变量 → settings → 默认值(不依赖 gvsds)"""
import os
domain = os.environ.get('MSYNC_SERVICE_DOMAIN') or os.environ.get('APP_MSYNC_SERVICE_DOMAIN')
if domain:
return domain
try:
from django.conf import settings as _settings
domain = getattr(_settings, 'GVSDSDK_MSYNC_MASTER_URL', None)
if domain:
return str(domain).rstrip('/')
except Exception:
pass
return 'https://www.gvsds.com'