summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSunil Shetye2025-03-04 17:56:29 +0530
committerSunil Shetye2025-03-05 17:50:30 +0530
commit58604d557b2f5b5a5764b61eb1c12f69e5790183 (patch)
treeba7f4a7e8ed1dc2965c30a57fc1d0f39d14402b1
parent9b3196e4ca1bc345b1a925ba9eff75a6b3990586 (diff)
downloadCommon-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.py15
-rw-r--r--blocks/simulationAPI/models.py4
-rw-r--r--blocks/simulationAPI/serializers.py5
-rw-r--r--blocks/simulationAPI/tasks.py23
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'