-
Notifications
You must be signed in to change notification settings - Fork 4
/
jobScheduler.py
72 lines (63 loc) · 2.39 KB
/
jobScheduler.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#
# Operation Manager
# Author: Robert Sinn
# Last modified: 17 x10 2014
#
# This file is part of Climate Analyser. The Job Scheduler exists to
# Use Slurm (with the Drmaa Library) to create jobs over multiple
# nodes/servers.
#
# Climate Analyser is free software: you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# Climate Analyser is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with Climate Analyser.
# If not, see <http://www.gnu.org/licenses/>.
#
import drmaa
import os
import time
import zoo
def resultOut(jobid,serverAddr):
filename = jobid + '.nc'
outputLink = "[opendap]"
outputLink += (serverAddr + "/thredds/catalog/datafiles/outputs/catalog.html?dataset=climateAnalyserStorage/outputs/" + filename)
outputLink += "[/opendap]"
outputLink += "[ncfile]"
outputLink += (serverAddr + "/thredds/fileServer/datafiles/outputs/" + filename)
outputLink += "[/ncfile]"
outputLink += "[wms]"
outputLink += (serverAddr + "/thredds/wms/datafiles/outputs/" + filename + "?service=WMS&version=1.3.0&request=GetCapabilities")
outputLink += "[/wms]"
return outputLink
def jobScheduler(conf,inputs,outputs):
serverFile = open('ThreddServer')
serverAddr = serverFile.read().strip()
urls = inputs["urls"]["value"]
jobType = inputs["selection"]["value"]
jobId = inputs["jobid"]["value"]
sess = drmaa.Session()
sess.initialize()
# 'Creating job template'
jt = sess.createJobTemplate()
jt.remoteCommand = 'python Operation.py'
jt.args = [urls,jobType,jobId]
jt.joinFiles = False #Comment out this line for dedugging
jt.jobName = jobId
jid = sess.runJob(jt)
#'Your job has been submitted with id ' + jobid
if sess.jobStatus(jid) == 'queued_active':
outputs["Status"]["value"] = str(0)
else:
outputs["Status"]["value"] = str(12)
sess.deleteJobTemplate(jt)
sess.exit()
outputs["Result"]["value"]=(resultOut(jobId,serverAddr))
return zoo.SERVICE_SUCCEEDED