import uuid from config import config from handlers.base import (get_access_key, get_app_id, get_current_user_email, get_debug_action, get_endpoint, get_override_ai_model, get_trace_id, get_user_id, get_user_token) from models.base import rds, with_session from models.edatask import EDATaskJob from tasks.celery_app import app from utils.logging import logging def get_queue_name_list(): queue_names = [] inspector = app.control.inspect() queues = inspector.active_queues() if not queues: return [] for _, qs in queues.items(): for i in qs: queue_names.append(i["name"]) return queue_names def get_queue_length(queue_name): return rds.llen(queue_name) or 0 def get_default_queue_length(): return get_queue_length("celery") def enqueue(fn, org_id, *args, **kwargs): job_id = uuid.uuid4().hex user_token = get_user_token() metrics = kwargs.pop("metrics", {}) metrics.update({ "org_id": org_id, "app_id": get_app_id(), "endpoint": get_endpoint(), "app_key": get_access_key(), "user_id": get_user_id(), "job_id": job_id, "debug_action": get_debug_action(), "user_token": user_token, "user_email": get_current_user_email(), "trace_id": get_trace_id(), "override_ai_model": get_override_ai_model(), }) kwargs["metrics"] = metrics with with_session() as s: edatask_job = EDATaskJob.create( s, org_id, job_id, "", {}, fn_name=fn.name, fn_args={"args": args, "kwargs": kwargs}, ) logging.info( "create eda job %s for job_id %s, fn, org_id, args, kwargs: %s, %s, %s, %s", edatask_job.id, job_id, fn, org_id, args, kwargs, ) fn.apply_async(args=args, kwargs=kwargs, task_id=job_id) return job_id