测试监控系列:使用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'批量导入表格,循环统计数据后,打印到根目录下新表格中
Dim excelApp, excelWB As Object
Dim savePath, saveName As StringSet excelApp = CreateObject("Excel.Application")
Set excelWB = excelApp.Workbooks.AddsavePath = "d:\"
saveName = "vb_for_nmon.xls"
excelWB.SaveAs savePath & saveNameexcelApp.Quit'定义一个新表格,用来存统计结果
Set wknew = Excel.Application.Workbooks.Open(savePath & saveName)
wknew.Activate'这个用来根据导入的文件总数,定义统计结果排列顺序
Dim filecount As Integer
filecount = 2'循环导入的文件,统计结果,这里只加了个for循环,改了最后数据打印的位置,中间的计算代码没动
For Each fname In filepathDim wk As Excel.WorkbookDim ws As Excel.WorksheetSet wsThis = Excel.ActiveSheetSet wk = Excel.Application.Workbooks.Open(filepath)wk.Activate'可以手动输入要统计的时间段 若涉及跨日要注意格式 2020/01/05 17:03'sbegintime= InputBox("请输入开始时间:")'sendtime= InputBox("请输入结束时间:")'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%'为了在循环中只取值一次,加了开关,默认0Dim beginRowTemp%, endRowTemp%beginRowTemp = 0endRowTemp = 0'循环拿到sheet页For i = 1 To wk.Sheets.Countsheetname = wk.Sheets(i).Name'取CPU平均值If sheetname = "CPU_ALL" Then'时间默认第一列,取总行数,遍历找时间hrow = wk.Sheets(i).[A1].CurrentRegion.Rows.CountFor j = 2 To hrow'格式化每个时间,逐一比较result1 = Format(wk.Sheets(i).Cells(j, 1), "hh:mm")'找开始行If result1 = sbegintime Then'按分钟匹配,有很多重复,只取第一次拿到的行数,关闭开关If beginRowTemp = 0 ThenbeginRow = jbeginRowTemp = 1End IfEnd If'找结束行If result1 = sendtime ThenIf endRowTemp = 0 ThenendRow = jendRowTemp = 1Exit ForEnd IfEnd IfNext 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" ThenIOavg = 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值 需要先算平均值 再减, 因为是自己加的百分比,所以*100If sheetname = "MEM" Thenmemtotal = 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 * 100MEMresult = Format(MEM, "Fixed") & "%"End IfNext i
'最后把结果打印到首页'统计完把表格关了
wk.Close'把路径名改为文件名保存
fname2 = Split(fname, "\")
'UBound取数组最大下标
fname3 = fname2(UBound(fname2))wknew.Sheets(1).Cells(filecount, 1) = fname3wknew.Sheets(1).Cells(1, 2) = "CPU"
wknew.Sheets(1).Cells(filecount, 2) = CPUresultwknew.Sheets(1).Cells(1, 3) = "IO"
wknew.Sheets(1).Cells(filecount, 3) = IOavgresult & IOmaxresultwknew.Sheets(1).Cells(1, 4) = "MEM"
wknew.Sheets(1).Cells(filecount, 4) = MEMresultfilecount = filecount + 1
NextEnd Sub
测试监控系列:使用vb批量统计nmon结果相关推荐
- ML:MLOps系列讲解之《MLOps原则—迭代增量过程/自动化/持续部署/版本控制/实验跟踪/测试/监控/“ML成绩”系统/可再现性/松散耦合架构(模块化)/基于ML的软件交付指标等》解读
ML:MLOps系列讲解之<MLOps原则-迭代增量过程/自动化/持续部署/版本控制/实验跟踪/测试/监控/"ML成绩"系统/可再现性/松散耦合架构(模块化)/基于ML的软件 ...
- 服务器多系统ssd寿命检测,多品牌服务器上SSD磁盘寿命的批量统计与监控方法
1.多品牌服务器上SSD磁盘寿命的批量统计与监控方法,其特征在于:包括以下步骤: (1).判断磁盘是否支持S.M.A.R.T协议,对于支持S.M.A.R.T协议的磁盘,在服务器上使用lspci判断是否 ...
- C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll]
前言 当你认真的写完客户端和服务器端的时候可能不需要再继续往下看关于播放器的代码和说明,因为你已经掌握了如何转换VC++代码的技巧了,加上GOOGLE再来完成这个播放器应该算小菜了.但是作为我的系列, ...
- C# 视频监控系列 序 [完]
一.截图 二.关于视频监控系统的一些摘录 中国视频监控市场现状与发展趋势 近年来,中国视频监控市场受到"平安城市"项目.奥运安防项目以及各地.各行业安防项目需求加速增长等因 ...
- C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)
前言 这几天加紧赶工写服务器端的程序,所有系列文章更新较慢,见谅: ) 注意 本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心.实现以及其他能够贴 ...
- C# 视频监控系列(7):服务器端——封装API(下)(1)
前言 写系列文章的时候[前言]部分变得无言了,可能来得顺利了点吧: ) 本章中提供的封装均是我用笨办法从<<Hikvision 板卡网络开发包编程手册V4.7>>和<&l ...
- Prometheus监控系列一 | 安装部署及配置
Prometheus监控系列一 | 安装部署及配置 文章目录 0 简介 1 基础环境 2 安装Prometheus 2.1 安装 2.2 配置开机自启动 2.3 启动服务 2.4 验证 3 安装Gra ...
- 【SpringBoot DB系列】Jooq批量写入采坑记录
[SpringBoot DB系列]Jooq批量写入采坑记录 前面介绍了jooq的三种批量插入方式,结果最近发现这里面居然还有一个深坑,我以为的批量插入居然不是一次插入多条数据,而是一条一条的插入-,这 ...
- 智能网联汽车测试监控平台解决方案
随着"互联网+"概念的快速普及,各行各业的信息化建设正在全面推进.对于管理者,一套实时.易用.信息全面.界面友好的运营平台十分必要. 晶众地图基于自身定位.技术能力及对行业的理解, ...
最新文章
- python文本处理实例_Python 文件处理的简单示例
- php 获取xlsx,PHPExcel获取.xlsx文件内容
- javascript+HTMl5游戏下载,开发一个都能月薪上万!舅服你
- 在计算机系统中有两种不同的图像编码方式,第二章计算机系统与计算原理.ppt...
- luogu_1002 过河卒
- php bigpipe实现,如何通过php 实现BigPipe分块输出
- 在新建FileInputStream时使用当前相对路径或者绝对路径作为参数的问题
- 第7章 现代操作系统
- Java基础 - 变量的定义和使用
- 韦德螺旋: 这真是一个螺旋吗?
- 常用元器件使用方法4:一种Micro-SIM卡连接器的使用方法
- html图片有的不显示不出来的,css背景图片不显示有哪些原因?
- 数学建模与数据分析中的主成分分析
- Competition2:HRZ学英语
- 小白如何快速创建一个属于自己的APP
- UHF超高频RFID纸质电子标签与树莓派通信
- MySQL数据库增删改查SQL语句
- Oracle 导入 txt (oracle 10) 百万数据导入 txt
- 【vue】vue中下载文件的方法
- 《自然杂志》19卷4期的 ‘探索物理学难题的科学意义'的 97个悬而未决的难题