def startManage(self): logger.info("----------------------------------") logger.info("Management cycle triggered") logger.info("Time: %s" % datetime.today().strftime("%Y-%m-%d %H:%M:%S")) # regular management self.reqBox.manage() self.siteBox.manage() self.intBox.manage() # scaling mReq = self.reqBox.getMachineTypeRequirement() logger.info("Current requirement: %s" % mReq) siteInfo = self.siteBox.siteInformation runningBySite = self.siteBox.runningMachinesCount # contains a list of all machine types merged runningOverall = summarize_dicts(list(runningBySite.values())) machStat = dict() for (key_, value_) in runningOverall.items(): machStat[key_] = MachineStatus(mReq.get(key_, 0), value_) for key_ in mReq: if not key_ in machStat: machStat[key_] = MachineStatus(mReq.get(key_, 0), 0) decision = self.broker.decide(machStat, siteInfo.values()) # Service machines may modify site decision(s). decision = self.siteBox.modServiceMachineDecision(decision) logger.info("Decision: %s" % decision) logger.debug(runningBySite) # make machine counts absolute, as they come in relative from the broker for (ksite, vmach) in decision.items(): logger.debug("vmatch=%s" % vmach) for kmach in vmach: decision[ksite][kmach] += runningBySite[ksite].get(kmach, []) logger.debug("decision[ksite][kmach]=%s" % decision[ksite][kmach]) logger.info("Absolute Decision: %s" % decision) self.siteBox.applyMachineDecision(decision) logger.info(self.mr.getMachineOverview()) MachineRegistryLogger.dump(self.mr.machines) log = JsonLog() log.writeLog() self.manageIterations += 1 lastIteration = False if self.maximumManageIterations is not None: lastIteration = self.maximumManageIterations <= self.manageIterations if self.autoRun is True and lastIteration is False: self.startManagementTimer()
def startManage(self): logger.info("----------------------------------") logger.info("Management cycle triggered") logger.info("Time: %s" % datetime.today().strftime("%Y-%m-%d %H:%M:%S")) # regular management self.reqBox.manage() self.siteBox.manage() self.intBox.manage() # scaling mReq = self.reqBox.getMachineTypeRequirement() logger.info("Current requirement: %s" % mReq) siteInfo = self.siteBox.siteInformation runningBySite = self.siteBox.runningMachinesCount # contains a list of all machine types merged runningOverall = summarize_dicts(list(runningBySite.values())) machStat = dict() for (key_, value_) in runningOverall.items(): machStat[key_] = MachineStatus(mReq.get(key_, 0), value_) for key_ in mReq: if not key_ in machStat: machStat[key_] = MachineStatus(mReq.get(key_, 0), 0) decision = self.broker.decide(machStat, siteInfo.values()) # Service machines may modify site decision(s). decision = self.siteBox.modServiceMachineDecision(decision) logger.info("Decision: %s" % decision) # make machine counts absolute, as they come in relative from the broker for (ksite, vmach) in decision.items(): for kmach in vmach: decision[ksite][kmach] += runningBySite[ksite].get(kmach, []) logger.info("Absolute Decision: %s" % decision) self.siteBox.applyMachineDecision(decision) logger.info(self.mr.getMachineOverview()) MachineRegistryLogger.dump(self.mr.machines) log = JsonLog() log.writeLog() self.manageIterations += 1 lastIteration = False if self.maximumManageIterations is not None: lastIteration = self.maximumManageIterations <= self.manageIterations if self.autoRun is True and lastIteration is False: self.startManagementTimer()
def init(self): # self.exportMethod(self.setMachineTypeMaxInstances, "setMachineTypeMaxInstances") self.mr.machines = MachineRegistryLogger.load()