From e32bb8e7401dd0a131dc468f00cb15fc4a0766b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=9A=93=E6=9C=88=E5=BD=92=E5=B0=98?= Date: Thu, 13 Feb 2025 18:04:42 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=BF=9E=E6=8E=A5=E6=8C=82=E8=BD=BDela?= =?UTF-8?q?sticsearch?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/login.py | 2 +- app.py | 4 ++++ config/env.py | 39 ++++++++++++++++++++++++++++++++ config/get_ElasticSearch.py | 44 +++++++++++++++++++++++++++++++++++++ 4 files changed, 88 insertions(+), 1 deletion(-) create mode 100644 config/get_ElasticSearch.py diff --git a/api/login.py b/api/login.py index 79a6fef..14a29ad 100644 --- a/api/login.py +++ b/api/login.py @@ -151,7 +151,7 @@ async def get_captcha(request: Request): ) register_enabled = ( True - if await request.app.state.redis.get(f'{RedisKeyConfig.SYSTEM_CONFIG.key}:register_enabled') + if await request.app.state.redis.get(f'{RedisKeyConfig.SYSTEM_CONFIG.key}:account_register_enabled') == 'true' else False ) diff --git a/app.py b/app.py index 04bde64..abfb1ac 100644 --- a/app.py +++ b/app.py @@ -25,6 +25,7 @@ from api.server import serverAPI from api.user import userAPI from config.database import init_db, close_db from config.env import AppConfig +from config.get_ElasticSearch import ElasticSearch from config.get_redis import Redis from exceptions.handle import handle_exception from middlewares.handle import handle_middleware @@ -38,9 +39,12 @@ async def lifespan(app: FastAPI): logger.info(f'{AppConfig.app_name}启动成功') await init_db() await Redis.init_system_config(app) + logger.info(f'系统配置初始化成功') + app.state.es = await ElasticSearch.init_elasticsearch() yield await close_db() await Redis.close_redis_pool(app) + await app.state.es.close() app = FastAPI( diff --git a/config/env.py b/config/env.py index 971b26b..c225ed7 100644 --- a/config/env.py +++ b/config/env.py @@ -403,6 +403,32 @@ class CachePathConfig: PATHSTR = 'caches' +class ElasticSearchSettings(BaseSettings): + """ + ElasticSearch配置 + """ + ES_HOST: str = '127.0.0.1' + """ + ElasticSearch 连接路径 + """ + ES_PORT: int = 9200 + """ + ElasticSearch 连接端口 + """ + ES_USER: str = 'elastic' + """ + ElasticSearch 连接用户名 + """ + ES_PASSWORD: str = 'changeme' + """ + ElasticSearch 连接密码 + """ + ES_INDEX: str = 'test' + """ + ElasticSearch 索引名称 + """ + + class GetConfig: """ 获取配置类,用于集中管理和获取应用的所有配置。 @@ -484,6 +510,16 @@ class GetConfig: # 实例化地图配置 return MapSettings() + @lru_cache() + def get_elasticsearch_config(self) -> 'ElasticSearchSettings': + """ + 获取 ElasticSearch 配置。 + - 返回 ElasticSearchConfig 的实例。 + - 使用 lru_cache 缓存结果,避免重复实例化。 + """ + # 实例化 ElasticSearch 配置 + return ElasticSearchSettings() + @staticmethod def parse_cli_args(): """ @@ -538,3 +574,6 @@ EmailConfig = get_config.get_email_config() # 地图配置 MapConfig = get_config.get_map_config() + +# ElasticSearch 配置 +ElasticSearchConfig = get_config.get_elasticsearch_config() diff --git a/config/get_ElasticSearch.py b/config/get_ElasticSearch.py new file mode 100644 index 0000000..4485635 --- /dev/null +++ b/config/get_ElasticSearch.py @@ -0,0 +1,44 @@ +# _*_ coding : UTF-8 _*_ +# @Time : 2025/02/13 17:28 +# @UpdateTime : 2025/02/13 17:28 +# @Author : sonder +# @File : get_ElasticSearch.py +# @Software : PyCharm +# @Comment : 本程序 + +from elasticsearch import AsyncElasticsearch +from config.env import ElasticSearchConfig +from utils.log import logger + + +class ElasticSearch: + """ + ElasticSearch工具类 + """ + + @classmethod + async def init_elasticsearch(cls): + """ + 初始化elasticsearch + """ + try: + # 创建异步Elasticsearch客户端 + es = AsyncElasticsearch( + hosts=[{ + "scheme": "http", # 传递scheme + "host": ElasticSearchConfig.ES_HOST, # 传递主机名 + "port": ElasticSearchConfig.ES_PORT, # 传递端口 + }], + http_auth=(ElasticSearchConfig.ES_USER, ElasticSearchConfig.ES_PASSWORD), # 传递http_auth + ) + + # 检查连接是否成功 + if await es.ping(): + logger.success(f"ElasticSearch初始化成功: {ElasticSearchConfig.ES_HOST}:{ElasticSearchConfig.ES_PORT}") + else: + logger.warning("ElasticSearch初始化失败:无法ping通服务器") + es = None + return es + except Exception as e: + logger.error(f"ElasticSearch初始化失败: {e}") + return None