コード例 #1
0
ファイル: slurm.py プロジェクト: BenPorebski/md_manager
def update_jobs(host):
    """
	Run scontrol, parse the output and update the ClusterJobs table.
	"""

    print "Parsing scontrol..."
    scontrol_data, err = host.exec_cmd("scontrol -d -o show job")

    if err:
        return

        ## Clear ClusterJobs that are linked to host
    ClusterJob.objects.filter(job_host=host).delete()

    scontrol_split = scontrol_data.split("\n")

    for job_string in scontrol_split:

        parsed_job = {}

        for item in job_string.split():
            # print item.lower()
            partition = item.lower().partition("=")
            parsed_job[partition[0]] = partition[2]

        if "jobid" in parsed_job:
            job_id = parsed_job["jobid"]
            job_name = parsed_job["name"]
            job_owner = parsed_job["userid"].split("(")[0]
            cores = parse_sinfo_number(parsed_job["numcpus"].split("-")[0])
            work_dir = parsed_job["workdir"]

            try:
                state = parsed_job["jobstate"].capitalize()
                if state == "Running":
                    state = "Active"
                if state == "Pending":
                    state = "Idle"
            except:
                state = "Unknown"

                ## Insert job into ClusterJob table.
            job = ClusterJob(
                job_id=job_id,
                job_name=job_name,
                job_owner=job_owner,
                job_host=host,
                n_cores=cores,
                work_dir=work_dir,
                state=state,
            )

            job.save()
コード例 #2
0
ファイル: pbs_torque.py プロジェクト: BenPorebski/md_manager
def update_jobs(host):
	'''
	Run qstat -x, parse the xml output and update the ClusterJobs table.
	'''

	print "Parsing qstat..."
	qstat_xml, err = host.exec_cmd("qstat -x")

	if err:
		return

	## Clear ClusterJobs that are linked to host
	ClusterJob.objects.filter(job_host=host).delete()

	## Parse qstat xml output
	root = ET.fromstring(qstat_xml)
	for child in root:
		job_id = child.find("Job_Id").text.split(".")[0]
		job_name = child.find("Job_Name").text
		job_owner = child.find("Job_Owner").text.split("@")[0]

		try:
			nodes = child.find("Resource_List").find("nodes").text
			n_nodes = int(nodes.split(':')[0])
		except:
			n_nodes = 1

		try:
			ppn = int(nodes.split(':')[1].split('=')[1])
			cores = n_nodes*ppn
		except:
			cores = n_nodes
			ppn = 1

		try:
			work_dir = child.find("init_work_dir").text
		except:
			work_dir = ""

		try:
			state_tmp = child.find("job_state").text
			state = "Unknown"
			if state_tmp == "R":
				state = "Active"
			elif state_tmp == "C":
				state = "Complete"
			elif state_tmp == "Q":
				state = "Idle"
			elif state_tmp == "H":
				state = "Hold"
			elif state_tmp == "E":
				state = "Error"
		except:
			state = "Unknown"


		## Insert job into ClusterJob table.
		job = ClusterJob(
			job_id = job_id,
			job_name = job_name,
			job_owner = job_owner,
			job_host = host,
			n_cores = cores,
			work_dir = work_dir,
			state = state)

		job.save()