migrated code using dict that was no longer compatible with python3
iteritems() was removed in python3, see https://wiki.python.org/moin/Python3.0#Built-In_Changes work related to Bug 3315 - make simpaweb django app a packageable application
This commit is contained in:
parent
66fb58148d
commit
b5c2c886f1
|
@ -127,7 +127,7 @@ class ClusterController:
|
||||||
idleMachines = self.m_clusterStatus.getIdleMachines()
|
idleMachines = self.m_clusterStatus.getIdleMachines()
|
||||||
# logInfo('idleMachines :')
|
# logInfo('idleMachines :')
|
||||||
self.m_machinesThatNeedToSleep = []
|
self.m_machinesThatNeedToSleep = []
|
||||||
for machineName, idleMachine in idleMachines.iteritems():
|
for machineName, idleMachine in idleMachines.items():
|
||||||
if idleMachine.getPowerState() == PowerState.ON:
|
if idleMachine.getPowerState() == PowerState.ON:
|
||||||
# logInfo('\t%s' % machineName)
|
# logInfo('\t%s' % machineName)
|
||||||
if idleMachine.getName() != 'simpatix10': # never put simpatix10 to sleep because it's the sge master and is also server for other things
|
if idleMachine.getName() != 'simpatix10': # never put simpatix10 to sleep because it's the sge master and is also server for other things
|
||||||
|
@ -152,7 +152,7 @@ class ClusterController:
|
||||||
pendingJobs = self.m_clusterStatus.getPendingJobs()
|
pendingJobs = self.m_clusterStatus.getPendingJobs()
|
||||||
"""
|
"""
|
||||||
logInfo('pending jobs :')
|
logInfo('pending jobs :')
|
||||||
for job in pendingJobs.itervalues():
|
for job in pendingJobs.values():
|
||||||
logInfo('\t%d' % job.getId().asStr())
|
logInfo('\t%d' % job.getId().asStr())
|
||||||
"""
|
"""
|
||||||
if len(pendingJobs) != 0:
|
if len(pendingJobs) != 0:
|
||||||
|
@ -252,7 +252,7 @@ class ClusterController:
|
||||||
iNumMachines = len(self.m_clusterStatus.m_clusterNodes)
|
iNumMachines = len(self.m_clusterStatus.m_clusterNodes)
|
||||||
iNumMachinesOn = 0
|
iNumMachinesOn = 0
|
||||||
iNumSleepingMachines = 0
|
iNumSleepingMachines = 0
|
||||||
for machine in self.m_clusterStatus.m_clusterNodes.itervalues():
|
for machine in self.m_clusterStatus.m_clusterNodes.values():
|
||||||
ePowerState = machine.getPowerState()
|
ePowerState = machine.getPowerState()
|
||||||
if ePowerState == PowerState.ON:
|
if ePowerState == PowerState.ON:
|
||||||
iNumMachinesOn+=1
|
iNumMachinesOn+=1
|
||||||
|
@ -284,7 +284,7 @@ def storeClusterNodeStatus( clusterNodeStatus ):
|
||||||
r=conn.store_result()
|
r=conn.store_result()
|
||||||
print r.fetch_row()[0]
|
print r.fetch_row()[0]
|
||||||
'''
|
'''
|
||||||
for key, sensor in clusterNodeStatus.m_sensors.iteritems():
|
for key, sensor in clusterNodeStatus.m_sensors.items():
|
||||||
sensorId = clusterNodeStatus.m_clusterNodeName + '_' + sensor.m_name
|
sensorId = clusterNodeStatus.m_clusterNodeName + '_' + sensor.m_name
|
||||||
if sensor.typeName() == 'Fan':
|
if sensor.typeName() == 'Fan':
|
||||||
sqlCommand = """INSERT INTO `fan_rpm_logs` (`fan_id`, `rpm`, `date`) VALUES ('"""+sensorId+"""', """+str(sensor.m_rpms)+""", NOW());"""
|
sqlCommand = """INSERT INTO `fan_rpm_logs` (`fan_id`, `rpm`, `date`) VALUES ('"""+sensorId+"""', """+str(sensor.m_rpms)+""", NOW());"""
|
||||||
|
|
|
@ -40,7 +40,7 @@ class ClusterStatus:
|
||||||
def setControlOnMachine(self, machineName, bControl):
|
def setControlOnMachine(self, machineName, bControl):
|
||||||
if bControl:
|
if bControl:
|
||||||
# add machineName under control of ClusterController
|
# add machineName under control of ClusterController
|
||||||
for k, v in self.m_clusterNodes.iteritems():
|
for k, v in self.m_clusterNodes.items():
|
||||||
if v.getName() == machineName :
|
if v.getName() == machineName :
|
||||||
return # nothing to do : machineName is already under the control of ClusterController
|
return # nothing to do : machineName is already under the control of ClusterController
|
||||||
|
|
||||||
|
@ -64,12 +64,12 @@ class ClusterStatus:
|
||||||
return self.m_clusterNodes
|
return self.m_clusterNodes
|
||||||
|
|
||||||
def startReadingThreads( self ):
|
def startReadingThreads( self ):
|
||||||
for k, v in self.m_clusterNodes.iteritems():
|
for k, v in self.m_clusterNodes.items():
|
||||||
v.m_machineStatusUpdater.start()
|
v.m_machineStatusUpdater.start()
|
||||||
self.m_jobsStateUpdater.start()
|
self.m_jobsStateUpdater.start()
|
||||||
|
|
||||||
def stopReadingThreads( self ):
|
def stopReadingThreads( self ):
|
||||||
for k, v in self.m_clusterNodes.iteritems():
|
for k, v in self.m_clusterNodes.items():
|
||||||
v.m_machineStatusUpdater.m_bStop = True
|
v.m_machineStatusUpdater.m_bStop = True
|
||||||
v.m_machineStatusUpdater.join()
|
v.m_machineStatusUpdater.join()
|
||||||
self.m_jobsStateUpdater.m_bStop = True
|
self.m_jobsStateUpdater.m_bStop = True
|
||||||
|
@ -86,7 +86,7 @@ class ClusterStatus:
|
||||||
return self.m_jobsState.getJobsOnMachine( machineName )
|
return self.m_jobsState.getJobsOnMachine( machineName )
|
||||||
|
|
||||||
def isReady( self ):
|
def isReady( self ):
|
||||||
for k, v in self.m_clusterNodes.iteritems():
|
for k, v in self.m_clusterNodes.items():
|
||||||
if not v.isReady():
|
if not v.isReady():
|
||||||
logInfo( 'ClusterStatus::isReady : not ready because of ' + v.getName() )
|
logInfo( 'ClusterStatus::isReady : not ready because of ' + v.getName() )
|
||||||
return False
|
return False
|
||||||
|
@ -108,7 +108,7 @@ class ClusterStatus:
|
||||||
logError('ClusterStatus::getIdleMachines : age of jobs state is too old (%f s). This is bug 00000009.' % (fJobsStateAge))
|
logError('ClusterStatus::getIdleMachines : age of jobs state is too old (%f s). This is bug 00000009.' % (fJobsStateAge))
|
||||||
assert( False )
|
assert( False )
|
||||||
idleMachines = {}
|
idleMachines = {}
|
||||||
for machineName, machine in self.m_clusterNodes.iteritems():
|
for machineName, machine in self.m_clusterNodes.items():
|
||||||
if machine.getPowerState() == PowerState.ON:
|
if machine.getPowerState() == PowerState.ON:
|
||||||
jobsOnThisMachine = self.getJobsOnMachine( machineName )
|
jobsOnThisMachine = self.getJobsOnMachine( machineName )
|
||||||
if len(jobsOnThisMachine) == 0:
|
if len(jobsOnThisMachine) == 0:
|
||||||
|
@ -137,7 +137,7 @@ class ClusterStatus:
|
||||||
returns an estimate of the energy consumption since the start of the cluster controller (in joules)
|
returns an estimate of the energy consumption since the start of the cluster controller (in joules)
|
||||||
"""
|
"""
|
||||||
fEnergyConsumption = 0.0
|
fEnergyConsumption = 0.0
|
||||||
for machine in self.m_clusterNodes.itervalues():
|
for machine in self.m_clusterNodes.values():
|
||||||
if machine.isReady(): # there are cases where the machine is not ready yet (for example, it's just been added to clustercontroller's control)
|
if machine.isReady(): # there are cases where the machine is not ready yet (for example, it's just been added to clustercontroller's control)
|
||||||
fEnergyConsumption += machine.getEnergyConsumption()
|
fEnergyConsumption += machine.getEnergyConsumption()
|
||||||
return fEnergyConsumption
|
return fEnergyConsumption
|
||||||
|
@ -147,21 +147,21 @@ class ClusterStatus:
|
||||||
returns an estimate of the energy saving since the start of the cluster controller (in joules)
|
returns an estimate of the energy saving since the start of the cluster controller (in joules)
|
||||||
"""
|
"""
|
||||||
fEnergySavings = 0.0
|
fEnergySavings = 0.0
|
||||||
for machine in self.m_clusterNodes.itervalues():
|
for machine in self.m_clusterNodes.values():
|
||||||
if machine.isReady():
|
if machine.isReady():
|
||||||
fEnergySavings += machine.getEnergySavings()
|
fEnergySavings += machine.getEnergySavings()
|
||||||
return fEnergySavings
|
return fEnergySavings
|
||||||
|
|
||||||
def getCurrentPowerConsumption( self ):
|
def getCurrentPowerConsumption( self ):
|
||||||
fPowerConsumption = 0.0
|
fPowerConsumption = 0.0
|
||||||
for machine in self.m_clusterNodes.itervalues():
|
for machine in self.m_clusterNodes.values():
|
||||||
if machine.isReady():
|
if machine.isReady():
|
||||||
fPowerConsumption += machine.getPowerConsumption()
|
fPowerConsumption += machine.getPowerConsumption()
|
||||||
return fPowerConsumption
|
return fPowerConsumption
|
||||||
|
|
||||||
def getCurrentPowerSavings( self ):
|
def getCurrentPowerSavings( self ):
|
||||||
fPowerSavings = 0.0
|
fPowerSavings = 0.0
|
||||||
for machine in self.m_clusterNodes.itervalues():
|
for machine in self.m_clusterNodes.values():
|
||||||
if machine.isReady():
|
if machine.isReady():
|
||||||
fPowerSavings += machine.getPowerConsumptionForPowerState( PowerState.ON ) - machine.getPowerConsumption()
|
fPowerSavings += machine.getPowerConsumptionForPowerState( PowerState.ON ) - machine.getPowerConsumption()
|
||||||
return fPowerSavings
|
return fPowerSavings
|
||||||
|
@ -169,7 +169,7 @@ class ClusterStatus:
|
||||||
def getNumControlledSlots( self ):
|
def getNumControlledSlots( self ):
|
||||||
self.m_lock.acquire()
|
self.m_lock.acquire()
|
||||||
iNumControlledSlots = 0
|
iNumControlledSlots = 0
|
||||||
for machine in self.m_clusterNodes.itervalues():
|
for machine in self.m_clusterNodes.values():
|
||||||
queueMachine = self.m_jobsState.getQueueMachine( machine.getName() )
|
queueMachine = self.m_jobsState.getQueueMachine( machine.getName() )
|
||||||
iNumControlledSlots += queueMachine.getNumSlots()
|
iNumControlledSlots += queueMachine.getNumSlots()
|
||||||
self.m_lock.release()
|
self.m_lock.release()
|
||||||
|
@ -178,7 +178,7 @@ class ClusterStatus:
|
||||||
def getNumUsedSlots( self ):
|
def getNumUsedSlots( self ):
|
||||||
self.m_lock.acquire()
|
self.m_lock.acquire()
|
||||||
iNumUsedSlots = 0
|
iNumUsedSlots = 0
|
||||||
for machine in self.m_clusterNodes.itervalues():
|
for machine in self.m_clusterNodes.values():
|
||||||
queueMachine = self.m_jobsState.getQueueMachine( machine.getName() )
|
queueMachine = self.m_jobsState.getQueueMachine( machine.getName() )
|
||||||
iNumUsedSlotsOnThisMachine = queueMachine.getNumSlots() - self.m_jobsState.getNumFreeSlotsOnQueueMachine(queueMachine)
|
iNumUsedSlotsOnThisMachine = queueMachine.getNumSlots() - self.m_jobsState.getNumFreeSlotsOnQueueMachine(queueMachine)
|
||||||
assert(iNumUsedSlotsOnThisMachine >= 0)
|
assert(iNumUsedSlotsOnThisMachine >= 0)
|
||||||
|
@ -189,7 +189,7 @@ class ClusterStatus:
|
||||||
def getNumWastedSlots( self ):
|
def getNumWastedSlots( self ):
|
||||||
self.m_lock.acquire()
|
self.m_lock.acquire()
|
||||||
iNumWastedSlots = 0
|
iNumWastedSlots = 0
|
||||||
for machine in self.m_clusterNodes.itervalues():
|
for machine in self.m_clusterNodes.values():
|
||||||
if machine.getPowerState() == PowerState.ON:
|
if machine.getPowerState() == PowerState.ON:
|
||||||
queueMachine = self.m_jobsState.getQueueMachine( machine.getName() )
|
queueMachine = self.m_jobsState.getQueueMachine( machine.getName() )
|
||||||
iNumWastedSlots += self.m_jobsState.getNumFreeSlotsOnQueueMachine(queueMachine)
|
iNumWastedSlots += self.m_jobsState.getNumFreeSlotsOnQueueMachine(queueMachine)
|
||||||
|
@ -199,7 +199,7 @@ class ClusterStatus:
|
||||||
def getNumSleepingSlots( self ):
|
def getNumSleepingSlots( self ):
|
||||||
self.m_lock.acquire()
|
self.m_lock.acquire()
|
||||||
iNumSleepingSlots = 0
|
iNumSleepingSlots = 0
|
||||||
for machine in self.m_clusterNodes.itervalues():
|
for machine in self.m_clusterNodes.values():
|
||||||
if machine.getPowerState() == PowerState.SLEEP:
|
if machine.getPowerState() == PowerState.SLEEP:
|
||||||
queueMachine = self.m_jobsState.getQueueMachine( machine.getName() )
|
queueMachine = self.m_jobsState.getQueueMachine( machine.getName() )
|
||||||
iNumSleepingSlots += self.m_jobsState.getNumFreeSlotsOnQueueMachine(queueMachine)
|
iNumSleepingSlots += self.m_jobsState.getNumFreeSlotsOnQueueMachine(queueMachine)
|
||||||
|
|
|
@ -38,8 +38,8 @@ class JobsState:
|
||||||
|
|
||||||
def getJobsOnMachine( self, machineName ):
|
def getJobsOnMachine( self, machineName ):
|
||||||
jobsOnMachine = {}
|
jobsOnMachine = {}
|
||||||
for jobId, job in self.m_jobs.iteritems():
|
for jobId, job in self.m_jobs.items():
|
||||||
for queueMachineName, numSlots in job.getSlots().iteritems():
|
for queueMachineName, numSlots in job.getSlots().items():
|
||||||
jobMachineName = queueMachineName.split('@')[1]
|
jobMachineName = queueMachineName.split('@')[1]
|
||||||
if jobMachineName == machineName:
|
if jobMachineName == machineName:
|
||||||
jobsOnMachine[ jobId ] = job
|
jobsOnMachine[ jobId ] = job
|
||||||
|
@ -48,7 +48,7 @@ class JobsState:
|
||||||
def getNumFreeSlotsOnQueueMachine( self, queueMachine ):
|
def getNumFreeSlotsOnQueueMachine( self, queueMachine ):
|
||||||
#logInfo('getNumFreeSlotsOnQueueMachine : looking for free slots on queuemachine %s' % queueMachine.getName() )
|
#logInfo('getNumFreeSlotsOnQueueMachine : looking for free slots on queuemachine %s' % queueMachine.getName() )
|
||||||
numUsedSlots = 0
|
numUsedSlots = 0
|
||||||
for job in self.m_jobs.itervalues():
|
for job in self.m_jobs.values():
|
||||||
numUsedSlotsByThisJob = job.getSlots().get( queueMachine.getName() )
|
numUsedSlotsByThisJob = job.getSlots().get( queueMachine.getName() )
|
||||||
if numUsedSlotsByThisJob != None:
|
if numUsedSlotsByThisJob != None:
|
||||||
#logInfo('getNumFreeSlotsOnQueueMachine : job %d uses %d slots' % (job.getId().asStr(), numUsedSlotsByThisJob) )
|
#logInfo('getNumFreeSlotsOnQueueMachine : job %d uses %d slots' % (job.getId().asStr(), numUsedSlotsByThisJob) )
|
||||||
|
@ -68,7 +68,7 @@ class JobsState:
|
||||||
finds the queue machine associated with a machine
|
finds the queue machine associated with a machine
|
||||||
"""
|
"""
|
||||||
queueMachine = None
|
queueMachine = None
|
||||||
for qmName, qm in self.m_queueMachines.iteritems():
|
for qmName, qm in self.m_queueMachines.items():
|
||||||
if qm.m_machineName == machineName:
|
if qm.m_machineName == machineName:
|
||||||
assert( queueMachine == None ) # to be sure that no more than one queue machine is on a given machine
|
assert( queueMachine == None ) # to be sure that no more than one queue machine is on a given machine
|
||||||
queueMachine = qm
|
queueMachine = qm
|
||||||
|
@ -79,7 +79,7 @@ class JobsState:
|
||||||
|
|
||||||
def getPendingJobs( self ):
|
def getPendingJobs( self ):
|
||||||
pendingJobs = {}
|
pendingJobs = {}
|
||||||
for jobId, job in self.m_jobs.iteritems():
|
for jobId, job in self.m_jobs.items():
|
||||||
if job.isPending():
|
if job.isPending():
|
||||||
pendingJobs[ job.getId() ] = job
|
pendingJobs[ job.getId() ] = job
|
||||||
return pendingJobs
|
return pendingJobs
|
||||||
|
|
|
@ -25,13 +25,13 @@ class SimpleSlotAllocator( SlotAllocator ):
|
||||||
highestPriorityPendingJob = pendingJobs.values()[0]
|
highestPriorityPendingJob = pendingJobs.values()[0]
|
||||||
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : looking for free slots for job ' + highestPriorityPendingJob.getId().asStr() )
|
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : looking for free slots for job ' + highestPriorityPendingJob.getId().asStr() )
|
||||||
numFreeSlots = {} # contains the number of free slots for each queueMachine
|
numFreeSlots = {} # contains the number of free slots for each queueMachine
|
||||||
for queueMachine in clusterState.getJobsState().getQueueMachines().itervalues():
|
for queueMachine in clusterState.getJobsState().getQueueMachines().values():
|
||||||
numFreeSlots[ queueMachine ] = clusterState.getJobsState().getNumFreeSlotsOnQueueMachine( queueMachine )
|
numFreeSlots[ queueMachine ] = clusterState.getJobsState().getNumFreeSlotsOnQueueMachine( queueMachine )
|
||||||
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : init numFreeSlots[ %s ] with %d ' % (queueMachine.getName(), numFreeSlots[ queueMachine ]) )
|
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : init numFreeSlots[ %s ] with %d ' % (queueMachine.getName(), numFreeSlots[ queueMachine ]) )
|
||||||
remainingNumSlotsToAllocate = highestPriorityPendingJob.m_jobRequirements.m_numSlots
|
remainingNumSlotsToAllocate = highestPriorityPendingJob.m_jobRequirements.m_numSlots
|
||||||
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : still %d slots to find' % remainingNumSlotsToAllocate )
|
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : still %d slots to find' % remainingNumSlotsToAllocate )
|
||||||
# first look in running machines if there are available slots
|
# first look in running machines if there are available slots
|
||||||
for queueMachine in clusterState.getJobsState().getQueueMachines().itervalues():
|
for queueMachine in clusterState.getJobsState().getQueueMachines().values():
|
||||||
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : examining queueMachine %s ' % queueMachine.getName() )
|
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : examining queueMachine %s ' % queueMachine.getName() )
|
||||||
machine = clusterState.getMachines()[ queueMachine.getMachineName() ]
|
machine = clusterState.getMachines()[ queueMachine.getMachineName() ]
|
||||||
if machine.getPowerState() == PowerState.ON:
|
if machine.getPowerState() == PowerState.ON:
|
||||||
|
@ -47,7 +47,7 @@ class SimpleSlotAllocator( SlotAllocator ):
|
||||||
break
|
break
|
||||||
if remainingNumSlotsToAllocate > 0:
|
if remainingNumSlotsToAllocate > 0:
|
||||||
# now look into machines that are asleep
|
# now look into machines that are asleep
|
||||||
for queueMachine in clusterState.getJobsState().getQueueMachines().itervalues():
|
for queueMachine in clusterState.getJobsState().getQueueMachines().values():
|
||||||
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : examining queueMachine %s ' % queueMachine.getName() )
|
logInfo('SimpleSlotAllocator::getMachinesThatNeedWakeUp : examining queueMachine %s ' % queueMachine.getName() )
|
||||||
machine = clusterState.getMachines()[ queueMachine.getMachineName() ]
|
machine = clusterState.getMachines()[ queueMachine.getMachineName() ]
|
||||||
if machine.getPowerState() == PowerState.SLEEP:
|
if machine.getPowerState() == PowerState.SLEEP:
|
||||||
|
@ -100,7 +100,7 @@ class DecoupledSlotAllocator( SlotAllocator ):
|
||||||
print 'id(oldJobs) : ', id(oldJobs)
|
print 'id(oldJobs) : ', id(oldJobs)
|
||||||
print 'id(newJobs) : ', id(newJobs)
|
print 'id(newJobs) : ', id(newJobs)
|
||||||
"""
|
"""
|
||||||
for newJob in newJobs.itervalues():
|
for newJob in newJobs.values():
|
||||||
#logDebug('DecoupledSlotAllocator::jobsStateHasChanged newJob id=%s' % newJob.getId().asStr())
|
#logDebug('DecoupledSlotAllocator::jobsStateHasChanged newJob id=%s' % newJob.getId().asStr())
|
||||||
if newJob.getId() in oldJobs:
|
if newJob.getId() in oldJobs:
|
||||||
#logDebug('DecoupledSlotAllocator::jobsStateHasChanged job id=%d is in old jobs' % newJob.getId())
|
#logDebug('DecoupledSlotAllocator::jobsStateHasChanged job id=%d is in old jobs' % newJob.getId())
|
||||||
|
@ -110,7 +110,7 @@ class DecoupledSlotAllocator( SlotAllocator ):
|
||||||
logInfo('A new job (jobId =%s) has been detected ' % newJob.getId().asStr() )
|
logInfo('A new job (jobId =%s) has been detected ' % newJob.getId().asStr() )
|
||||||
bJobsHaveChanged = True
|
bJobsHaveChanged = True
|
||||||
if len(oldJobsOnly) != 0:
|
if len(oldJobsOnly) != 0:
|
||||||
for oldJob in oldJobsOnly.itervalues():
|
for oldJob in oldJobsOnly.values():
|
||||||
logInfo('Job (jobId =%s) has finished' % oldJob.getId().asStr() )
|
logInfo('Job (jobId =%s) has finished' % oldJob.getId().asStr() )
|
||||||
# at least one old job has finished, freeing some slots
|
# at least one old job has finished, freeing some slots
|
||||||
bJobsHaveChanged = True
|
bJobsHaveChanged = True
|
||||||
|
@ -129,7 +129,7 @@ class DecoupledSlotAllocator( SlotAllocator ):
|
||||||
logInfo('DecoupledSlotAllocator::getMachinesThatNeedWakeUp : waking up machines that are asleep because jobs state has changed')
|
logInfo('DecoupledSlotAllocator::getMachinesThatNeedWakeUp : waking up machines that are asleep because jobs state has changed')
|
||||||
else:
|
else:
|
||||||
logInfo('DecoupledSlotAllocator::getMachinesThatNeedWakeUp : waking up machines that are asleep for periodic check (to be sure pending jobs get a chance to start)')
|
logInfo('DecoupledSlotAllocator::getMachinesThatNeedWakeUp : waking up machines that are asleep for periodic check (to be sure pending jobs get a chance to start)')
|
||||||
for queueMachine in clusterState.getJobsState().getQueueMachines().itervalues():
|
for queueMachine in clusterState.getJobsState().getQueueMachines().values():
|
||||||
if queueMachine.getMachineName() in clusterState.getMachines():
|
if queueMachine.getMachineName() in clusterState.getMachines():
|
||||||
# this means that the machine is under the cluster controller's control
|
# this means that the machine is under the cluster controller's control
|
||||||
machine = clusterState.getMachines()[ queueMachine.getMachineName() ]
|
machine = clusterState.getMachines()[ queueMachine.getMachineName() ]
|
||||||
|
|
|
@ -24,7 +24,7 @@ class SunGridEngine:
|
||||||
|
|
||||||
# read the requirements for pending jobs (which parallel environment, which queue, which architecture) from sge
|
# read the requirements for pending jobs (which parallel environment, which queue, which architecture) from sge
|
||||||
if False: # no need for job details at the moment and since it's very slow, it's been disabled
|
if False: # no need for job details at the moment and since it's very slow, it's been disabled
|
||||||
for unused_jobId, job in jobsState.getPendingJobs().iteritems():
|
for unused_jobId, job in jobsState.getPendingJobs().items():
|
||||||
(returnCode, stdout, stderr) = executeProgram( ['qstat', '-j', job.getId().asStr()] )
|
(returnCode, stdout, stderr) = executeProgram( ['qstat', '-j', job.getId().asStr()] )
|
||||||
assert returnCode != 0, 'prout'
|
assert returnCode != 0, 'prout'
|
||||||
QstatParser().parseJobDetails( stdout, job )
|
QstatParser().parseJobDetails( stdout, job )
|
||||||
|
|
|
@ -47,7 +47,7 @@ class MyHandler(BaseHTTPRequestHandler):
|
||||||
controlledMachinesElement = doc.createElement("ControlledMachines")
|
controlledMachinesElement = doc.createElement("ControlledMachines")
|
||||||
doc.appendChild(controlledMachinesElement)
|
doc.appendChild(controlledMachinesElement)
|
||||||
|
|
||||||
for machine in self.server.m_clusterController.m_clusterStatus.m_clusterNodes.itervalues():
|
for machine in self.server.m_clusterController.m_clusterStatus.m_clusterNodes.values():
|
||||||
# Create the main <card> element
|
# Create the main <card> element
|
||||||
controlledMachineElement = doc.createElement("Machine")
|
controlledMachineElement = doc.createElement("Machine")
|
||||||
controlledMachineElement.setAttribute("name", machine.getName())
|
controlledMachineElement.setAttribute("name", machine.getName())
|
||||||
|
|
|
@ -18,7 +18,7 @@ class ClusterNodeSensorsReadings:
|
||||||
def addSensor(self, sensor):
|
def addSensor(self, sensor):
|
||||||
self.m_sensors[sensor.m_name] = sensor
|
self.m_sensors[sensor.m_name] = sensor
|
||||||
def dump(self):
|
def dump(self):
|
||||||
for key,sensor in self.m_sensors.iteritems():
|
for key,sensor in self.m_sensors.items():
|
||||||
sensor.dump()
|
sensor.dump()
|
||||||
return
|
return
|
||||||
#def getPowerState(self):
|
#def getPowerState(self):
|
||||||
|
@ -27,7 +27,7 @@ class ClusterNodeSensorsReadings:
|
||||||
#log('ClusterNodeSensorsReadings::getLowestTemperature : start')
|
#log('ClusterNodeSensorsReadings::getLowestTemperature : start')
|
||||||
lowestTemperature = 0.0
|
lowestTemperature = 0.0
|
||||||
lowestTemperatureIsDefined = False
|
lowestTemperatureIsDefined = False
|
||||||
for key,sensor in self.m_sensors.iteritems():
|
for key,sensor in self.m_sensors.items():
|
||||||
#log('ClusterNodeSensorsReadings::getLowestTemperature : start')
|
#log('ClusterNodeSensorsReadings::getLowestTemperature : start')
|
||||||
if sensor.typeName() == 'Temperature':
|
if sensor.typeName() == 'Temperature':
|
||||||
sensor.m_temperature
|
sensor.m_temperature
|
||||||
|
|
|
@ -68,7 +68,7 @@ class Machine(object):
|
||||||
powered_machines[self.name] = self
|
powered_machines[self.name] = self
|
||||||
for conn in self.get_outgoing_connections():
|
for conn in self.get_outgoing_connections():
|
||||||
conn_powered_machines = conn.to_plug.machine.get_powered_machines()
|
conn_powered_machines = conn.to_plug.machine.get_powered_machines()
|
||||||
for machine in conn_powered_machines.itervalues():
|
for machine in conn_powered_machines.values():
|
||||||
if machine not in powered_machines.keys():
|
if machine not in powered_machines.keys():
|
||||||
powered_machines[machine.name] = machine
|
powered_machines[machine.name] = machine
|
||||||
return powered_machines
|
return powered_machines
|
||||||
|
@ -82,7 +82,7 @@ class Machine(object):
|
||||||
if worst_case_scenario:
|
if worst_case_scenario:
|
||||||
# this machine has to provide the full power to all machine it powers, assuming all the power backup providers are dead
|
# this machine has to provide the full power to all machine it powers, assuming all the power backup providers are dead
|
||||||
power_consumption = 0.0
|
power_consumption = 0.0
|
||||||
for machine in self.get_powered_machines().itervalues():
|
for machine in self.get_powered_machines().values():
|
||||||
power_consumption += machine.power_consumption
|
power_consumption += machine.power_consumption
|
||||||
else:
|
else:
|
||||||
power_consumption = self.power_consumption
|
power_consumption = self.power_consumption
|
||||||
|
@ -171,7 +171,7 @@ class Connection(object):
|
||||||
my_power_provider = self.get_power_provider()
|
my_power_provider = self.get_power_provider()
|
||||||
# find the first sibling cable that has the same provider as self
|
# find the first sibling cable that has the same provider as self
|
||||||
first_cable_with_same_provider = None
|
first_cable_with_same_provider = None
|
||||||
for input_plug in to_machine.input_plugs.itervalues():
|
for input_plug in to_machine.input_plugs.values():
|
||||||
sibling_cable = input_plug.get_incoming_connection()
|
sibling_cable = input_plug.get_incoming_connection()
|
||||||
if sibling_cable.get_power_provider() == my_power_provider:
|
if sibling_cable.get_power_provider() == my_power_provider:
|
||||||
first_cable_with_same_provider = sibling_cable
|
first_cable_with_same_provider = sibling_cable
|
||||||
|
@ -209,7 +209,7 @@ class Connection(object):
|
||||||
power_consumption = to_machine.get_power_consumption(worst_case_scenario)
|
power_consumption = to_machine.get_power_consumption(worst_case_scenario)
|
||||||
else:
|
else:
|
||||||
num_input_cables = 0
|
num_input_cables = 0
|
||||||
for input_plug in to_machine.input_plugs.itervalues():
|
for input_plug in to_machine.input_plugs.values():
|
||||||
input_cable = input_plug.get_incoming_connection()
|
input_cable = input_plug.get_incoming_connection()
|
||||||
assert input_cable
|
assert input_cable
|
||||||
num_input_cables += 1
|
num_input_cables += 1
|
||||||
|
@ -447,7 +447,7 @@ def power_config_to_svg(power_config, svg_file_path, worst_case_scenario=True):
|
||||||
if machine.name not in rack['machines']:
|
if machine.name not in rack['machines']:
|
||||||
rack['machines'].append(machine)
|
rack['machines'].append(machine)
|
||||||
|
|
||||||
for machine in power_config.machines.itervalues():
|
for machine in power_config.machines.values():
|
||||||
graph.add_node(machine.name)
|
graph.add_node(machine.name)
|
||||||
node = graph.get_node(machine.name)
|
node = graph.get_node(machine.name)
|
||||||
machine_total_power_consumption = int(machine.get_power_consumption(worst_case_scenario=worst_case_scenario))
|
machine_total_power_consumption = int(machine.get_power_consumption(worst_case_scenario=worst_case_scenario))
|
||||||
|
@ -465,7 +465,7 @@ def power_config_to_svg(power_config, svg_file_path, worst_case_scenario=True):
|
||||||
|
|
||||||
if False:
|
if False:
|
||||||
x = 0.0
|
x = 0.0
|
||||||
for rack in racks.itervalues():
|
for rack in racks.values():
|
||||||
y = 0.0
|
y = 0.0
|
||||||
for machine in rack['machines']:
|
for machine in rack['machines']:
|
||||||
node = graph.get_node(machine.name)
|
node = graph.get_node(machine.name)
|
||||||
|
@ -498,7 +498,7 @@ def power_config_to_svg(power_config, svg_file_path, worst_case_scenario=True):
|
||||||
# graph.add_edge(con.from_plug.machine.name, con.to_plug.machine.name, color="%s:%s" % (color, wsc_color), label=label, penwidth="%s:%s" % (penwidth, penwidth))
|
# graph.add_edge(con.from_plug.machine.name, con.to_plug.machine.name, color="%s:%s" % (color, wsc_color), label=label, penwidth="%s:%s" % (penwidth, penwidth))
|
||||||
graph.add_edge(con.from_plug.machine.name, con.to_plug.machine.name, color=color, label=label, penwidth=penwidth)
|
graph.add_edge(con.from_plug.machine.name, con.to_plug.machine.name, color=color, label=label, penwidth=penwidth)
|
||||||
|
|
||||||
for rack_id, rack in racks.iteritems():
|
for rack_id, rack in racks.items():
|
||||||
# sub = graph.add_subgraph(rack, name='cluster_%s' % rack_id, rank='same')
|
# sub = graph.add_subgraph(rack, name='cluster_%s' % rack_id, rank='same')
|
||||||
machine_names = list(machine.name for machine in rack['machines'])
|
machine_names = list(machine.name for machine in rack['machines'])
|
||||||
sub = graph.add_subgraph(machine_names, name='cluster_%s' % rack_id, style='rounded')
|
sub = graph.add_subgraph(machine_names, name='cluster_%s' % rack_id, style='rounded')
|
||||||
|
|
|
@ -110,12 +110,12 @@ def get_computer_value_over_time(inventory, computer_id, time_value, flops_price
|
||||||
# """
|
# """
|
||||||
# # matplot 1.1.1 doesn't have the stackplot method in Axes
|
# # matplot 1.1.1 doesn't have the stackplot method in Axes
|
||||||
# if 'toto_stackplot' in dir(ax):
|
# if 'toto_stackplot' in dir(ax):
|
||||||
# ax.stackplot(x_signal, list(y_signals.itervalues()) )
|
# ax.stackplot(x_signal, list(y_signals.values()) )
|
||||||
# plt.legend(list(y_signals.keys()))
|
# plt.legend(list(y_signals.keys()))
|
||||||
# else:
|
# else:
|
||||||
# colors = ['blue', 'orange', 'green', 'purple', 'yellow']
|
# colors = ['blue', 'orange', 'green', 'purple', 'yellow']
|
||||||
# # emulating missing Axes.stackplot method
|
# # emulating missing Axes.stackplot method
|
||||||
# y = np.row_stack(list(y_signals.itervalues()))
|
# y = np.row_stack(list(y_signals.values()))
|
||||||
# # this call to 'cumsum' (cumulative sum), passing in your y data,
|
# # this call to 'cumsum' (cumulative sum), passing in your y data,
|
||||||
# # is necessary to avoid having to manually order the datasets
|
# # is necessary to avoid having to manually order the datasets
|
||||||
# y_stack = np.cumsum(y, axis=0) # a 3x10 array
|
# y_stack = np.cumsum(y, axis=0) # a 3x10 array
|
||||||
|
@ -236,7 +236,7 @@ def draw_cluster_value_over_time_graph(inventory, from_date, to_date, graph_type
|
||||||
|
|
||||||
fig, ax = plt.subplots()
|
fig, ax = plt.subplots()
|
||||||
ax.set_title(graph_type)
|
ax.set_title(graph_type)
|
||||||
# for dept, cluster_value_for_dept in cluster_value.iteritems():
|
# for dept, cluster_value_for_dept in cluster_value.items():
|
||||||
# ax.plot(time_value, cluster_value_for_dept)
|
# ax.plot(time_value, cluster_value_for_dept)
|
||||||
|
|
||||||
stackplot(ax, time_value, cluster_value, legend_location='upper left')
|
stackplot(ax, time_value, cluster_value, legend_location='upper left')
|
||||||
|
|
Loading…
Reference in New Issue