def __init__(self): self.jita = Jita() self.tasks = [] self.catalog_tasks = [] self.catalog_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids=" self.reg_handedover_tasks = [] self.reg_handedover_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids=" self.non_reg_handedover_tasks = [] self.non_reg_handedover_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids=" self.cloned_jps = {} self.compatibility_jps = {} self.jita_task_link = "https://jita.eng.nutanix.com/results?agave_task_ids="
def get_tasks_status(self, tasks): #print "\nTasks: {}\n".format(tasks) overall_tasks_details = {} for task_id in tasks: task_status = Jita.fetch_status_task_id(task_id[0]['$oid']) task_id[0]['task_status'] = task_status self.tasks.append(task_id) if task_id[0]['sub-component'] == 'catalog': self.catalog_tasks.append(task_id) self.catalog_tasks_link = self.jita_task_link + str( task_id[0]['$oid']).strip() + ',' overall_tasks_details['catalog'] = [ self.catalog_tasks, self.catalog_tasks_link ] if task_id[0]['category'] == 'non-reg-handedover': self.non_reg_handedover_tasks.append(task_id) self.non_reg_handedover_tasks_link = self.non_reg_handedover_tasks_link + str( task_id[0]['$oid']).strip() + ',' overall_tasks_details['non-reg-handedover'] = [ self.non_reg_handedover_tasks, self.non_reg_handedover_tasks_link ] if task_id[0]['category'] == 'reg-handedover': self.reg_handedover_tasks.append(task_id) self.reg_handedover_tasks_link = self.reg_handedover_tasks_link + str( task_id[0]['$oid']).strip() + ',' overall_tasks_details['reg-handedover'] = [ self.reg_handedover_tasks, self.reg_handedover_tasks_link ] self.jita_task_link = self.jita_task_link + str( task_id[0]['$oid']).strip() + ',' print( "\n ================ Tasks Details ================= \n {}".format( self.tasks)) print("\n ================ Overall Task Link ================ \n {}". format(self.jita_task_link[:-1])) if self.catalog_tasks: self.catalog_tasks_link = self.catalog_tasks_link[:-1] print( "\n ================ Catalog Task Link ================ \n {}". format(self.catalog_tasks_link)) if self.non_reg_handedover_tasks: self.non_reg_handedover_tasks_link = self.non_reg_handedover_tasks_link[: -1] print( "\n ================ Non-Reg Handedover Tasl Link ================ \n {}" .format(self.non_reg_handedover_tasks_link)) if self.reg_handedover_tasks: self.reg_handedover_tasks_link = self.reg_handedover_tasks_link[: -1] print( "\n ================ Reg Handedover Task Link ================ \n {}" .format(self.reg_handedover_tasks_link)) #return self.jita_task_link[:-1] return overall_tasks_details
class QTMS(object): def __init__(self): self.jita = Jita() self.tasks = [] self.catalog_tasks = [] self.catalog_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids=" self.reg_handedover_tasks = [] self.reg_handedover_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids=" self.non_reg_handedover_tasks = [] self.non_reg_handedover_tasks_link = "https://jita.eng.nutanix.com/results?agave_task_ids=" self.cloned_jps = {} self.compatibility_jps = {} self.jita_task_link = "https://jita.eng.nutanix.com/results?agave_task_ids=" # def kill_tasks(self, tasks): # self.jita.kill_jita_tasks(tasks) def get_job_profile_payload(self, jp_id): payload = self.jita.fetch_job_profile_payload(jp_id) print("Job Profile Payload : {}".format(payload)) def get_job_profile_id(self, jps): for jp in jps: jp_id = self.jita.get_job_profile_id(jp["JP_NAME"]) def clone_job_profile(self, jps, payload2, clone_from_branch, clone_to_branch, clone_key): local_clone = [] for jp in jps: jp_id = self.jita.get_job_profile_id(jp["JP_NAME"]) if jp_id is None: jp_id = jp["JP_ID"] payload1 = self.jita.fetch_job_profile_payload(jp_id) clone_jp = self.jita.clone_job_profile(payload1, payload2, clone_from_branch, clone_to_branch, jp['sub-component'], jp['category'], jp['max_dep']) if clone_jp is not None: local_clone.append(clone_jp) else: local_clone.append(dict()) self.cloned_jps[clone_key] = local_clone def update_job_profiles(self, jps, payload): for jp in jps: #jp_id = self.jita.get_job_profile_id(jp["JP_NAME"]) #if jp_id is None: jp_id = jp["JP_ID"] for tags in payload['tester_tags']: if tags.startswith("max_deployments"): #print "\nTester Tags: {}".format(payload['tester_tags']) payload['tester_tags'].remove(tags) payload['tester_tags'].extend(jp["max_dep"]) #fqa_id = jp.get("FQA", [""]) # fqa_id = '' # if 'emails' in payload.keys(): # fqa_id = payload['emails'] self.jita.update_job_profile_payload(jp_id, jp["JP_NAME"], payload) def trigger_job_profile(self, jps, payload): for jp in jps: print (jp) # jp_id = self.jita.get_job_profile_id(jp["JP_NAME"]) # if jp_id is None: # jp_id = jp["JP_ID"] jp_id = jp["JP_ID"] for tags in payload['tester_tags']: if tags.startswith("max_deployments"): payload['tester_tags'].remove(tags) payload['tester_tags'].extend(jp["max_dep"]) #fqa_id = jp.get("FQA", [""]) fqa_id = '' if 'emails' in payload.keys(): fqa_id = payload['emails'] self.jita.trigger_job_profile(jp["JP_NAME"], jp_id, fqa_id, payload, jp['category'], jp['sub-component']) # print 'Tasks ids are: {}'.format(self.jita.tasks_ids) def send_mail(self, branch, tasks, jita_task_link, email_text=None, email_msg=None, emails=None): build_email(branch, tasks, jita_task_link, email_text, email_msg, emails) def mark_tasks_official(self, tasks, task_link=True): if task_link: delimiters = ",", "=" regexPattern = '|'.join(map(re.escape, delimiters)) task_to_mark_official = re.split(regexPattern, tasks)[1:] else: task_to_mark_official = tasks self.jita.mark_jita_tasks_official(task_to_mark_official) def kill_tasks(self, tasks, task_link=True): if task_link: delimiters = ",", "=" regexPattern = '|'.join(map(re.escape, delimiters)) task_to_kill = re.split(regexPattern, tasks)[1:] else: task_to_kill = tasks self.jita.kill_jita_tasks(task_to_kill) def get_tasks_status(self, tasks): #print "\nTasks: {}\n".format(tasks) overall_tasks_details = {} for task_id in tasks: task_status = Jita.fetch_status_task_id(task_id[0]['$oid']) task_id[0]['task_status'] = task_status self.tasks.append(task_id) if task_id[0]['sub-component'] == 'catalog': self.catalog_tasks.append(task_id) self.catalog_tasks_link = self.jita_task_link + str(task_id[0]['$oid']).strip() + ',' overall_tasks_details['catalog'] = [self.catalog_tasks, self.catalog_tasks_link] if task_id[0]['category'] == 'non-reg-handedover': self.non_reg_handedover_tasks.append(task_id) self.non_reg_handedover_tasks_link = self.non_reg_handedover_tasks_link + str(task_id[0]['$oid']).strip() + ',' overall_tasks_details['non-reg-handedover'] = [self.non_reg_handedover_tasks, self.non_reg_handedover_tasks_link] if task_id[0]['category'] == 'reg-handedover': self.reg_handedover_tasks.append(task_id) self.reg_handedover_tasks_link = self.reg_handedover_tasks_link + str(task_id[0]['$oid']).strip() + ',' overall_tasks_details['reg-handedover'] = [self.reg_handedover_tasks, self.reg_handedover_tasks_link] self.jita_task_link = self.jita_task_link + str(task_id[0]['$oid']).strip() + ',' print ("\n ================ Tasks Details ================= \n {}".format(self.tasks)) print ("\n ================ Overall Task Link ================ \n {}".format(self.jita_task_link[:-1])) if self.catalog_tasks: self.catalog_tasks_link = self.catalog_tasks_link[:-1] print ("\n ================ Catalog Task Link ================ \n {}".format(self.catalog_tasks_link)) if self.non_reg_handedover_tasks: self.non_reg_handedover_tasks_link = self.non_reg_handedover_tasks_link[:-1] print ("\n ================ Non-Reg Handedover Tasl Link ================ \n {}".format(self.non_reg_handedover_tasks_link)) if self.reg_handedover_tasks: self.reg_handedover_tasks_link = self.reg_handedover_tasks_link[:-1] print ("\n ================ Reg Handedover Task Link ================ \n {}".format(self.reg_handedover_tasks_link)) #return self.jita_task_link[:-1] return overall_tasks_details def execute_qtms_ops(self): for jita_operation in self.jita_operations: if jita_operation["op"] == 'update_job_profile': print ("\n ================ Updating Job Profile ================ \n") for jp in self.job_profiles: self.update_job_profiles(jp['jps'], jp['payload']) if jita_operation["op"] == 'trigger_job_profile': for jp in self.job_profiles: self.trigger_job_profile(jp['jps'], jp['payload']) jita_tasks = self.get_tasks_status(self.jita.tasks_ids) if self.catalog_tasks: branch = self.catalog_tasks[0][0]['branch'] #tasks = self.catalog_tasks #jita_task_link = self.catalog_tasks_link emails = [u'*****@*****.**', u'*****@*****.**', u'*****@*****.**', u'*****@*****.**', u'*****@*****.**', u'*****@*****.**', u'*****@*****.**', u'*****@*****.**', u'*****@*****.**'] email_text = 'Catalog Regression Test Run Details' email_msg = 'Catalog Regression Test Run Details' print ("Sending email for Catalog Regression Test runs: {}".format(self.catalog_tasks_link)) mail_instance_catalog = SendEmail(branch, tasks=jita_tasks['catalog'][0], jita_task_link=jita_tasks['catalog'][1], email_text=email_text, email_msg=email_msg, emails=emails) mail_instance_catalog.build_email() #self.send_mail(branch, self.catalog_tasks, self.catalog_tasks_link, email_text, email_msg, emails) if self.reg_handedover_tasks: branch = self.reg_handedover_tasks[0][0]['branch'] #tasks = self.reg_handedover_tasks #jita_task_link = self.reg_handedover_tasks_link emails = ['*****@*****.**', '*****@*****.**', '*****@*****.**','*****@*****.**'] email_text = 'Acropolis Regression Reg Handedover Test Run Details' email_msg = 'Acropolis Regression Reg Handedover Test Run Details' print ("Sending email for Reg Handedover Test runs: {}".format(self.reg_handedover_tasks_link)) mail_instance_reg_handedover = SendEmail(branch, tasks=jita_tasks['reg-handedover'][0], jita_task_link=jita_tasks['reg-handedover'][1], email_text=email_text, email_msg=email_msg, emails=emails) mail_instance_reg_handedover.build_email() #self.send_mail(branch, self.reg_handedover_tasks, self.reg_handedover_tasks_link, email_text, email_msg, emails) if self.non_reg_handedover_tasks: branch = self.non_reg_handedover_tasks[0][0]['branch'] #tasks = self.non_reg_handedover_tasks #jita_task_link = self.non_reg_handedover_tasks_link emails = ['*****@*****.**', '*****@*****.**', '*****@*****.**'] email_text = 'Acropolis Regression Non Reg Handedover Test Run Details' email_msg = 'Acropolis Regression Non Reg Handedover Test Run Details' print ("Sending email for Non-Reg Handedover Test runs: {}".format(self.non_reg_handedover_tasks_link)) mail_instance_non_reg_handedover = SendEmail(branch, tasks=jita_tasks['non-reg-handedover'][0], jita_task_link=jita_tasks['non-reg-handedover'][1], email_text=email_text, email_msg=email_msg, emails=emails) mail_instance_non_reg_handedover.build_email() #self.send_mail(branch, self.non_reg_handedover_tasks, self.non_reg_handedover_tasks_link, email_text, email_msg, emails) # if jp['emails'] is not None: # self.send_mail(jp["payload"]['git']['branch'], self.tasks, jita_tasks, jp['emails']) # else: # self.send_mail(jp["payload"]['git']['branch'], self.tasks, jita_tasks) if self.jita.jps_not_triggered: print ("\n ================ List of Job Profiles Failed to trigger ================ \n {}".format(self.jita.jps_not_triggered)) if jita_operation["op"] == 'create_compatibility_jps': self.create_compatilibility_job_profiles(self.compatibility_matrix, self.component) if jita_operation["op"] == 'clone_job_profile': print ("\n ================ Performning Clone Operations ================ \n") for jp in self.clone_from_jps: #print "JP: {}".format(jp) self.clone_job_profile(jp['jps'], jp['payload'], jita_operation["fromBranch"], jita_operation["toBranch"], jp['jp_type']) print ("\n ================ Jop Profiles Cloned are ================ \n {}".format(self.cloned_jps)) print ("\n ================ Formatted Output of Cloned Job Profiles ================ \n") pprint(self.cloned_jps) def create_compatilibility_job_profiles(self, compat_matrix, component): jps = [] for matrix in compat_matrix: component_values = '' pc_build = '' if matrix["pe"] in PE_MATRIX.keys(): for comp in PE_MATRIX[matrix["pe"]]: if component in comp.keys(): component_values = comp if matrix["pc"] in PC_MATRIX.keys(): pc_build = PC_MATRIX[matrix["pc"]] new_jp = self.jita.create_compatilibility_job_profiles(component, SAMPLE_COMPATIBILITY_PAYLOAD, NEW_COMPATIBILITY_PAYLOAD, component_values, matrix, pc_build) if new_jp is not None: jps.append(new_jp) else: jps.append(dict()) self.compatibility_jps[component] = jps print ("Comaptibility Job Profiles are : {}".format(self.compatibility_jps))