测试监控系列:使用vb批量统计nmon结果

适用于一次统计几十台机器的nmon监控结果。

新建excel,在设置里打开开发者工具,点查看代码,把下面代码贴到模块里即可。最后把表格保存为.xlsm

Sub for_nmon()
'
用来统计nmon结果 '2.0改进空间:已修改为,批量加入文件,导入多个文件后,filepath变为数组,然后遍历数组,取出结果,放到一个新excel里 '选中要统计的文件,可改为多选 filepath = Excel.Application.GetOpenFilename(Title:="选择要导入的nmon文件", MultiSelect:=True) 'If filepath = False Then ' Exit Sub 'End If '取当前表格对象
Set wkme = Excel.Application.ThisWorkbook
wkme.Activate '清空sheet页
wkme.Sheets(3).Range("1:65536").ClearContents
'以手动输入要统计的时间段   若涉及跨日要注意格式 2020/01/05  17:03 现在用下面的自动获取时间
'sbegintime= InputBox("请输入开始时间:")
'sbegintime= InputBox("请输入开始时间:")
'批量导入表格,循环统计数据后,打印到根目录下新表格中 Dim excelApp, excelWB As Object Dim savePath, saveName As String Set excelApp = CreateObject("Excel.Application") Set excelWB = excelApp.Workbooks.Add savePath = "d:\" saveName = "vb_for_nmon.xls" 'excelWB.SaveAs savePath & saveName 现在不这么做,直接把结果打印到当前表格的sheet3页 excelApp.Quit '定义一个新表格,用来存统计结果 'Set wknew = Excel.Application.Workbooks.Open(savePath & saveName) 'wknew.Activate '这个用来根据导入的文件总数,定义统计结果排列顺序 Dim filecount As Integer filecount = 2 '循环导入的文件,统计结果,这里只加了个for循环,改了最后数据打印的位置,中间的计算代码没动 For Each fname In filepath Dim wk As Excel.Workbook Dim ws As Excel.Worksheet Set wsThis = Excel.ActiveSheet Set wk = Excel.Application.Workbooks.Open(fname) wk.Activate 'nmon结果首页默认有起始、结束日期,如果不用自己写时间,就用这个自动获取时间 sbegintime = Format(wk.Sheets(1).Cells(1, 5), "hh:mm") sendtime = Format(wk.Sheets(1).Cells(1, 7), "hh:mm") '统计4个结果 '若测试有梯度,可根据行数平均分 Dim CPU#, MEM#, IOavg#, IOmax# Dim CPUresult$, MEMresult$, IOavgresult$, IOmaxresult$ '本脚本的核心是,根据时间段,找到行数,用行数取具体值 '总行数 Dim hrow As Integer '起始行 结束行 需要分梯度时要有差值 Dim beginRow%, endRow%, chaTemp% '为了在循环中只取值一次,加了开关,默认0 Dim beginRowTemp%, endRowTemp% beginRowTemp = 0 endRowTemp = 0 '循环拿到sheet页 For i = 1 To wk.Sheets.Count sheetname = wk.Sheets(i).Name '取CPU平均值 If sheetname = "CPU_ALL" Then '时间默认第一列,取总行数,遍历找时间 hrow = wk.Sheets(i).[A1].CurrentRegion.Rows.Count For j = 2 To hrow '格式化每个时间,逐一比较 result1 = Format(wk.Sheets(i).Cells(j, 1), "hh:mm") '找开始行 If result1 = sbegintime Then '按分钟匹配,有很多重复,只取第一次拿到的行数,关闭开关 If beginRowTemp = 0 Then beginRow = j beginRowTemp = 1 End If End If '找结束行 If result1 = sendtime Then If endRowTemp = 0 Then endRow = j endRowTemp = 1 Exit For End If End If Next j '要统计哪列写哪列,cpu在F,输入开始行、结束行 然后range选中,求平均值 格式化的Fixed表示保留两位小数 CPU = Format(Application.Average(wk.Sheets(i).Range("F" & beginRow & ":F" & endRow)), "Fixed") '加个%号 CPUresult = CPU & "%" '若要把行数分成多份 差值定义为integer类型 会自动取整数 'chaTemp = (endRow - beginRow) / 5 'CPU值也可分段统计 'CPU1 = Format(Application.Average(wk.Sheets(i).Range("F" & beginRow & ":F" & beginRow + chaTemp)), "Fixed") 'CPU2 = Format(Application.Average(wk.Sheets(i).Range("F" & beginRow + chaTemp & ":F" & beginRow + 2 * chaTemp)), "Fixed") End If '取IO平均值、最大值 '已经有了开始、结束行,后面的就很简单了 If sheetname = "DISKBUSY" Then IOavg = Format(Application.Average(wk.Sheets(i).Range("G" & beginRow & ":G" & endRow)), "Fixed") IOavgresult = IOavg & "%" IOmax = Format(Application.Max(wk.Sheets(i).Range("G" & beginRow & ":G" & endRow)), "Fixed") IOmaxresult = IOmax & "%" End If '取MEM值 需要先算平均值 再减, 因为是自己加的百分比,所以*100 If sheetname = "MEM" Then memtotal = Format(Application.Average(wk.Sheets(i).Range("B" & beginRow & ":B" & endRow)), "Fixed") memfree = Format(Application.Average(wk.Sheets(i).Range("F" & beginRow & ":F" & endRow)), "Fixed") cache = Format(Application.Average(wk.Sheets(i).Range("K" & beginRow & ":K" & endRow)), "Fixed") buffer = Format(Application.Average(wk.Sheets(i).Range("N" & beginRow & ":N" & endRow)), "Fixed") MEM = (memtotal - memfree - cache - buffer) / memtotal * 100 MEMresult = Format(MEM, "Fixed") & "%" End If Next i '最后把结果打印到首页 '统计完把表格关了 wk.Close '把路径名改为文件名保存 fname2 = Split(fname, "\") 'UBound取数组最大下标 fname3 = fname2(UBound(fname2)) wknew.Sheets(1).Cells(filecount, 1) = fname3 wknew.Sheets(1).Cells(1, 2) = "CPU" wknew.Sheets(1).Cells(filecount, 2) = CPUresult wknew.Sheets(1).Cells(1, 3) = "IO" wknew.Sheets(1).Cells(filecount, 3) = IOavgresult & IOmaxresult wknew.Sheets(1).Cells(1, 4) = "MEM" wknew.Sheets(1).Cells(filecount, 4) = MEMresult filecount = filecount + 1 Next End Sub

 

posted @ 2021-05-23 17:39  zhaot1993  阅读(220)  评论(0编辑  收藏  举报