mirror of https://github.com/langgenius/dify.git
95 lines
2.9 KiB
Python
95 lines
2.9 KiB
Python
"""
|
|
Logstore extension for Dify application.
|
|
|
|
This extension initializes the logstore (Aliyun SLS) on application startup,
|
|
creating necessary projects, logstores, and indexes if they don't exist.
|
|
"""
|
|
|
|
import logging
|
|
import os
|
|
|
|
from dotenv import load_dotenv
|
|
|
|
from configs import dify_config
|
|
from dify_app import DifyApp
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
def is_enabled() -> bool:
|
|
"""
|
|
Check if logstore extension is enabled.
|
|
|
|
Logstore is considered enabled when:
|
|
1. All required Aliyun SLS environment variables are set
|
|
2. At least one repository configuration points to a logstore implementation
|
|
|
|
Returns:
|
|
True if logstore should be initialized, False otherwise
|
|
"""
|
|
# Load environment variables from .env file
|
|
load_dotenv()
|
|
|
|
# Check if Aliyun SLS connection parameters are configured
|
|
required_vars = [
|
|
"ALIYUN_SLS_ACCESS_KEY_ID",
|
|
"ALIYUN_SLS_ACCESS_KEY_SECRET",
|
|
"ALIYUN_SLS_ENDPOINT",
|
|
"ALIYUN_SLS_REGION",
|
|
"ALIYUN_SLS_PROJECT_NAME",
|
|
]
|
|
|
|
sls_vars_set = all(os.environ.get(var) for var in required_vars)
|
|
|
|
if not sls_vars_set:
|
|
return False
|
|
|
|
# Check if any repository configuration points to logstore implementation
|
|
repository_configs = [
|
|
dify_config.CORE_WORKFLOW_EXECUTION_REPOSITORY,
|
|
dify_config.CORE_WORKFLOW_NODE_EXECUTION_REPOSITORY,
|
|
dify_config.API_WORKFLOW_NODE_EXECUTION_REPOSITORY,
|
|
dify_config.API_WORKFLOW_RUN_REPOSITORY,
|
|
]
|
|
|
|
uses_logstore = any("logstore" in config.lower() for config in repository_configs)
|
|
|
|
if not uses_logstore:
|
|
return False
|
|
|
|
logger.info("Logstore extension enabled: SLS variables set and repository configured to use logstore")
|
|
return True
|
|
|
|
|
|
def init_app(app: DifyApp):
|
|
"""
|
|
Initialize logstore on application startup.
|
|
If initialization fails, the application continues running without logstore features.
|
|
|
|
Args:
|
|
app: The Dify application instance
|
|
"""
|
|
try:
|
|
from extensions.logstore.aliyun_logstore import AliyunLogStore
|
|
|
|
logger.info("Initializing Aliyun SLS Logstore...")
|
|
|
|
# Create logstore client and initialize resources
|
|
logstore_client = AliyunLogStore()
|
|
logstore_client.init_project_logstore()
|
|
|
|
app.extensions["logstore"] = logstore_client
|
|
|
|
logger.info("Logstore initialized successfully")
|
|
|
|
except Exception:
|
|
logger.exception(
|
|
"Logstore initialization failed. Configuration: endpoint=%s, region=%s, project=%s, timeout=%ss. "
|
|
"Application will continue but logstore features will NOT work.",
|
|
os.environ.get("ALIYUN_SLS_ENDPOINT"),
|
|
os.environ.get("ALIYUN_SLS_REGION"),
|
|
os.environ.get("ALIYUN_SLS_PROJECT_NAME"),
|
|
os.environ.get("ALIYUN_SLS_CHECK_CONNECTIVITY_TIMEOUT", "30"),
|
|
)
|
|
# Don't raise - allow application to continue even if logstore setup fails
|