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