feat: enhance Redis action handling; add dynamic context for actions and support for expiration time
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				Build Backend Application and Docker Image / build-docker (push) Successful in 9m3s
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	Build Backend Application and Docker Image / build-docker (push) Successful in 9m3s
				
			This commit is contained in:
		
							parent
							
								
									769371a1a3
								
							
						
					
					
						commit
						f50585f26d
					
				
					 2 changed files with 46 additions and 26 deletions
				
			
		| 
						 | 
				
			
			@ -8,6 +8,8 @@ import zipfile
 | 
			
		|||
import shutil
 | 
			
		||||
import traceback
 | 
			
		||||
import redis
 | 
			
		||||
import time
 | 
			
		||||
import uuid
 | 
			
		||||
from ultralytics import YOLO
 | 
			
		||||
from urllib.parse import urlparse
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -195,16 +197,30 @@ def execute_actions(node, frame, detection_result):
 | 
			
		|||
    if not node["redis_client"] or not node["actions"]:
 | 
			
		||||
        return
 | 
			
		||||
 | 
			
		||||
    # Create a dynamic context for this detection event
 | 
			
		||||
    action_context = {
 | 
			
		||||
        **detection_result,
 | 
			
		||||
        "timestamp_ms": int(time.time() * 1000),
 | 
			
		||||
        "uuid": str(uuid.uuid4()),
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    for action in node["actions"]:
 | 
			
		||||
        try:
 | 
			
		||||
            if action["type"] == "redis_save_image":
 | 
			
		||||
                key = action["key"].format(**detection_result)
 | 
			
		||||
                key = action["key"].format(**action_context)
 | 
			
		||||
                _, buffer = cv2.imencode('.jpg', frame)
 | 
			
		||||
                node["redis_client"].set(key, buffer.tobytes())
 | 
			
		||||
                logger.info(f"Saved image to Redis with key: {key}")
 | 
			
		||||
                expire_seconds = action.get("expire_seconds")
 | 
			
		||||
                if expire_seconds:
 | 
			
		||||
                    node["redis_client"].setex(key, expire_seconds, buffer.tobytes())
 | 
			
		||||
                    logger.info(f"Saved image to Redis with key: {key} (expires in {expire_seconds}s)")
 | 
			
		||||
                else:
 | 
			
		||||
                    node["redis_client"].set(key, buffer.tobytes())
 | 
			
		||||
                    logger.info(f"Saved image to Redis with key: {key}")
 | 
			
		||||
                # Add the generated key to the context for subsequent actions
 | 
			
		||||
                action_context["image_key"] = key
 | 
			
		||||
            elif action["type"] == "redis_publish":
 | 
			
		||||
                channel = action["channel"]
 | 
			
		||||
                message = action["message"].format(**detection_result)
 | 
			
		||||
                message = action["message"].format(**action_context)
 | 
			
		||||
                node["redis_client"].publish(channel, message)
 | 
			
		||||
                logger.info(f"Published message to Redis channel '{channel}': {message}")
 | 
			
		||||
        except Exception as e:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue