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