Object
Encapsulates system CPU information
The version of the sys-cpu library
Returns the host CPU's architecture, or nil if it cannot be determined.
# File lib/windows/sys/cpu.rb, line 75 def self.architecture(host=Socket.gethostname) cs = BASE_CS + "//#{host}/root/cimv2:Win32_Processor='cpu0'" begin wmi = WIN32OLE.connect(cs) rescue WIN32OLERuntimeError => e raise Error, e else self.get_cpu_arch(wmi.Architecture) end end
Returns a hash of arrays that contain the number of seconds that the system spent in user mode, user mode with low priority (nice), system mode, and the idle task, respectively.
# File lib/linux/sys/cpu.rb, line 99 def self.cpu_stats cpu_stat_file = "/proc/stat" hash = {} # Hash needed for multi-cpu systems lines = IO.readlines(cpu_stat_file) lines.each_with_index{ |line, i| array = line.split break unless array[0] =~ /cpu/ # 'cpu' entries always on top # Some machines list a 'cpu' and a 'cpu0'. In this case only # return values for the numbered cpu entry. if lines[i].split[0] == "cpu" && lines[i+1].split[0] =~ /cpu\d/ next end vals = array[1..-1].map{ |e| e = e.to_i / 100 } # 100 jiffies/sec. hash[array[0]] = vals } hash end
Returns a string indicating the type of processor, e.g. GenuineIntel.
# File lib/windows/sys/cpu.rb, line 258 def self.cpu_type(host = Socket.gethostname) cs = BASE_CS + "//#{host}/root/cimv2:Win32_Processor='cpu0'" begin wmi = WIN32OLE.connect(cs) rescue WIN32OLERuntimeError => e raise Error, e else return wmi.Manufacturer end end
# File lib/unix/sys/cpu.rb, line 306 def self.fpu_type raise NoMethodError unless respond_to?(:processor_info, true) pinfo = ProcInfo.new if processor_info(0, pinfo) < 0 if processor_info(1, pinfo) < 0 raise Error, "process_info function failed" end end pinfo[:pi_fputypes].to_s end
Returns an integer indicating the speed (i.e. frequency in Mhz) of cpu_num on host, or the localhost if no host is specified. If cpu_num +1 is greater than the number of cpu's on your system or this call fails for any other reason, a Error is raised.
# File lib/windows/sys/cpu.rb, line 91 def self.freq(cpu_num = 0, host = Socket.gethostname) cs = BASE_CS + "//#{host}/root/cimv2:Win32_Processor='cpu#{cpu_num}'" begin wmi = WIN32OLE.connect(cs) rescue WIN32OLERuntimeError => e raise Error, e else return wmi.CurrentClockSpeed end end
Returns the load capacity for cpu_num on host, or the localhost if no host is specified, averaged to the last second. Processor loading refers to the total computing burden for each processor at one time.
Note that this attribute is actually the LoadPercentage. I may use one of the Win32_Perf* classes in the future.
# File lib/windows/sys/cpu.rb, line 110 def self.load_avg(cpu_num = 0, host = Socket.gethostname) cs = BASE_CS + "//#{host}/root/cimv2:Win32_Processor='cpu#{cpu_num}'" begin wmi = WIN32OLE.connect(cs) rescue WIN32OLERuntimeError => e raise Error, e else return wmi.LoadPercentage end end
# File lib/unix/sys/cpu.rb, line 170 def self.machine if respond_to?(:sysctl, true) buf = 0.chr * 32 mib = FFI::MemoryPointer.new(:int, 2) size = FFI::MemoryPointer.new(:long, 1) mib.write_array_of_int([CTL_HW, HW_MACHINE]) size.write_int(buf.size) if sysctl(mib, 2, buf, size, nil, 0) < 0 raise Error, "sysctl function failed" end buf.strip else buf = 0.chr * 257 if sysinfo(SI_MACHINE, buf, buf.size) < 0 raise Error, "sysinfo function failed" end buf.strip end end
Returns a string indicating the cpu model, e.g. Intel Pentium 4.
# File lib/windows/sys/cpu.rb, line 123 def self.model(host = Socket.gethostname) cs = BASE_CS + "//#{host}/root/cimv2:Win32_Processor='cpu0'" begin wmi = WIN32OLE.connect(cs) rescue WIN32OLERuntimeError => e raise Error, e else return wmi.Name end end
Returns an integer indicating the number of cpu's on the system.
# File lib/windows/sys/cpu.rb, line 138 def self.num_cpu(host = Socket.gethostname) cs = BASE_CS + "//#{host}/root/cimv2:Win32_ComputerSystem='#{host}'" begin wmi = WIN32OLE.connect(cs) rescue WIN32OLERuntimeError => e raise Error, e else return wmi.NumberOfProcessors end end
Returns a CPUStruct for each CPU on host, or the localhost if no host is specified. A CPUStruct contains the following members:
address_width
architecture
availability
caption
config_manager_error_code
config_manager_user_config
cpu_status
creation_class_name
freq
voltage
data_width
description
device_id
error_cleared?
error_description
ext_clock
family
install_date
l2_cache_size
l2_cache_speed
last_error_code
level
manufacturer
max_clock_speed
name
other_family_description
pnp_device_id
power_management_supported?
power_management_capabilities
processor_id
processor_type
revision
role
socket_designation
status
status_info
stepping
system_creation_class_name
system_name
unique_id
upgrade_method
version
voltage_caps
Note that not all of these members will necessarily be defined.
# File lib/windows/sys/cpu.rb, line 199 def self.processors(host = Socket.gethostname) # :yields: CPUStruct begin wmi = WIN32OLE.connect(BASE_CS + "//#{host}/root/cimv2") rescue WIN32OLERuntimeError => e raise Error, e else wmi.InstancesOf("Win32_Processor").each{ |cpu| yield CPUStruct.new( cpu.AddressWidth, self.get_cpu_arch(cpu.Architecture), self.get_availability(cpu.Availability), cpu.Caption, self.get_cmec(cpu.ConfigManagerErrorCode), cpu.ConfigManagerUserConfig, get_status(cpu.CpuStatus), cpu.CreationClassName, cpu.CurrentClockSpeed, cpu.CurrentVoltage, cpu.DataWidth, cpu.Description, cpu.DeviceId, cpu.ErrorCleared, cpu.ErrorDescription, cpu.ExtClock, self.get_family(cpu.Family), cpu.InstallDate, cpu.L2CacheSize, cpu.L2CacheSpeed, cpu.LastErrorCode, cpu.Level, cpu.LoadPercentage, cpu.Manufacturer, cpu.MaxClockSpeed, cpu.Name, cpu.OtherFamilyDescription, cpu.PNPDeviceID, cpu.PowerManagementSupported, cpu.PowerManagementCapabilities, cpu.ProcessorId, self.get_processor_type(cpu.ProcessorType), cpu.Revision, cpu.Role, cpu.SocketDesignation, cpu.Status, cpu.StatusInfo, cpu.Stepping, cpu.SystemCreationClassName, cpu.SystemName, cpu.UniqueId, self.get_upgrade_method(cpu.UpgradeMethod), cpu.Version, self.get_voltage_caps(cpu.VoltageCaps) ) } end end
# File lib/unix/sys/cpu.rb, line 320 def self.state(num = 0) raise NoMethodError unless respond_to?(:processor_info, true) pinfo = ProcInfo.new if processor_info(num, pinfo) < 0 raise Error, "process_info function failed" end case pinfo[:pi_state].to_i when P_ONLINE "online" when P_OFFLINE "offline" when P_POWEROFF "poweroff" when P_FAULTED "faulted" when P_NOINTR "nointr" when P_SPARE "spare" else "unknown" end end
Generated with the Darkfish Rdoc Generator 2.