Source code for i3pystatus.sge
import subprocess
from lxml import etree
from i3pystatus import IntervalModule
[docs]class SGETracker(IntervalModule):
"""
Used to display status of Batch computing jobs on a cluster running Sun Grid Engine.
The data is collected via ssh, so a valid ssh address must be specified.
Requires lxml.
"""
interval = 60
settings = (
("ssh", "The SSH connection address. Can be user@host or user:password@host or user@host -p PORT etc."),
'color', 'format'
)
required = ("ssh",)
format = "SGE qw: {queued} / r: {running} / Eqw: {error}"
on_leftclick = None
color = "#ffffff"
def parse_qstat_xml(self):
xml = subprocess.check_output("ssh {0} \"qstat -xml\"".format(self.ssh),
stderr=subprocess.STDOUT,
shell=True)
root = etree.fromstring(xml)
job_dict = {'qw': 0, 'Eqw': 0, 'r': 0}
for j in root.xpath('//job_info/job_info/job_list'):
job_dict[j.find("state").text] += 1
for j in root.xpath('//job_info/queue_info/job_list'):
job_dict[j.find("state").text] += 1
return job_dict
def run(self):
jobs = self.parse_qstat_xml()
fdict = {
"queued": jobs['qw'],
"error": jobs['Eqw'],
"running": jobs['r']
}
self.data = fdict
self.output = {
"full_text": self.format.format(**fdict).strip(),
"color": self.color
}