def run(self): super(zkSoftimageWorkThread, self).run() job = self.frame.job cfg = zookeeper.zkConfig() dccversion = job.dccversion folder = None for suffix in ['SP2', 'SP1', '']: folder = os.path.join(cfg.get('softimage_root_folder', ''), 'Softimage %s %s' % (dccversion, suffix)) if os.path.exists(folder): if len(suffix) > 0: dccversion = dccversion + ' ' + suffix break if not os.path.exists(folder): return bin = os.path.join(folder, 'Application', 'bin', 'xsibatch.exe') env = getSoftimageEnv(cfg, dccversion) zookeeperPath = os.path.split(os.path.split(zookeeper.__file__)[0])[0] dccPath = os.path.join(zookeeperPath, 'dccs', 'Softimage') # create a settings template prefsFolder = os.path.join(env['XSI_USERHOME'], 'Data', 'Preferences') if not os.path.exists(prefsFolder): os.makedirs(prefsFolder) template = open(os.path.join(dccPath, 'default.xsipref'), 'rb').read() template = template.replace('%VERSION%', dccversion) # localize workgroups localPath = cfg.get('softimage_workgroup_root') remotePath = zookeeper.zkDB.zkSetting.getByName(self.connection, 'softimage_workgroup_root').value self.log('Synchronizing workgroups...') zookeeper.zkClient.zk_synchronizeFolder(remotePath, localPath, logFunc = self.logCallback) workgroups = [] workGroupRoot = cfg.get('softimage_workgroup_root', '') workGroupGeneral = os.path.join(workGroupRoot, 'general') if not os.path.exists(workGroupGeneral): os.makedirs(workGroupGeneral) for f in glob.glob(os.path.join(workGroupGeneral, '*')): if f.startswith('.'): continue workgroups += [os.path.normpath(f)] workGroupRender = os.path.join(workGroupRoot, 'renderer', job.renderer, job.rendererversion, 'Softimage%s' % dccversion.replace(' ', '')) if os.path.exists(workGroupRender): workgroups += [os.path.normpath(workGroupRender)] template = template.replace('%WORKGROUPS%', ';'.join(workgroups)) open(os.path.join(prefsFolder, 'default.xsipref'), 'wb').write(template) args = ['-processing', '-script'] args += [os.path.join(dccPath, 'munch.py')] self.launchSubProcess(bin, args = args, env = env) self.waitForSubProcess()
def launchSubProcess(self, cmd, args, env): if not os.path.exists(cmd): self.__machine.sendNotification('Cannot start "%s"' % cmd, self.frame, severity='ERROR') return False # ensure to include zookeeper in the path zookeeperPath = os.path.split(os.path.split(zookeeper.__file__)[0])[0] env['PYTHONPATH'] = env.get('PYTHONPATH') + os.pathsep + zookeeperPath cfg = zookeeper.zkConfig() job = self.frame.job project = self.frame.project # also include all of the zookeeper settings env['ZK_IP'] = self.connection.ip env['ZK_PORT'] = self.connection.port env['ZK_DATABASE'] = self.connection.database env['ZK_MACHINE'] = self.machine.id env['ZK_PROJECT'] = self.frame.projectid env['ZK_PROJECT_SCRATCH_FOLDER'] = project.getScratchFolder(cfg) env['ZK_JOB'] = self.frame.jobid env['ZK_JOB_SCRATCH_FOLDER'] = job.getScratchFolder(cfg) env['ZK_FRAME'] = self.frame.id env['ZK_DCC'] = job.dcc env['ZK_DCC_VERSION'] = job.dccversion env['ZK_RENDERER'] = job.renderer env['ZK_RENDERER_VERSION'] = job.rendererversion # fill in all config fields as env vars cfgFields = cfg.getFields() for f in cfgFields: env['ZK_' + str(f['name'].upper())] = str(f['value']) for key in env: env[key] = str(env[key]) cmdargs = [cmd] + args self.__process = subprocess.Popen(cmdargs, env=env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=False) p = psutil.Process(self.__process.pid) if self.__machine.priority == 'LOW': p.nice(psutil.BELOW_NORMAL_PRIORITY_CLASS) elif self.__machine.priority == 'MED': p.nice(psutil.NORMAL_PRIORITY_CLASS) elif self.__machine.priority == 'HIGH': p.nice(psutil.ABOVE_NORMAL_PRIORITY_CLASS)
def launchSubProcess(self, cmd, args, env): if not os.path.exists(cmd): self.__machine.sendNotification('Cannot start "%s"' % cmd, self.frame, severity='ERROR') return False # ensure to include zookeeper in the path zookeeperPath = os.path.split(os.path.split(zookeeper.__file__)[0])[0] env['PYTHONPATH'] = env.get('PYTHONPATH') + os.pathsep + zookeeperPath cfg = zookeeper.zkConfig() job = self.frame.job project = self.frame.project # also include all of the zookeeper settings env['ZK_IP'] = self.connection.ip env['ZK_PORT'] = self.connection.port env['ZK_DATABASE'] = self.connection.database env['ZK_MACHINE'] = self.machine.id env['ZK_PROJECT'] = self.frame.projectid env['ZK_PROJECT_SCRATCH_FOLDER'] = project.getScratchFolder(cfg) env['ZK_JOB'] = self.frame.jobid env['ZK_JOB_SCRATCH_FOLDER'] = job.getScratchFolder(cfg) env['ZK_FRAME'] = self.frame.id env['ZK_DCC'] = job.dcc env['ZK_DCC_VERSION'] = job.dccversion env['ZK_RENDERER'] = job.renderer env['ZK_RENDERER_VERSION'] = job.rendererversion # fill in all config fields as env vars cfgFields = cfg.getFields() for f in cfgFields: env['ZK_' + str(f['name'].upper())] = str(f['value']) for key in env: env[key] = str(env[key]) cmdargs = [cmd] + args self.__process = subprocess.Popen(cmdargs, env = env, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell = False) p = psutil.Process(self.__process.pid) if self.__machine.priority == 'LOW': p.nice(psutil.BELOW_NORMAL_PRIORITY_CLASS) elif self.__machine.priority == 'MED': p.nice(psutil.NORMAL_PRIORITY_CLASS) elif self.__machine.priority == 'HIGH': p.nice(psutil.ABOVE_NORMAL_PRIORITY_CLASS)
def __init__(self, connection): self.__conn = connection self.__cfg = zookeeper.zkConfig() super(zkManager, self).__init__('Manager') self.__widgets = {} self.__timers = {} self.setMinimumWidth(640) self.setMinimumHeight(800) self.__widgets['buttonsWidget'] = QtGui.QWidget() self.__widgets['buttonsWidget'].setContentsMargins(0, 0, 0, 0) self.addWidgetToCentral(self.__widgets['buttonsWidget']) buttonsLayout = QtGui.QHBoxLayout() self.__widgets['buttonsWidget'].setLayout(buttonsLayout) self.__widgets['refreshButton'] = QtGui.QPushButton("Refresh", self.__widgets['buttonsWidget']) buttonsLayout.addWidget(self.__widgets['refreshButton']) self.__widgets['refreshButton'].clicked.connect(self.poll) self.__widgets['tabs'] = QtGui.QTabWidget() self.addWidgetToCentral(self.__widgets['tabs']) # jobs labels = ['project', 'job', 'user', 'frames', 'prio', 'status', 'progress', 'remaining', 'total'] widths = [2, 3, 1, 1, 1, 1, 6, 2, 2 ] self.__widgets['jobs'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure = 'get_jobs_for_manager', labels = labels, widths = widths, getItemDataCallback = self.onJobGetData ) self.__widgets['jobs'].contextMenuRequested.connect(self.onJobContextMenu) self.__widgets['jobs'].doubleClicked.connect(self.onJobDoubleClicked) # projects labels = ['project', 'jobs', 'machines'] self.__widgets['projects'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure = 'get_projects_for_manager', labels = labels ) self.__widgets['projects'].contextMenuRequested.connect(self.onProjectContextMenu) # machines labels = ['name', 'groups', 'status', 'prio', 'cpu', 'ram'] widths = [2, 4, 1.3, 1, 2, 2 ] self.__widgets['machines'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure = 'get_machines_for_manager', labels = labels, widths = widths, getItemDataCallback = self.onMachineGetData ) self.__widgets['machines'].contextMenuRequested.connect(self.onMachineContextMenu) self.__widgets['machines'].doubleClicked.connect(self.onMachineDoubleClicked) # groups labels = ['name', 'machines'] widths = [2, 10 ] self.__widgets['groups'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachineGroup, procedure = 'get_groups_for_manager', labels = labels, widths = widths, getItemDataCallback = self.onMachineGroupGetData ) self.__widgets['groups'].contextMenuRequested.connect(self.onMachineGroupContextMenu) # frames labels = ['job', 'time', 'status', 'duration', 'machine', 'prio', 'package'] self.__widgets['frames'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure = 'get_frames_for_manager', procedureArgs = [0], labels = labels, getItemDataCallback = self.onFrameGetData ) self.__widgets['frames'].contextMenuRequested.connect(self.onFrameContextMenu) self.__widgets['frames'].doubleClicked.connect(self.onFrameDoubleClicked) # log self.__widgets['log'] = QtGui.QPlainTextEdit() self.__widgets['tabs'].addTab(self.__widgets['jobs'], 'jobs') self.__widgets['tabs'].addTab(self.__widgets['projects'], 'projects') self.__widgets['tabs'].addTab(self.__widgets['machines'], 'machines') self.__widgets['tabs'].addTab(self.__widgets['groups'], 'groups') self.__widgets['tabs'].addTab(self.__widgets['frames'], 'frames') self.__widgets['tabs'].addTab(self.__widgets['log'], 'log') self.__timers['poll'] = QtCore.QTimer(self) self.__timers['poll'].setInterval(5000) self.__timers['poll'].setSingleShot(False) self.connect(self.__timers['poll'], QtCore.SIGNAL("timeout()"), self.poll) for key in self.__timers: self.__timers[key].start() self.show()
import os import sys import datetime import time import zookeeper # redirect output hook = zookeeper.zkClient.zkSoftimageLogHook(Application) sys.stdout = hook sys.stderr = hook cfg = zookeeper.zkConfig() scratchdisc_enabled = cfg.get('scratchdisc_enabled', False) scratchdisc_folder = cfg.get('scratchdisc_folder', '') def log(message): prefix = datetime.datetime.now().strftime("%Y-%m-%d %H::%M::%S: ") Application.LogMessage(prefix+str(message)) def setFrameAsFailed(connection, frame, reason): frame.setAsFailed() log('Frame %d failed: %s' % (frame.time, reason)) def munch(): connection = zookeeper.zkDB.zkConnection( ip = os.environ['ZK_IP'], port = int(os.environ['ZK_PORT']), database = os.environ['ZK_DATABASE'], debug = False )
import os import sys import datetime import time import zookeeper # redirect output hook = zookeeper.zkClient.zkSoftimageLogHook(Application) sys.stdout = hook sys.stderr = hook cfg = zookeeper.zkConfig() scratchdisc_enabled = cfg.get('scratchdisc_enabled', False) scratchdisc_folder = cfg.get('scratchdisc_folder', '') def log(message): prefix = datetime.datetime.now().strftime("%Y-%m-%d %H::%M::%S: ") Application.LogMessage(prefix + str(message)) def setFrameAsFailed(connection, frame, reason): frame.setAsFailed() log('Frame %d failed: %s' % (frame.time, reason)) def munch(): connection = zookeeper.zkDB.zkConnection( ip=os.environ['ZK_IP'], port=int(os.environ['ZK_PORT']),
def __init__(self, connection): self.__conn = connection self.__cfg = zookeeper.zkConfig() super(zkManager, self).__init__('Manager') self.__widgets = {} self.__timers = {} self.setMinimumWidth(640) self.setMinimumHeight(800) self.__widgets['buttonsWidget'] = QtGui.QWidget() self.__widgets['buttonsWidget'].setContentsMargins(0, 0, 0, 0) self.addWidgetToCentral(self.__widgets['buttonsWidget']) buttonsLayout = QtGui.QHBoxLayout() self.__widgets['buttonsWidget'].setLayout(buttonsLayout) self.__widgets['refreshButton'] = QtGui.QPushButton("Refresh", self.__widgets['buttonsWidget']) buttonsLayout.addWidget(self.__widgets['refreshButton']) self.__widgets['refreshButton'].clicked.connect(self.poll) self.__widgets['tabs'] = QtGui.QTabWidget() self.addWidgetToCentral(self.__widgets['tabs']) # jobs labels = ['project', 'job', 'user', 'frames', 'prio', 'status', 'progress', 'remaining', 'total'] widths = [2, 3, 1, 1, 1, 1, 6, 2, 2 ] self.__widgets['jobs'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure = 'get_jobs_for_manager', labels = labels, widths = widths, getItemDataCallback = self.onJobGetData ) self.__widgets['jobs'].contextMenuRequested.connect(self.onJobContextMenu) self.__widgets['jobs'].doubleClicked.connect(self.onJobDoubleClicked) # projects labels = ['project', 'jobs', 'machines', 'localize'] self.__widgets['projects'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure = 'get_projects_for_manager', labels = labels, getItemDataCallback = self.onProjectGetData ) self.__widgets['projects'].contextMenuRequested.connect(self.onProjectContextMenu) # machines labels = ['name', 'groups', 'status', 'prio', 'cpu', 'ram'] widths = [2, 4, 1.3, 1, 2, 2 ] self.__widgets['machines'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure = 'get_machines_for_manager', labels = labels, widths = widths, getItemDataCallback = self.onMachineGetData ) self.__widgets['machines'].contextMenuRequested.connect(self.onMachineContextMenu) self.__widgets['machines'].doubleClicked.connect(self.onMachineDoubleClicked) # groups labels = ['name', 'machines'] widths = [2, 10 ] self.__widgets['groups'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachineGroup, procedure = 'get_groups_for_manager', labels = labels, widths = widths, getItemDataCallback = self.onMachineGroupGetData ) self.__widgets['groups'].contextMenuRequested.connect(self.onMachineGroupContextMenu) # frames labels = ['job', 'time', 'status', 'duration', 'machine', 'prio', 'package'] self.__widgets['frames'] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure = 'get_frames_for_manager', procedureArgs = [0], labels = labels, getItemDataCallback = self.onFrameGetData ) self.__widgets['frames'].contextMenuRequested.connect(self.onFrameContextMenu) self.__widgets['frames'].doubleClicked.connect(self.onFrameDoubleClicked) # log self.__widgets['log'] = QtGui.QPlainTextEdit() self.__widgets['tabs'].addTab(self.__widgets['jobs'], 'jobs') self.__widgets['tabs'].addTab(self.__widgets['projects'], 'projects') self.__widgets['tabs'].addTab(self.__widgets['machines'], 'machines') self.__widgets['tabs'].addTab(self.__widgets['groups'], 'groups') self.__widgets['tabs'].addTab(self.__widgets['frames'], 'frames') self.__widgets['tabs'].addTab(self.__widgets['log'], 'log') self.__timers['poll'] = QtCore.QTimer(self) self.__timers['poll'].setInterval(5000) self.__timers['poll'].setSingleShot(False) self.connect(self.__timers['poll'], QtCore.SIGNAL("timeout()"), self.poll) for key in self.__timers: self.__timers[key].start() self.show()
def __init__(self, connection): self.__percEx = re.compile(r'.*[^0-9\.]([0-9\.]+%)[^0-9\.]*') self.__conn = connection self.__machine = zookeeper.zkDB.zkMachine(self.__conn, asClient = True) super(zkConsumer, self).__init__('Munch - %s' % self.__machine.name) if not os.environ['USERNAME'].lower() == 'render': QtGui.QMessageBox.critical(None, "ZooKeeper Error", 'You need to be logged on as the render user.') self.close() return self.__cfg = zookeeper.zkConfig() self.__widgets = {} self.__timers = {} self.setMinimumWidth(640) self.setMinimumHeight(800) topWidget = QtGui.QWidget() topWidget.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Minimum) topLayout = QtGui.QGridLayout() topWidget.setLayout(topLayout) self.addWidgetToCentral(topWidget) offset = 0 backgroundColor = '#e6e6e6' # project labelWidget = QtGui.QLabel('project', topWidget) self.__widgets['project'] = QtGui.QLineEdit(topWidget) self.__widgets['project'].setReadOnly(True) self.setLineEditColor('project', backgroundColor) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['project'], 1, offset) offset = offset + 1 # job labelWidget = QtGui.QLabel('job', topWidget) self.__widgets['job'] = QtGui.QLineEdit(topWidget) self.__widgets['job'].setReadOnly(True) self.setLineEditColor('job', backgroundColor) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['job'], 1, offset) offset = offset + 1 # frame labelWidget = QtGui.QLabel('frame', topWidget) self.__widgets['frame'] = QtGui.QLineEdit(topWidget) self.__widgets['frame'].setReadOnly(True) self.__widgets['frame'].setMaximumWidth(50) self.setLineEditColor('frame', backgroundColor) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['frame'], 1, offset) offset = offset + 1 # progress labelWidget = QtGui.QLabel('progress', topWidget) self.__widgets['progress'] = QtGui.QProgressBar(topWidget) self.__widgets['progress'].setMinimumWidth(200) self.setProgressBarColor('progress', 'green') topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['progress'], 1, offset) offset = offset + 1 # status labelWidget = QtGui.QLabel('status', topWidget) self.__widgets['status'] = QtGui.QLineEdit('idle', topWidget) self.__widgets['status'].setReadOnly(True) self.__widgets['status'].setMaximumWidth(75) self.__widgets['status'].setAlignment(QtCore.Qt.AlignHCenter) if self.__machine.priority == 'OFF': self.__widgets['status'].setText('off') self.setLineEditColor('status', 'red') else: self.setLineEditColor('status', 'yellow') topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['status'], 1, offset) offset = offset + 1 # cpu labelWidget = QtGui.QLabel('cpu', topWidget) self.__widgets['cpu'] = QtGui.QProgressBar(topWidget) self.setProgressBarColor('cpu', 'blue') self.__widgets['cpu'].setMaximumWidth(60) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['cpu'], 1, offset) offset = offset + 1 # ram labelWidget = QtGui.QLabel('ram', topWidget) self.__widgets['ram'] = QtGui.QProgressBar(topWidget) self.setProgressBarColor('ram', 'violet') self.__widgets['ram'].setMaximumWidth(60) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['ram'], 1, offset) offset = offset + 1 self.__widgets['log'] = QtGui.QPlainTextEdit() self.__widgets['log'].setReadOnly(True) self.addWidgetToCentral(self.__widgets['log']) (networkSuccess, networkError) = zookeeper.zkClient.zk_authorizeAllValidNetworkShares(connection, deleteExisting=True, logCallback=self.log) if not networkSuccess: self.log('ZooKeeper Error:\n'+networkError) self.close() return self.__timers['poll'] = QtCore.QTimer(self) self.__timers['poll'].setInterval(5003) # every 5 seconds self.__timers['poll'].setSingleShot(False) self.__timers['garbagecollect'] = QtCore.QTimer(self) self.__timers['garbagecollect'].setInterval(15 * 60 * 1000) # every 15 minutes self.__timers['garbagecollect'].setSingleShot(False) self.__timers['delivery'] = QtCore.QTimer(self) self.__timers['delivery'].setInterval(15107) # every 15 seconds, not quite so we don't overlap self.__timers['delivery'].setSingleShot(False) self.connect(self.__timers['poll'], QtCore.SIGNAL("timeout()"), self.poll) self.connect(self.__timers['delivery'], QtCore.SIGNAL("timeout()"), self.delivery) self.connect(self.__timers['garbagecollect'], QtCore.SIGNAL("timeout()"), self.garbagecollect) for key in self.__timers: self.__timers[key].start() self.show() self.garbagecollect()
def __init__(self, connection): self.__conn = connection self.__cfg = zookeeper.zkConfig() super(zkManager, self).__init__("Manager") self.__widgets = {} self.__timers = {} self.setMinimumWidth(640) self.setMinimumHeight(800) self.__widgets["buttonsWidget"] = QtGui.QWidget() self.__widgets["buttonsWidget"].setContentsMargins(0, 0, 0, 0) self.addWidgetToCentral(self.__widgets["buttonsWidget"]) buttonsLayout = QtGui.QHBoxLayout() self.__widgets["buttonsWidget"].setLayout(buttonsLayout) self.__widgets["refreshButton"] = QtGui.QPushButton("Refresh", self.__widgets["buttonsWidget"]) buttonsLayout.addWidget(self.__widgets["refreshButton"]) self.__widgets["refreshButton"].clicked.connect(self.poll) self.__widgets["tabs"] = QtGui.QTabWidget() self.addWidgetToCentral(self.__widgets["tabs"]) # jobs labels = ["project", "job", "user", "frames", "prio", "status", "progress", "remaining", "total"] widths = [2, 3, 1, 1, 1, 1, 6, 2, 2] self.__widgets["jobs"] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure="get_jobs_for_manager", labels=labels, widths=widths, getItemDataCallback=self.onJobGetData, ) self.__widgets["jobs"].contextMenuRequested.connect(self.onJobContextMenu) self.__widgets["jobs"].doubleClicked.connect(self.onJobDoubleClicked) # projects labels = ["project", "jobs", "machines"] self.__widgets["projects"] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure="get_projects_for_manager", labels=labels ) self.__widgets["projects"].contextMenuRequested.connect(self.onProjectContextMenu) # machines labels = ["name", "groups", "status", "prio", "cpu", "ram"] widths = [2, 4, 1.3, 1, 2, 2] self.__widgets["machines"] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure="get_machines_for_manager", labels=labels, widths=widths, getItemDataCallback=self.onMachineGetData, ) self.__widgets["machines"].contextMenuRequested.connect(self.onMachineContextMenu) self.__widgets["machines"].doubleClicked.connect(self.onMachineDoubleClicked) # groups labels = ["name", "machines"] widths = [2, 10] self.__widgets["groups"] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachineGroup, procedure="get_groups_for_manager", labels=labels, widths=widths, getItemDataCallback=self.onMachineGroupGetData, ) self.__widgets["groups"].contextMenuRequested.connect(self.onMachineGroupContextMenu) # frames labels = ["job", "time", "status", "duration", "machine", "prio", "package"] self.__widgets["frames"] = zookeeper.zkUI.zkDbTable( self.__conn, zookeeper.zkDB.zkMachine, procedure="get_frames_for_manager", procedureArgs=[0], labels=labels, getItemDataCallback=self.onFrameGetData, ) self.__widgets["frames"].contextMenuRequested.connect(self.onFrameContextMenu) self.__widgets["frames"].doubleClicked.connect(self.onFrameDoubleClicked) # log self.__widgets["log"] = QtGui.QPlainTextEdit() self.__widgets["tabs"].addTab(self.__widgets["jobs"], "jobs") self.__widgets["tabs"].addTab(self.__widgets["projects"], "projects") self.__widgets["tabs"].addTab(self.__widgets["machines"], "machines") self.__widgets["tabs"].addTab(self.__widgets["groups"], "groups") self.__widgets["tabs"].addTab(self.__widgets["frames"], "frames") self.__widgets["tabs"].addTab(self.__widgets["log"], "log") self.__timers["poll"] = QtCore.QTimer(self) self.__timers["poll"].setInterval(5000) self.__timers["poll"].setSingleShot(False) self.connect(self.__timers["poll"], QtCore.SIGNAL("timeout()"), self.poll) for key in self.__timers: self.__timers[key].start() self.show()
def __init__(self, connection): self.__percEx = re.compile(r'.*[^0-9\.]([0-9\.]+%)[^0-9\.]*') self.__conn = connection self.__machine = zookeeper.zkDB.zkMachine(self.__conn, asClient=True) super(zkConsumer, self).__init__('Munch - %s' % self.__machine.name) if not os.environ['USERNAME'].lower() == 'render': QtGui.QMessageBox.critical( None, "ZooKeeper Error", 'You need to be logged on as the render user.') self.close() return (networkSuccess, networkError) = zookeeper.zkClient.zk_mapAllValidNetworkShares( connection, deleteExisting=True) if not networkSuccess: QtGui.QMessageBox.critical(None, "ZooKeeper Error", networkError) self.close() return self.__cfg = zookeeper.zkConfig() self.__widgets = {} self.__timers = {} self.setMinimumWidth(640) self.setMinimumHeight(800) topWidget = QtGui.QWidget() topWidget.setSizePolicy(QtGui.QSizePolicy.MinimumExpanding, QtGui.QSizePolicy.Minimum) topLayout = QtGui.QGridLayout() topWidget.setLayout(topLayout) self.addWidgetToCentral(topWidget) offset = 0 backgroundColor = '#e6e6e6' # project labelWidget = QtGui.QLabel('project', topWidget) self.__widgets['project'] = QtGui.QLineEdit(topWidget) self.__widgets['project'].setReadOnly(True) self.setLineEditColor('project', backgroundColor) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['project'], 1, offset) offset = offset + 1 # job labelWidget = QtGui.QLabel('job', topWidget) self.__widgets['job'] = QtGui.QLineEdit(topWidget) self.__widgets['job'].setReadOnly(True) self.setLineEditColor('job', backgroundColor) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['job'], 1, offset) offset = offset + 1 # frame labelWidget = QtGui.QLabel('frame', topWidget) self.__widgets['frame'] = QtGui.QLineEdit(topWidget) self.__widgets['frame'].setReadOnly(True) self.__widgets['frame'].setMaximumWidth(50) self.setLineEditColor('frame', backgroundColor) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['frame'], 1, offset) offset = offset + 1 # progress labelWidget = QtGui.QLabel('progress', topWidget) self.__widgets['progress'] = QtGui.QProgressBar(topWidget) self.__widgets['progress'].setMinimumWidth(200) self.setProgressBarColor('progress', 'green') topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['progress'], 1, offset) offset = offset + 1 # status labelWidget = QtGui.QLabel('status', topWidget) self.__widgets['status'] = QtGui.QLineEdit('idle', topWidget) self.__widgets['status'].setReadOnly(True) self.__widgets['status'].setMaximumWidth(75) self.__widgets['status'].setAlignment(QtCore.Qt.AlignHCenter) if self.__machine.priority == 'OFF': self.__widgets['status'].setText('off') self.setLineEditColor('status', 'red') else: self.setLineEditColor('status', 'yellow') topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['status'], 1, offset) offset = offset + 1 # cpu labelWidget = QtGui.QLabel('cpu', topWidget) self.__widgets['cpu'] = QtGui.QProgressBar(topWidget) self.setProgressBarColor('cpu', 'blue') self.__widgets['cpu'].setMaximumWidth(60) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['cpu'], 1, offset) offset = offset + 1 # ram labelWidget = QtGui.QLabel('ram', topWidget) self.__widgets['ram'] = QtGui.QProgressBar(topWidget) self.setProgressBarColor('ram', 'violet') self.__widgets['ram'].setMaximumWidth(60) topLayout.addWidget(labelWidget, 0, offset) topLayout.addWidget(self.__widgets['ram'], 1, offset) offset = offset + 1 self.__widgets['log'] = QtGui.QPlainTextEdit() self.__widgets['log'].setReadOnly(True) self.addWidgetToCentral(self.__widgets['log']) self.__timers['poll'] = QtCore.QTimer(self) self.__timers['poll'].setInterval(5003) # every 5 seconds self.__timers['poll'].setSingleShot(False) self.__timers['garbagecollect'] = QtCore.QTimer(self) self.__timers['garbagecollect'].setInterval(15 * 60 * 1000) # every 15 minutes self.__timers['garbagecollect'].setSingleShot(False) self.__timers['delivery'] = QtCore.QTimer(self) self.__timers['delivery'].setInterval( 15107) # every 15 seconds, not quite so we don't overlap self.__timers['delivery'].setSingleShot(False) self.connect(self.__timers['poll'], QtCore.SIGNAL("timeout()"), self.poll) self.connect(self.__timers['delivery'], QtCore.SIGNAL("timeout()"), self.delivery) self.connect(self.__timers['garbagecollect'], QtCore.SIGNAL("timeout()"), self.garbagecollect) for key in self.__timers: self.__timers[key].start() self.show() self.garbagecollect()