Ejemplo n.º 1
0
def process(workbook: Any, contents: list) -> None:
    """Process Virtual Disks worksheet

    :param workbook:
    :param contents:
    """
    worksheet_name = 'Virtual Disks'
    worksheet = workbook.get_sheet_by_name(worksheet_name)

    family_excel_header = ['FamilyName', 'OperationalState', 'TotalSnapshots']
    host_excel_header = [
        'FamilyName', 'AllocatedCapacity', 'HostName', 'HostOSMode'
    ]

    FamilyTuple = namedtuple('FamilyTuple', family_excel_header)
    HostTuple = namedtuple('HostTuple', host_excel_header)

    build_header(worksheet, family_excel_header)
    build_header(worksheet, host_excel_header, 'E')

    family_header = ['familyname', 'operationalstate', 'totalsnapshots']
    host_header = [
        'familyname', 'allocatedcapacity', 'presentation/hostname',
        'presentation/hostosmode'
    ]

    family_data, host_data = [], []  # type: list, list
    for content in contents:
        doc = xmltodict.parse(content)

        family_data += list(
            ordered_jsons(search_tag_value(doc, 'object'), family_header))

        raw_host_data = [
            flatten_dict(det_dict)
            for det_dict in search_tag_value(doc, 'object')
        ]
        host_data += ordered_jsons(raw_host_data, host_header)

    final_col, final_row = write_excel(family_data, worksheet, FamilyTuple,
                                       'A')
    sheet_process_output(worksheet, 'FamilyTable', 'Virtual Disks', final_col,
                         final_row)

    final_col, final_row = write_excel(host_data, worksheet, HostTuple, 'E')
    sheet_process_output(worksheet,
                         'HostTable',
                         'Virtual Disks',
                         final_col,
                         final_row,
                         start_col=ord('E'))
Ejemplo n.º 2
0
def process(workbook: Any, contents: list) -> None:
    """Process Disk Group worksheet

    :param workbook:
    :param contents:
    """
    worksheet_name = 'Disk Group'
    worksheet = workbook.get_sheet_by_name(worksheet_name)

    disk_excel_header = [
        'DiskGroupName', 'TotalDisks', 'DiskDriveType', 'RequestedSparePolicy',
        'CurrentSparePolicy', 'TotalStorageSpaceGB', 'UsedStorageSpaceGB'
    ]
    object_excel_header = [
        'ObjectName', 'TotalUngroupedDisks', 'XMLCapacityGB'
    ]

    DiskTuple = namedtuple('DiskTuple', disk_excel_header)
    ObjectTuple = namedtuple('ObjectTuple', object_excel_header)

    build_header(worksheet, disk_excel_header)
    build_header(worksheet, object_excel_header, 'I')

    disk_header = [
        'diskgroupname', 'totaldisks', 'diskdrivetype', 'requestedsparepolicy',
        'currentsparepolicy', 'totalstoragespacegb', 'usedstoragespacegb'
    ]
    object_header = ['objectname', 'totalungroupeddisks', 'xmlcapacitygb']

    disk_data, object_data = [], []  # type: list, list
    for content in contents:
        doc = xmltodict.parse(content)
        disk_data += list(
            ordered_jsons(search_tag_value(doc, 'object'), disk_header))

        object_data += list(
            ordered_jsons(search_tag_value(doc, 'object'), object_header))

    final_col, final_row = write_excel(disk_data, worksheet, DiskTuple, 'A')
    sheet_process_output(worksheet, 'DiskTable', 'Disk Group', final_col,
                         final_row)

    final_col, final_row = write_excel(object_data, worksheet, ObjectTuple,
                                       'I')
    sheet_process_output(worksheet,
                         'ObjectTable',
                         'Disk Group',
                         final_col,
                         final_row,
                         start_col=ord('I'))
Ejemplo n.º 3
0
def process(workbook: Any, contents: list) -> None:
    """Process Hosts worksheet

    :param workbook:
    :param contents:
    """
    worksheet_name = 'Hosts'
    worksheet = workbook.get_sheet_by_name(worksheet_name)

    host_excel_header = [
        'HostName', 'OperationalState', 'OSMode', 'HostType', 'VirtualDiskName'
    ]

    HostTuple = namedtuple('HostTuple', host_excel_header)

    build_header(worksheet, host_excel_header)

    host_header = [
        'hostname', 'operationalstate', 'osmode', 'hosttype',
        'presentation/virtualdiskname'
    ]

    disk_data = []  # type: list
    for content in contents:
        doc = xmltodict.parse(content)

        raw_disk_data = [
            flatten_dict(det_dict)
            for det_dict in search_tag_value(doc, 'object')
        ]
        disk_data += ordered_jsons(raw_disk_data, host_header)

    final_col, final_row = write_excel(disk_data, worksheet, HostTuple, 'A')
    sheet_process_output(worksheet, 'HostsTable', 'Hosts', final_col,
                         final_row)
Ejemplo n.º 4
0
def process(workbook: Any, contents: list) -> None:
    """Process Storage Inventory worksheet

    :param workbook:
    :param contents:
    """
    worksheet_name = 'Storage Inventory'
    worksheet = workbook.get_sheet_by_name(worksheet_name)

    system_excel_header = [
        'SystemObjectName', 'SystemType', 'FirmwareVersion',
        'TotalStorageSpace', 'AvailableStorageSpace', 'UsedStorageSpace'
    ]

    SystemTuple = namedtuple('SystemTuple', system_excel_header)

    build_header(worksheet, system_excel_header)

    system_header = [
        'objectname', 'systemtype', 'firmwareversion', 'totalstoragespace',
        'availablestoragespace', 'usedstoragespace'
    ]

    system_data = []  # type: list
    for content in contents:
        doc = xmltodict.parse(content)
        system_data += list(
            ordered_jsons(search_tag_value(doc, 'object'), system_header))

    final_col, final_row = write_excel(system_data, worksheet, SystemTuple,
                                       'A')
    sheet_process_output(worksheet, 'SystemTable', 'Storage Inventory',
                         final_col, final_row)
Ejemplo n.º 5
0
def process(workbook: Any, contents: list) -> None:
    """Process Controller worksheet

    :param workbook:
    :param contents:
    """
    worksheet_name = 'Disk Enclosure'
    worksheet = workbook.get_sheet_by_name(worksheet_name)

    excel_header = [
        'Name', 'Type', 'DiskSlotType', 'Transport', 'ProductId',
        'ProductNumber', 'DiskSlot'
    ]

    RowTuple = namedtuple('RowTuple', excel_header)
    build_header(worksheet, excel_header)

    header = [
        'objectname', 'objecttype', 'diskslottype', 'transport', 'productid',
        'productnum', 'diskslot/name'
    ]

    disk_data = []  # type: list
    for content in contents:
        doc = xmltodict.parse(content)

        raw_disk_data = [
            flatten_dict(det_dict)
            for det_dict in search_tag_value(doc, 'object')
        ]
        for main_dict in raw_disk_data:
            entry = list(ordered_jsons([main_dict], ['diskslot']))
            if entry:
                main_dict['diskslot'] = merge_dicts(main_dict['diskslot'])
                main_dict = flatten_dict(main_dict)
                disk_data += ordered_jsons([main_dict], header)

    final_col, final_row = write_excel(disk_data, worksheet, RowTuple, 'A')
    sheet_process_output(worksheet, 'DiskEnclosureTable', 'DiskEnclosure',
                         final_col, final_row)
Ejemplo n.º 6
0
def process(workbook: Any, contents: list) -> None:
    """Process Disks worksheet

    :param workbook:
    :param contents:
    """
    worksheet_name = 'Disks'
    worksheet = workbook.get_sheet_by_name(worksheet_name)

    disks_excel_header = [
        'DiskName', 'OperationalState', 'EnclosureDiskBays', 'DiskBayNumber',
        'ShelfNumber', 'DiskGroupName', 'DiskType', 'ModelNumber',
        'FormattedCapacity', 'Occupancy'
    ]

    HostTuple = namedtuple('HostTuple', disks_excel_header)

    build_header(worksheet, disks_excel_header)

    disks_header = [
        'diskname', 'operationalstate', 'EnclosureDiskBays', 'diskbaynumber',
        'shelfnumber', 'diskgroupname', 'disktype', 'modelnumber',
        'formattedcapacity', 'occupancy'
    ]

    disk_data = []  # type: list
    for content in contents:
        doc = xmltodict.parse(content)

        raw_disk_data = [flatten_dict(det_dict)
                         for det_dict in search_tag_value(doc, 'object')]
        disk_data += ordered_jsons(raw_disk_data, disks_header)

    final_col, final_row = write_excel(disk_data, worksheet, HostTuple, 'A')
    sheet_process_output(
        worksheet,
        'DisksTable',
        'Disks',
        final_col,
        final_row)
Ejemplo n.º 7
0
def process(workbook: Workbook, content: tuple) -> None:
    """Process StorageArrayPivot worksheet

    :param workbook:
    :param content:
    """
    worksheet_name = 'StorageArrayPivot'
    worksheet = workbook.get_sheet_by_name(worksheet_name)

    speed_header = [
        'ArrayName', 'SumRegisteredInitiators',
        'SumLoggedInInitiators', 'SumNotLoggedInInitiators'
    ]
    model_header = ['ArrayModel', 'Count']
    revision_header = ['Revision', 'Count']

    SpeedTuple = namedtuple(
        'RowTuple', speed_header)  # pylint: disable=invalid-name
    ModelTuple = namedtuple(
        'RowTuple', model_header)  # pylint: disable=invalid-name
    RevisionTuple = namedtuple(
        'RowTuple', model_header)  # pylint: disable=invalid-name

    build_header(worksheet, speed_header)
    build_header(worksheet, model_header, 'F')
    build_header(worksheet, revision_header, 'I')

    speed_array_groups = groupby(itemgetter(6, 0), content[0])
    speed_groups = groupby(itemgetter(0), speed_array_groups)

    speed_rows, grand_total = [], [0, 0, 0]  # type: list, list
    for speed in speed_groups:
        total_initiators = [0, 0, 0]
        array_rows = []
        for array in speed_groups[speed]:
            array_initiators = list(zip(*speed_array_groups[array]))

            row = [
                array[1], sum(map(int, array_initiators[3])),
                sum(map(int, array_initiators[4])),
                sum(map(int, array_initiators[5]))
            ]

            total_initiators = [x + y
                                for x, y in zip(total_initiators, row[1:])]
            array_rows.append(map(str, row))
        grand_total = [x + y for x, y in zip(grand_total, total_initiators)]
        speed_rows += [[speed] + list(map(str, total_initiators)), *array_rows]

    speed_rows += [['Grand Total'] + grand_total]
    final_col, final_row = 0, 0
    for row_n, row_tuple in enumerate(map(SpeedTuple._make, speed_rows), 2):
        for col_n, col_value in \
                enumerate(row_tuple._asdict().values(), ord('A')):
            cell = worksheet['{}{}'.format(chr(col_n), row_n)]
            col_value = str(col_value) \
                if not isinstance(col_value, str) else col_value
            cell.value = col_value
            style_value_cell(cell)
            if row_tuple.ArrayName \
                    in [sg for sg in speed_groups.keys()] + ['Grand Total']:
                cell.font = Font(bold=True, size=11)
            set_cell_to_number(cell)
            final_col = col_n
        final_row = row_n

    sheet_process_output(
        worksheet,
        'StorageArrayPivotTable',
        'StorageArrayPivot',
        final_col,
        final_row)

    model_rows = [(key, len(val)) for key, val in content[1].items()]
    model_rows.append(('Total', sum([row[1] for row in model_rows])))
    final_col, final_row = write_excel(model_rows, worksheet, ModelTuple, 'F')
    sheet_process_output(
        worksheet,
        'ModelTable',
        'StorageArrayPivot',
        final_col,
        final_row,
        start_col=ord('F'))

    revision_rows = [(key, len(val)) for key, val in content[2].items()]
    revision_rows.append(('Total', sum([row[1] for row in revision_rows])))
    final_col, final_row = write_excel(
        revision_rows, worksheet, RevisionTuple, 'I')
    sheet_process_output(
        worksheet,
        'RevisionTable',
        'StorageArrayPivot',
        final_col,
        final_row,
        start_col=ord('I'))