背景需求:
- 由于日常业务更新可以有并发执行,但每个任务执行的时间不一,为了缩短整体的服务更新时间,用最小堆数据结构以更新时间耗时为维度做了更新任务的排序。
import sys
import json
def getJsonData(file):
with open(file,'r') as f:
data = json.load(f)
if data:
return data
else:
return False
class PriorityQueue:
def __init__(self,updateService,priorityMapping,jenkinsJobMapping):
self.__updateService = updateService
self.__priority = priorityMapping
self.__jenkinsService = jenkinsJobMapping
self.__updateServicePriority = {}
self.__jenkinsJobList = []
def listPriority(self):
print (self.__priority)
for key,value in self.__priority.items():
print (key)
print (value)
def listJenkinsJobs(self):
print ("service list:")
for key,value in self.__jenkinsService.items():
print (key)
print (value)
def sortService(self):
service = sorted(self.__updateServicePriority.items(), key=lambda x: x[1], reverse=True)
if service:
return service
else:
return False
def getPriorityServiceList(self):
services = self.sortService()
if services:
servicelist = []
for i in services:
servicelist.append(i[0])
return servicelist
else:
return False
def checkUpdateServices(self):
for service in self.__updateService:
if service not in self.__priority.keys():
print("Error:could not found :%s in priority") %(service)
sys.exit(1)
else:
self.__updateServicePriority[service] = self.__priority[service]
for service in self.__updateService:
if service not in self.__jenkinsService:
print ("Error:could not found %s in jenkins Jobs") %(service)
sys.exit(1)
print self.__updateServicePriority
def getJobNameList(self):
data = self.getPriorityServiceList()
if data:
self.__jenkinsJobList = data
return self.__jenkinsJobList
else:
return False