+def cancel(obj, proxy):
+ ts = time.time()
+ QCG.start()
+
+ qcg_obj = obj.qcg_job if isinstance(obj, Job) else obj.qcg_task
+ qcg_obj.credential = Credential(proxy)
+
+ jts = time.time()
+ qcg_obj.cancel()
+ elapsed_cancel = time.time() - jts
+
+ elapsed = time.time() - ts
+ elapsed_py = elapsed - elapsed_cancel
+ logger.info('(%.3f) OBJ = %s, REMOTE = %.3f, LOCAL = %.3f', elapsed, obj, elapsed_cancel, elapsed_py)
+
+
+def clean(obj, proxy):
+ ts = time.time()
+ QCG.start()
+
+ qcg_obj = obj.qcg_job if isinstance(obj, Job) else obj.qcg_task
+ qcg_obj.credential = Credential(proxy)
+
+ jts = time.time()
+ qcg_obj.clean()
+ elapsed_clean = time.time() - jts
+
+ elapsed = time.time() - ts
+ elapsed_py = elapsed - elapsed_clean
+ logger.info('(%.3f) OBJ = %s, REMOTE = %.3f, LOCAL = %.3f', elapsed, obj, elapsed_clean, elapsed_py)
+
+
+def fetch_resources(proxy):
+ ts = time.time()
+ QCG.start()
+ cred = Credential(proxy)
+
+ rts = time.time()
+ resources = list(JobFactory().resources(False, cred))
+ elapsed_query = time.time() - rts
+
+ pts = time.time()
+ hosts = [res.name for res in resources]
+ storage = [res.storage for res in resources]
+ applications = {m for res in resources for m in res.applications}
+ modules = {m for res in resources for m in res.modules if m.startswith('plgrid')}
+ elapsed_pp = time.time() - pts
+
+ elapsed = time.time() - ts
+ logger.info('(%.3f) HOSTS = %d, APPS = %d, MODULES = %d, QUERY = %.3f, PROC = %.3f',
+ elapsed, len(hosts), len(applications), len(modules), elapsed_query, elapsed_pp)
+
+ return hosts, storage, applications, modules