module WoolenCommon::WindowsMonitor
Constants
- FRIENDLY_NAME
- IP_ADAPTER_ADDRESSES_FriendlyName
- IP_ADAPTER_ADDRESSES_IfIndex
- IP_ADAPTER_ADDRESSES_Next
- IP_ADAPTER_ADDRESSES_SIZE
- MIB_IFROW
- MIB_IFROW_InOctets
- MIB_IFROW_OutOctets
- MIB_IFROW_SIZE
- MIB_IFROW_dwIndex
- MIB_IFTABLE_SIZE
Public Class Methods
included(base)
click to toggle source
# File lib/woolen_common/system_monitor/windows_monitor.rb, line 140 def self.included(base) base.extend self end
Public Instance Methods
compare_file_time(time1, time2)
click to toggle source
# File lib/woolen_common/system_monitor/windows_monitor.rb, line 20 def compare_file_time(time1, time2) a = time1[:dwHighDateTime] << 32 | time1[:dwLowDateTime] b = time2[:dwHighDateTime] << 32 | time2[:dwLowDateTime] b - a end
get_common_performance(monitor_cfg)
click to toggle source
# File lib/woolen_common/system_monitor/windows_monitor.rb, line 120 def get_common_performance(monitor_cfg) performance_hash = {} performance_hash['cpu'] = get_system_cpu_usage performance_hash['memory'] = get_system_mem_usage ret_disk = get_system_disk_info if ret_disk performance_hash['r_kBps'] = ret_disk[0] performance_hash['w_kBps'] = ret_disk[1] performance_hash['r_iops'] = ret_disk[2] performance_hash['w_iops'] = ret_disk[3] end net_disk = get_system_network_info(monitor_cfg['net_if_ids']) if net_disk performance_hash['net_tx_bytes'] = net_disk[0] performance_hash['net_rx_bytes'] = net_disk[1] end performance_hash end
get_network_info_by_index(index=14)
click to toggle source
通过本地连接的索引获取本地连接接口发送和接受字节数组
# File lib/woolen_common/system_monitor/windows_monitor.rb, line 94 def get_network_info_by_index(index=14) net_arr = [] ptr_iftable = FFI::MemoryPointer.new(MIB_IFTABLE_SIZE) iftable_size_ptr = FFI::MemoryPointer.new(:uint) iftable_size = MIB_IFTABLE_SIZE iftable_size_ptr.write_uint iftable_size iftable_size_ptr.read_uint dw_ret = Win32Kernel32.getIfTable(ptr_iftable, iftable_size_ptr, 0) dw_num = ptr_iftable.read_uint pifrow_start = (ptr_iftable + MIB_IFROW) pifrow_end = pifrow_start + dw_num * MIB_IFROW_SIZE while pifrow_start.address < pifrow_end.address do if_index = (pifrow_start + MIB_IFROW_dwIndex).read_uint if if_index == index out_bytes = (pifrow_start + MIB_IFROW_OutOctets).read_uint in_bytes = (pifrow_start + MIB_IFROW_InOctets).read_uint net_arr << out_bytes net_arr << in_bytes break end pifrow_start = pifrow_start + MIB_IFROW_SIZE end net_arr end
get_system_cpu_usage(time=1)
click to toggle source
# File lib/woolen_common/system_monitor/windows_monitor.rb, line 26 def get_system_cpu_usage(time=1) p_idle_time = FFI::MemoryPointer.new(Win32Kernel32::Filetime.size) p_kernel_time = FFI::MemoryPointer.new(Win32Kernel32::Filetime.size) p_user_time = FFI::MemoryPointer.new(Win32Kernel32::Filetime.size) idle_time = Win32Kernel32::Filetime.new p_idle_time kernel_time = Win32Kernel32::Filetime.new p_kernel_time usr_time = Win32Kernel32::Filetime.new p_user_time p_pre_idle_time = FFI::MemoryPointer.new(Win32Kernel32::Filetime.size) p_pre_kernel_time = FFI::MemoryPointer.new(Win32Kernel32::Filetime.size) p_pre_user_time = FFI::MemoryPointer.new(Win32Kernel32::Filetime.size) pre_idle_time = Win32Kernel32::Filetime.new p_pre_idle_time pre_kernel_time = Win32Kernel32::Filetime.new p_pre_kernel_time pre_usr_time = Win32Kernel32::Filetime.new p_pre_user_time Win32Kernel32.getSystemTimes(p_pre_idle_time, p_pre_kernel_time, p_pre_user_time) sleep time Win32Kernel32.getSystemTimes(p_idle_time, p_kernel_time, p_user_time) idle = compare_file_time(pre_idle_time, idle_time) ker = compare_file_time(pre_kernel_time, kernel_time) usr = compare_file_time(pre_usr_time, usr_time) (ker + usr - idle) *100 / (ker + usr) end
get_system_disk_info()
click to toggle source
# File lib/woolen_common/system_monitor/windows_monitor.rb, line 55 def get_system_disk_info sz_driver = FFI::MemoryPointer.from_string('\\\\.\\PhysicalDrive0') ptr1 = FFI::MemoryPointer.new(:uint) ptr2 = FFI::MemoryPointer.new(:uint) junk1 = 0 junk2 = 0 p_disk_perform_adder1= FFI::MemoryPointer.new(Win32Kernel32::Disk_Perfomance.size) p_disk_perform1 = Win32Kernel32::Disk_Perfomance.new p_disk_perform_adder1 h_device = Win32Kernel32.createFileA(sz_driver, 0, Win32Kernel32::OPEN_EXISTING, 0, Win32Kernel32::OPEN_EXISTING, 0, 0) Win32Kernel32.deviceIoControl(h_device, Win32Kernel32::IOCTL_DISK_PERFORMANCE, 0, 0, p_disk_perform1, Win32Kernel32::Disk_Perfomance.size, ptr1, 0); puts "BytesRead:#{p_disk_perform1[:BytesRead]} BytesWritten:#{p_disk_perform1[:BytesWritten]} ReadCount:#{p_disk_perform1[:ReadCount]} WriteCount:#{p_disk_perform1[:WriteCount]}" sleep 1 p_disk_perform_adder2= FFI::MemoryPointer.new(Win32Kernel32::Disk_Perfomance.size) p_disk_perform2 = Win32Kernel32::Disk_Perfomance.new p_disk_perform_adder2 Win32Kernel32.deviceIoControl(h_device, Win32Kernel32::IOCTL_DISK_PERFORMANCE, 0, 0, p_disk_perform2, Win32Kernel32::Disk_Perfomance.size, ptr2, 0); #puts "BytesRead:#{p_disk_perform2[:BytesRead]} BytesWritten:#{p_disk_perform2[:BytesWritten]} ReadCount:#{p_disk_perform2[:ReadCount]} WriteCount:#{p_disk_perform2[:WriteCount]}" ret_disk_arr =[] ret_disk_arr << (p_disk_perform2[:BytesRead] - p_disk_perform1[:BytesRead])/1000.to_f ret_disk_arr << (p_disk_perform2[:BytesWritten] - p_disk_perform1[:BytesWritten])/1000.to_f ret_disk_arr << p_disk_perform2[:ReadCount] - p_disk_perform1[:ReadCount] ret_disk_arr << p_disk_perform2[:WriteCount] - p_disk_perform1[:WriteCount] ret_disk_arr end
get_system_mem_usage()
click to toggle source
# File lib/woolen_common/system_monitor/windows_monitor.rb, line 48 def get_system_mem_usage p_ms_adder= FFI::MemoryPointer.new(Win32Kernel32::MemoryStatus.size) p_ms = Win32Kernel32::MemoryStatus.new p_ms_adder Win32Kernel32.globalMemoryStatus(p_ms); p_ms[:dwMemoryLoad] end
get_system_network_info(net_if_ids)
click to toggle source
返回数组发送字节/S和接受字节每秒
# File lib/woolen_common/system_monitor/windows_monitor.rb, line 81 def get_system_network_info(net_if_ids) ret_arr = [] net_if_ids.each do |one_if_id| pre_net_arr = get_network_info_by_index(one_if_id.to_i) sleep 1 next_net_arr = get_network_info_by_index(one_if_id.to_i) ret_arr << (next_net_arr[0] - pre_net_arr[0]) #发送字节数/秒 ret_arr << (next_net_arr[1] - pre_net_arr[1]) #接收字节数/秒 end ret_arr end