class Aio::Module::OutputStyle::ExcelTableOffice

Constants

TitleBanner

TitleBanner = “湖北中行现场巡检报告”

Attributes

worksheet[RW]

Public Class Methods

new() click to toggle source
Calls superclass method Aio::Module::OutputStyle::new
# File lib/modules/output/style/excel_table_office.rb, line 53
  def initialize
          super({
                  :author                      => "Elin",
                  :description => "这个模块按照表格输出excel文件, 以Office运行",
                  :file_suffix => "xls",
:platform     => ['windows']
          })
  end

Public Instance Methods

alarm_text(bool) click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 399
def alarm_text(bool)
        if bool == true
                return "正常 □  异常 ■"
        else
                return "正常 ■  异常 □"
        end
end
generate() click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 62
def generate
        excel = WorkBook.new

        # 显示开关
        excel.show

        # 关闭警告提示
        excel.display_alerts = false

        @worksheet = excel.add_worksheet("sheet")

        # 设置整体列宽
        @worksheet.width("a", 18)
        @worksheet.width("b", 10) 
        @worksheet.width("c", 15) 
        @worksheet.width("d", 15) 
        @worksheet.width("e", 17) 
        @worksheet.width("f", 7)
        @worksheet.width("g", 7)

        # 设置整体行高
        @worksheet.height(20)

#      DevicePool.size.times do |t|
#              device_name = DevicePool[t][0]
        device_manager.devices.each_key do |device_name|
                device_klass = device_manager[device_name]
                device_info = { 
                        :device_klass => device_klass,
                        :manager_ip => "", #DevicePool[t][1],
                        #:device_index => t
                }
                case device_klass
                when Cisco, H3C, Maipu
                        generate_table(device_info)
                else
                        print_error "未生成表格的设备: #{device_name}"
                end
        end

        # 设置垂直分页符
        excel.window_pagebreak
        @worksheet.pagebreak_left(1) if @worksheet.has_pagebreak?
        excel.window_normal

        # 恢复警告提示
        excel.display_alerts = true

        # 保存
        begin
                excel.save(output_file.to_s)
        rescue Exception => e
                puts e.message
        ensure
                excel.close
        end
                
end
generate_clock(device_info) click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 197
def generate_clock(device_info)
        device_klass = device_info[:device_klass]
        cmd = case device_klass
                                when Cisco, Maipu
                                        "show clock"
                                when H3C
                                        "display clock"
                                end
        @worksheet.add_row do |row|
                row.merge("c", "g")
                tmp  = device_klass.clock
                time = Aio::Base::Toolkit::Date.time_to_s(tmp)
                time.insert(0, "`") if time.size > 5
                row << [
                        cmd,
                        "巡检时间", time
                ]
                row.style("a", "BoldStyle")
        end
end
generate_cpu_memory(device_info) click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 287
def generate_cpu_memory(device_info)
        device_klass = device_info[:device_klass]
        cmd_cpu = CmdSwitch.cpu(device_klass)
        cmd_mem = CmdSwitch.memory(device_klass)

        @worksheet.add_row do |row|
                row.merge("d", "e")
                row.merge("f", "g")
                row << [
                        cmd_cpu, "路由状态",
                        "cpu 利用率(%)", device_klass.cpu_percent,
                        ""
                ]
                row.style("a", "BoldStyle")
        end
        @begin_row = @worksheet.current_row_id

        @worksheet.add_row do |row|
                row.merge("d", "e")
                row.merge("f", "g")
                row << [
                        cmd_mem, "路由状态",
                        "memory 利用率(%)", device_klass.memory_percent,
                        ""
                ]
                row.style("a", "BoldStyle")
        end
end
generate_environment(device_info) click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 316
def generate_environment(device_info)
        device_klass = device_info[:device_klass]
        cmd = case device_klass
                                when Cisco
                                        ["show environment"] * 3
                                when H3C
                                        [nil, "display power", "display fan"]
                                when Maipu
                                        ["show environment", "show system power",
                                                "show system fan" ]
                                else
                                        ["show environment"] * 3
                                end
        
        unless cmd[0].nil?
                @worksheet.add_row do |row|
                        tmp = alarm_text(device_klass.warning_env?)
                        row.merge("d", "e")
                        row.merge("f", "g")
                        row << [
                                cmd[0], "路由状态",
                                "温度", tmp,
                                ""
                        ]
                        row.style("a", "BoldStyle")
                end
        end
        beg_row = @worksheet.current_row_id

        @worksheet.add_row do |row|
                tmp = alarm_text(device_klass.warning_env?)
                row.merge("d", "e")
                row.merge("f", "g")
                row << [
                        cmd[1], "路由状态",
                        "电源", tmp,
                        ""
                ]
                row.style("a", "BoldStyle")
        end
        @worksheet.add_row do |row|
                tmp = alarm_text(device_klass.warning_env?)
                row.merge("d", "e")
                row.merge("f", "g")
                row << [
                        cmd[2], "路由状态",
                        "风扇", tmp,
                        ""
                ]
                row.style("a", "BoldStyle")
        end
        end_row = @worksheet.current_row_id

        # 如果cmd都是一样的,那么就合并
        if cmd[0] == cmd[1] and cmd[1] == cmd[2]
                @worksheet.merge("a#{beg_row}", "a#{end_row}")
        end
end
generate_hander() click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 133
def generate_hander
        @worksheet.add_row do |row|
                row.merge("a", "g")
                row.height = 30
                row << TitleBanner
                row.style("a", "TitleStyle")
        end
        @worksheet.add_row do |row|
                row.merge("b", "g")
                row << ["巡检命令", "1.基本信息"]
                row.style("a", "BoldStyle")
                row.style("b", "BoldStyle")
        end
end
generate_interface(device_info) click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 375
def generate_interface(device_info)
        device_klass = device_info[:device_klass]
        cmd = CmdSwitch.interface(device_klass)

        @worksheet.add_row do |row|
                tmp = alarm_text(device_klass.warning_env?)
                row.merge("d", "e")
                row.merge("f", "g")
                row << [
                        cmd, "路由状态",
                        "接口状态", tmp,
                        ""
                ]
                row.style("a", "BoldStyle")
        end
        @end_row = @worksheet.current_row_id

        @worksheet.merge("b#{@begin_row}", "b#{@end_row}")
end
generate_inventory(device_info) click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 218
def generate_inventory(device_info)
        device_klass = device_info[:device_klass]
        cmd = CmdSwitch.inventory(device_klass)
                        
        @worksheet.add_row do |row|
                row.merge("b", "c")
                row.merge("f", "g")
                row << [
                        cmd,
                        "硬件信息", "接口卡型号", "序列号", "备注"
                ]
                row.style("a", "BoldStyle")
                row.wraptext("a")
        end
        @begin_row = @worksheet.current_row_id
        
        # 循环添加inventory条目
        inv = device_klass.inventory
        inv.each do |info|
                @worksheet.add_row do |row|
                        row.merge("b", "c")
                        row.merge("f", "g")
                        row << [
                                cmd,
                                info[:name], info[:pid],   info[:sn], ""
                        ]
                        row.wraptext("b")
                        row.wraptext("e")
                end
        end

        # 当不足10条的时候,填充空白条目至10条
        if inv.size < 10
                (10 - inv.size).times do |t|
                        @worksheet.add_row do |row|
                                row.merge("b", "c")
                                row.merge("f", "g")
                                row << [
                                        cmd,
                                        "", "", "", ""
                                ]
                        end
                end
        end
        @end_row = @worksheet.current_row_id
        @worksheet.merge("a#{@begin_row}", "a#{@end_row}")
end
generate_line() click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 266
def generate_line
        @worksheet.add_row do |row|
                row.merge("b", "g")
                row << [
                        "", "2.运行状态巡检信息采集"
                ]
                row.style("b", "BoldStyle")
        end
        @worksheet.add_row do |row|
                row.merge("d", "e")
                row.merge("f", "g")
                row << [
                        "", "项目", "内容", "结果", "备注"
                ]
                row.style("b", "BoldStyle")
                row.style("c", "BoldStyle")
                row.style("d", "BoldStyle")
                row.style("f", "BoldStyle")
        end
end
generate_software(device_info) click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 148
def generate_software(device_info)
        device_klass = device_info[:device_klass]
        cmd = CmdSwitch.version(device_klass)
        @worksheet.add_row do |row|
                row.merge("c", "d")
                row.merge("f", "g")
                row << [
                        cmd,
                        "设备名称", device_klass.device_name,
                        "设备型号", device_klass.device_info[:device_model]
                ]
                row.style("a", "BoldStyle")
        end
        @begin_row = @worksheet.current_row_id
        if device_info[:manager_ip]
                manager = device_info[:manager_ip]
        else
                manager = device_klass.get_manger_ip
        end
        @worksheet.add_row do |row|
                row.merge("c", "d")
                row.merge("f", "g")
                row.height = 24
                row << [
                        cmd,
                        #"管理IP", device_info[:manager_ip],
                        "管理IP", manager,
                        "IOS版本", device_klass.ios_version
                ]
                row.wraptext("f")
        end
        @worksheet.add_row do |row|
                row.merge("c", "g")
                row << [
                        cmd,
                        "IOS特性集", device_klass.soft_image
                ]
        end
        @worksheet.add_row do |row|
                row.merge("c", "g")
                row << [
                        cmd,
                        "运行时间", device_klass.uptime
                ]
        end
        @end_row = @worksheet.current_row_id
        @worksheet.merge("a#{@begin_row}", "a#{@end_row}")
end
generate_table(device_info) click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 121
def generate_table(device_info)
        generate_hander
        generate_software(device_info)
        generate_clock(device_info)
        generate_inventory(device_info)
        generate_line
        generate_cpu_memory(device_info)
        generate_environment(device_info)
        generate_interface(device_info)
        pagebreak
end
pagebreak() click to toggle source
# File lib/modules/output/style/excel_table_office.rb, line 395
def pagebreak
        @worksheet.current_row.pagebreak
end