X-Git-Url: http://mmka.chem.univ.gda.pl/gitweb/?a=blobdiff_plain;f=qcg%2Fservice.py;h=665863898a6d43f7a8ae0d5b1175d77bdaabb4da;hb=a5eea24f30969c1434c7743516f0195aa4bc53ae;hp=fb312c7bf1be0386ecd833dc51964c3682c6a79a;hpb=3e5a486378702cab1366d377240a6f405d71a078;p=qcg-portal.git diff --git a/qcg/service.py b/qcg/service.py index fb312c7..6658638 100644 --- a/qcg/service.py +++ b/qcg/service.py @@ -3,9 +3,10 @@ import time from django.db import transaction from django.utils.timezone import now - +from pyqcg import QCG +from pyqcg.description import JobDescription from pyqcg.service import Registry -from pyqcg.utils import Credential, TimePeriod +from pyqcg.utils import Credential, TimePeriod, JobStatus, TaskStatus logger = logging.getLogger(__name__) @@ -14,6 +15,7 @@ logger = logging.getLogger(__name__) @transaction.atomic def update_user_data(user, proxy): ts = time.time() + QCG.start() from qcg.models import User, Job, Task, Allocation, NodeInfo credential = Credential(proxy) @@ -28,7 +30,8 @@ def update_user_data(user, proxy): # Jobs ################################### jts = time.time() - jobs = registry.jobs(**changed_filter) + jobs = registry.jobs(stats=[v for k, v in vars(JobStatus).iteritems() if not k.startswith('__')], + **changed_filter) jte = time.time() jobs_count = 0 @@ -43,7 +46,8 @@ def update_user_data(user, proxy): # Tasks ################################### tts = time.time() - tasks = registry.tasks(**changed_filter) + tasks = registry.tasks(stats=[v for k, v in vars(TaskStatus).iteritems() if not k.startswith('__')], + **changed_filter) tte = time.time() jobs_cache = {j.job_id: j for j in Job.objects.filter(owner=user)} @@ -75,3 +79,39 @@ def update_user_data(user, proxy): elapsed_py = elapsed - elapsed_jobs - elapsed_tasks logger.info('(%.3f) USER = %s, JOBS = %s (%.3f), TASKS = %s (%.3f), TIME = %.3f', elapsed, user, jobs_count, elapsed_jobs, task_count, elapsed_tasks, elapsed_py) + + +def submit_job(params, proxy): + # print params + + QCG.start() + desc = JobDescription(Credential(proxy)) + + direct_map = ('env_variables', 'executable', 'arguments', 'note', 'grant', 'hosts', 'properties', 'queue', 'procs', + 'wall_time', 'memory', 'memory_per_slot', 'modules', 'input', 'stage_in', 'native', 'notify', + 'preprocess', 'postprocess', 'persistent') + + for name in direct_map: + if params[name]: + setattr(desc, name, params[name]) + + if params['application']: + desc.set_application(*params['application']) + if params['nodes']: + desc.set_nodes(*params['nodes']) + if params['reservation']: + desc.set_reservation(params['reservation']) + if params['watch_output']: + desc.set_watch_output(params['watch_output'], params['watch_output_pattern']) + # TODO script + # TODO stage_out + # TODO monitoring + + # for prop in direct_map + ('application', 'nodes', 'env_variables', 'reservation', 'watch_output'): + # print prop, type(getattr(desc, prop)), repr(getattr(desc, prop)) + + # print desc.xml_description + + # job = desc.submit() + + # return job.job_id