mirror of
				https://github.com/langgenius/dify.git
				synced 2025-11-04 04:43:09 +00: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 uuid import UUID, uuid4
 | 
			
		||||
 | 
			
		||||
from cachetools import LRUCache
 | 
			
		||||
from flask import current_app
 | 
			
		||||
from sqlalchemy import select
 | 
			
		||||
from sqlalchemy.orm import Session
 | 
			
		||||
@ -70,6 +71,8 @@ provider_config_map: dict[str, dict[str, Any]] = {
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class OpsTraceManager:
 | 
			
		||||
    ops_trace_instances_cache: LRUCache = LRUCache(maxsize=128)
 | 
			
		||||
 | 
			
		||||
    @classmethod
 | 
			
		||||
    def encrypt_tracing_config(
 | 
			
		||||
        cls, tenant_id: str, tracing_provider: str, tracing_config: dict, current_trace_config=None
 | 
			
		||||
@ -204,28 +207,32 @@ class OpsTraceManager:
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        app_ops_trace_config = json.loads(app.tracing) if app.tracing else None
 | 
			
		||||
 | 
			
		||||
        if app_ops_trace_config is None:
 | 
			
		||||
            return None
 | 
			
		||||
        if not app_ops_trace_config.get("enabled"):
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        tracing_provider = app_ops_trace_config.get("tracing_provider")
 | 
			
		||||
 | 
			
		||||
        if tracing_provider is None or tracing_provider not in provider_config_map:
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        # decrypt_token
 | 
			
		||||
        decrypt_trace_config = cls.get_decrypted_tracing_config(app_id, tracing_provider)
 | 
			
		||||
        if app_ops_trace_config.get("enabled"):
 | 
			
		||||
            trace_instance, config_class = (
 | 
			
		||||
                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
 | 
			
		||||
        if not decrypt_trace_config:
 | 
			
		||||
            return None
 | 
			
		||||
 | 
			
		||||
        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
 | 
			
		||||
    def get_app_config_through_message_id(cls, message_id: str):
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user