diff options
author | Sunil Shetye | 2025-03-04 17:56:29 +0530 |
---|---|---|
committer | Sunil Shetye | 2025-03-05 17:50:30 +0530 |
commit | 58604d557b2f5b5a5764b61eb1c12f69e5790183 (patch) | |
tree | ba7f4a7e8ed1dc2965c30a57fc1d0f39d14402b1 | |
parent | 9b3196e4ca1bc345b1a925ba9eff75a6b3990586 (diff) | |
download | Common-Interface-Project-58604d557b2f5b5a5764b61eb1c12f69e5790183.tar.gz Common-Interface-Project-58604d557b2f5b5a5764b61eb1c12f69e5790183.tar.bz2 Common-Interface-Project-58604d557b2f5b5a5764b61eb1c12f69e5790183.zip |
replace task_id and file_obj with task
get task_id from task now
add debug
-rw-r--r-- | blocks/simulationAPI/helpers/ngspice_helper.py | 15 | ||||
-rw-r--r-- | blocks/simulationAPI/models.py | 4 | ||||
-rw-r--r-- | blocks/simulationAPI/serializers.py | 5 | ||||
-rw-r--r-- | blocks/simulationAPI/tasks.py | 23 |
4 files changed, 23 insertions, 24 deletions
diff --git a/blocks/simulationAPI/helpers/ngspice_helper.py b/blocks/simulationAPI/helpers/ngspice_helper.py index 9b011856..95cecd2a 100644 --- a/blocks/simulationAPI/helpers/ngspice_helper.py +++ b/blocks/simulationAPI/helpers/ngspice_helper.py @@ -85,11 +85,12 @@ def CreateXcos(file_path, parameters, task_id): return xcosfile -def ExecXml(task_id, file_obj): - file_path = file_obj.file.path +def ExecXml(task): + task_id = task.task_id + file_path = task.file.path current_dir = settings.MEDIA_ROOT + '/' + str(task_id) try: - xcosfile = CreateXml(file_path, file_obj.parameters, task_id) + xcosfile = CreateXml(file_path, task.parameters, task_id) (logfilefd, log_name) = mkstemp(prefix=datetime.now().strftime( 'scilab-log-%Y%m%d-'), suffix='.txt', dir=current_dir) @@ -97,8 +98,8 @@ def ExecXml(task_id, file_obj): os.dup2(logfilefd, LOGFILEFD) os.close(logfilefd) - file_obj.log_name = log_name - file_obj.save() + task.log_name = log_name + task.save() logger.info('will run %s %s> %s', SCILAB_CMD[0], LOGFILEFD, log_name) logger.info('running command %s', SCILAB_CMD[-1]) @@ -140,8 +141,8 @@ def ExecXml(task_id, file_obj): err = '\n'.join(re.split(r'\n+', err, maxlines + 1)[:maxlines]) logger.info('err=%s', err) - file_obj.returncode = proc.returncode - file_obj.save() + task.returncode = proc.returncode + task.save() return 'Streaming' except BaseException as e: diff --git a/blocks/simulationAPI/models.py b/blocks/simulationAPI/models.py index 0da06972..119d11be 100644 --- a/blocks/simulationAPI/models.py +++ b/blocks/simulationAPI/models.py @@ -35,10 +35,10 @@ class Session(models.Model): return if old_instance.app_name != self.app_name: - raise ValidationError("mismatch: Cannot update app name.") + raise ValidationError(f"mismatch: Cannot update app name {old_instance.app_name} != {self.app_name}.") if old_instance.expire_at <= timezone.now(): - raise ValidationError("mismatch: Cannot update expired session.") + raise ValidationError(f"mismatch: Cannot update expired session {old_instance.expire_at} <= {timezone.now()}.") raise ValidationError("mismatch: Cannot update.") diff --git a/blocks/simulationAPI/serializers.py b/blocks/simulationAPI/serializers.py index 2ff20309..596d8590 100644 --- a/blocks/simulationAPI/serializers.py +++ b/blocks/simulationAPI/serializers.py @@ -33,9 +33,8 @@ class TaskSerializer(serializers.HyperlinkedModelSerializer): postdata = post.dict() app_name = postdata.pop('app_name') parameters = json.dumps(postdata, separators=(',', ':')) - session, created = Session.objects.get_or_create(session_id=session_id, defaults={"app_name": app_name}) - task = Task.objects.create(session=session, - file=file, parameters=parameters) + session, created = Session.objects.get_or_create(session_id=session_id, app_name=app_name) + task = Task.objects.create(session=session, file=file, parameters=parameters) # logger.info('session: %s, task: %s', session, task) logger.info("Session: %s (created: %s), Task: %s", session, created, task) return task diff --git a/blocks/simulationAPI/tasks.py b/blocks/simulationAPI/tasks.py index 3c9aa4e6..6200f23f 100644 --- a/blocks/simulationAPI/tasks.py +++ b/blocks/simulationAPI/tasks.py @@ -1,45 +1,44 @@ -import traceback from celery import shared_task, current_task, states from celery.exceptions import Ignore from celery.utils.log import get_task_logger - -from simulationAPI.helpers import ngspice_helper -from simulationAPI.models import Task -import gevent from gevent.local import local from redis import Redis -from redis.exceptions import LockError +import traceback + from blocks.celery_tasks import app +from simulationAPI.helpers import ngspice_helper +from simulationAPI.models import Task logger = get_task_logger(__name__) greenlet_local = local() -def acquire_lock(session_id, timeout=1800): # Set lock timeout (10 minutes) + +def acquire_lock(session_id, timeout=1800): redis_client = Redis.from_url(app.conf.broker_url) greenlet_local.lock = redis_client.lock(f"simulation_lock:{session_id}", timeout=timeout) greenlet_local.lock.acquire(blocking=True) + def release_lock(): greenlet_local.lock.release() @shared_task def process_task(task_id): - file_obj = Task.objects.get(task_id=task_id) - session_id = file_obj.session.session_id + task = Task.objects.get(task_id=task_id) + session_id = task.session.session_id acquire_lock(session_id) # Prevent multiple runs per session try: - logger.info("Processing %s %s %s", - session_id, file_obj.file.path, file_obj.session.app_name) + session_id, task.file.path, task.session.app_name) current_task.update_state( state='PROGRESS', meta={'current_process': 'Started Processing File'}) - output = ngspice_helper.ExecXml(task_id, file_obj) + output = ngspice_helper.ExecXml(task) if output == "Streaming": state = 'STREAMING' current_process = 'Processed Xml, Streaming Output' |