sage/bin/backend_accounting.py
yumoqing 4927f7f330 refactor: backend_accounting.py now uses product_management module
- Import from product_management.get_manager() instead of llmage.accounting
- Also loads load_llmage for pricing/discount initialization
2026-07-07 12:27:48 +08:00

75 lines
2.1 KiB
Python

#!/usr/bin/env python
"""
独立运行的产品后台计费程序。
产品记账已从 llmage 迁移到 product_management 模块。
"""
import os
import sys
import asyncio
import signal
# 切换到 Sage 工作目录
os.chdir(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'py3', 'lib', 'python3.10', 'site-packages'))
sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'pkgs'))
from appPublic.folderUtils import ProgramPath
from appPublic.jsonConfig import getConfig
from sqlor.dbpools import DBPools
from ahserver.serverenv import ServerEnv
from ahserver.globalEnv import initEnv
from appPublic.log import MyLogger, debug, exception, info
from accounting.init import load_accounting
from appbase.init import load_appbase
from llmage.init import load_llmage
from pricing.init import load_pricing
from discount.init import load_discount
from dapi.init import load_dapi
from product_management import get_manager
# 初始化配置
p = ProgramPath()
config = getConfig(NS={'workdir': os.getcwd(), 'ProgramPath': p})
DBPools(config.databases)
def get_module_dbname(m):
return 'sage'
def main():
logger = MyLogger('backend_accounting', levelname='info',
logfile=os.path.join(os.getcwd(), 'logs', 'backend_accounting.log'))
info(f'Backend accounting process started (PID: {os.getpid()})')
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
def handle_signal(signum, frame):
info(f'Received signal {signum}, shutting down...')
for task in asyncio.all_tasks(loop):
task.cancel()
loop.stop()
signal.signal(signal.SIGTERM, handle_signal)
signal.signal(signal.SIGINT, handle_signal)
initEnv()
env = ServerEnv()
env.get_module_dbname = get_module_dbname
load_appbase()
load_accounting()
load_pricing()
load_discount()
load_dapi()
load_llmage()
manager = get_manager()
try:
loop.run_until_complete(manager.backend_accounting())
except asyncio.CancelledError:
pass
finally:
loop.close()
info('Backend accounting process stopped.')
if __name__ == '__main__':
main()