mirror of
https://git.mirrors.martin98.com/https://github.com/langgenius/dify.git
synced 2025-08-12 20:29:02 +08:00
feat: poolize the ops trace instance (#15947)
This commit is contained in:
parent
a91b780936
commit
46d235bca0
@ -8,6 +8,7 @@ from datetime import timedelta
|
|||||||
from typing import Any, Optional, Union
|
from typing import Any, Optional, Union
|
||||||
from uuid import UUID, uuid4
|
from uuid import UUID, uuid4
|
||||||
|
|
||||||
|
from cachetools import LRUCache
|
||||||
from flask import current_app
|
from flask import current_app
|
||||||
from sqlalchemy import select
|
from sqlalchemy import select
|
||||||
from sqlalchemy.orm import Session
|
from sqlalchemy.orm import Session
|
||||||
@ -70,6 +71,8 @@ provider_config_map: dict[str, dict[str, Any]] = {
|
|||||||
|
|
||||||
|
|
||||||
class OpsTraceManager:
|
class OpsTraceManager:
|
||||||
|
ops_trace_instances_cache: LRUCache = LRUCache(maxsize=128)
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def encrypt_tracing_config(
|
def encrypt_tracing_config(
|
||||||
cls, tenant_id: str, tracing_provider: str, tracing_config: dict, current_trace_config=None
|
cls, tenant_id: str, tracing_provider: str, tracing_config: dict, current_trace_config=None
|
||||||
@ -204,28 +207,32 @@ class OpsTraceManager:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
app_ops_trace_config = json.loads(app.tracing) if app.tracing else None
|
app_ops_trace_config = json.loads(app.tracing) if app.tracing else None
|
||||||
|
|
||||||
if app_ops_trace_config is None:
|
if app_ops_trace_config is None:
|
||||||
return None
|
return None
|
||||||
|
if not app_ops_trace_config.get("enabled"):
|
||||||
|
return None
|
||||||
|
|
||||||
tracing_provider = app_ops_trace_config.get("tracing_provider")
|
tracing_provider = app_ops_trace_config.get("tracing_provider")
|
||||||
|
|
||||||
if tracing_provider is None or tracing_provider not in provider_config_map:
|
if tracing_provider is None or tracing_provider not in provider_config_map:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
# decrypt_token
|
# decrypt_token
|
||||||
decrypt_trace_config = cls.get_decrypted_tracing_config(app_id, tracing_provider)
|
decrypt_trace_config = cls.get_decrypted_tracing_config(app_id, tracing_provider)
|
||||||
if app_ops_trace_config.get("enabled"):
|
if not decrypt_trace_config:
|
||||||
trace_instance, config_class = (
|
return None
|
||||||
provider_config_map[tracing_provider]["trace_instance"],
|
|
||||||
provider_config_map[tracing_provider]["config_class"],
|
|
||||||
)
|
|
||||||
if not decrypt_trace_config:
|
|
||||||
return None
|
|
||||||
tracing_instance = trace_instance(config_class(**decrypt_trace_config))
|
|
||||||
return tracing_instance
|
|
||||||
|
|
||||||
return None
|
trace_instance, config_class = (
|
||||||
|
provider_config_map[tracing_provider]["trace_instance"],
|
||||||
|
provider_config_map[tracing_provider]["config_class"],
|
||||||
|
)
|
||||||
|
decrypt_trace_config_key = str(decrypt_trace_config)
|
||||||
|
tracing_instance = cls.ops_trace_instances_cache.get(decrypt_trace_config_key)
|
||||||
|
if tracing_instance is None:
|
||||||
|
# create new tracing_instance and update the cache if it absent
|
||||||
|
tracing_instance = trace_instance(config_class(**decrypt_trace_config))
|
||||||
|
cls.ops_trace_instances_cache[decrypt_trace_config_key] = tracing_instance
|
||||||
|
logging.info(f"new tracing_instance for app_id: {app_id}")
|
||||||
|
return tracing_instance
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_app_config_through_message_id(cls, message_id: str):
|
def get_app_config_through_message_id(cls, message_id: str):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user