def name_resolver(self, server_name_form=""): tmpl = env.get_template('index_name_resolver.html') host_name_dict = {} if server_name_form: host_name_dict = name_resolver_se.resolve_server_name(server_name_form) return tmpl.render(server_name_form_to_tmpl=server_name_form, host_name_dict_to_tmpl=host_name_dict)
def generate_report_list(incidents_dict, group_incidents): # result report list. report_list = [] # get total number of incidents: inc_cntr = 0 for inc in group_incidents: # element of group_incidents could be a list too. if isinstance(inc, list): inc_cntr += len(inc) else: inc_cntr += 1 # REPORT HEADER: report_list.append("Total number of incidents: {0}\n".format(inc_cntr)) report_list.append("Action items for next shift: None\n") # iterate over group_incidents list: service_names_dict = {} # this will act like a cache for service name resolver. for num, incident_numbers in enumerate(group_incidents, 1): # one if result report item: group_incidents_txt = ",".join(map(str, incident_numbers)) # list of inc_num to string with "," as a delimiter. # parse details(trigger_summary_data) section: trigger_summary_data = incidents_dict[incident_numbers[0]]['trigger_summary_data'] hostname_txt = "" servicename_txt = "" description_txt = "" for k, v in trigger_summary_data.items(): if k in ["subject"]: # alert from nagios. description_txt = v elif k in ["HOSTNAME"]: # alert from nagios. hostname_txt = v elif k in ["description", "SERVICEDESC"]: # alert from NewRelic. description_txt = v # get ecomm hostname. new_relic_host = re.search(r'(ip-\d{1,3}-\d{1,3}-\d{1,3}-\d{1,3})', v) hostname_txt = new_relic_host.group(0) if new_relic_host else hostname_txt # get ecomm service name. ecomm_service = re.search(r'(eCommerce-\w*)', v) servicename_txt = ecomm_service.group(0) if ecomm_service else servicename_txt # try to resolve hostname. # hostname could be like "us0101abs001" or "us0101abs001.tangome.gbl" or "ip-172-16-148-51" or None or something else. if hostname_txt: # hostname_parts = re.search(r'(\w{2})(\d{4})(\w{1,5})(\d{3}).*', hostname_txt) hostname_parts = re.search(r'([a-z]{2})(\d{4})([a-z]{1,5})(\d+).*', hostname_txt) if hostname_parts: service_part = hostname_parts.group(3) # debug. # print(service_part) # try to use cache: if service_part in service_names_dict: servicename_txt = service_names_dict[service_part] # ask resolver: else: try: service_names_dict[service_part] = name_resolver_se.resolve_server_name(service_part)['5Service Type'][0] servicename_txt = service_names_dict[service_part] except Exception: service_names_dict[service_part] = "" # debug. # pp(service_names_dict) # print(servicename_txt) # BEGIN PRETTY PRINTING: report_list.append("-" * 100) report_list.append("{0}) Incident(s) number: {1}".format(num, group_incidents_txt)) # convert UTC to PDT and MSK timezones: # report_list.append("Opened on: {0}".format(incidents_dict[incident_numbers[0]]['created_on'])) created_on_UTC = incidents_dict[incident_numbers[0]]['created_on'] created_on_PDT = convert_tz(created_on_UTC, 'UTC', 'US/Pacific') created_on_MSK = convert_tz(created_on_UTC, 'UTC', 'Europe/Moscow') report_list.append("Opened on: {1} | {2}".format(created_on_UTC, created_on_PDT, created_on_MSK)) report_list.append("Description: {0}".format(description_txt)) report_list.append("Host: {0}".format(hostname_txt)) report_list.append("Service: {0}".format(servicename_txt)) report_list.append("Status: {0}".format(incidents_dict[incident_numbers[0]]['status'])) # last_status_change_by = incidents_dict[incident_numbers[0]]['last_status_change_by']['name'] if incidents_dict[incident_numbers[0]]['last_status_change_by'] else 'auto' # report_list.append("Last status changed by: {0}".format(last_status_change_by)) # report_list.append("Last status changed on: {0}".format(incidents_dict[incident_numbers[0]]['last_status_change_on'])) # report_list.append("Details:") report_list.append("PD link: {0}".format(incidents_dict[incident_numbers[0]]['html_url'])) report_list.append('Details: None') report_list.append('Ticket number: None') report_list.append('Next actions: None') report_list.append("-" * 100) return report_list