sys-cpu 0.8.3 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/{CHANGES.rdoc → CHANGES.md} +50 -25
- data/Gemfile +7 -0
- data/{MANIFEST.rdoc → MANIFEST.md} +12 -9
- data/{README.rdoc → README.md} +21 -21
- data/Rakefile +6 -8
- data/lib/sys/cpu.rb +3 -1
- data/lib/sys/darwin/sys/cpu.rb +167 -0
- data/lib/sys/linux/sys/cpu.rb +45 -15
- data/lib/sys/unix/sys/cpu.rb +41 -73
- data/lib/sys/windows/sys/cpu.rb +289 -271
- data/spec/spec_helper.rb +9 -0
- data/spec/sys_cpu_bsd_spec.rb +94 -0
- data/spec/sys_cpu_hpux_spec.rb +50 -0
- data/spec/sys_cpu_linux_spec.rb +53 -0
- data/spec/sys_cpu_spec.rb +18 -0
- data/spec/sys_cpu_sunos_spec.rb +80 -0
- data/spec/sys_cpu_windows_spec.rb +61 -0
- data/sys-cpu.gemspec +5 -5
- metadata +49 -56
- metadata.gz.sig +0 -0
- data/test/test_sys_cpu.rb +0 -23
- data/test/test_sys_cpu_bsd.rb +0 -97
- data/test/test_sys_cpu_hpux.rb +0 -49
- data/test/test_sys_cpu_linux.rb +0 -31
- data/test/test_sys_cpu_sunos.rb +0 -81
- data/test/test_sys_cpu_version.rb +0 -19
- data/test/test_sys_cpu_windows.rb +0 -72
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8f9a7931b9cc69f3f9725734f85a34fd5ca077226a52f22bdef4fd9f298813c7
|
4
|
+
data.tar.gz: b7fc906ea6420ed2dde2c9bc546cd5a782e6dc4f3527eb60ac7e5ee9b2cc002e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 07a5729274191c98a35515d26b04906222504a8f9a27d551a604998fad5cf40596a240d90434ec0706e54e7ac27d211d222cac122ce101b9d72e29657eda1990
|
7
|
+
data.tar.gz: 44068c3fa47b3b9af47485133cd52e8d5bfef6638fbfd54a1e21822b1f8617343c4156d2ce17f3f2a46987cdbc2309fecfbacc33f582bb74ffe553229bd7d0ba
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/{CHANGES.rdoc → CHANGES.md}
RENAMED
@@ -1,34 +1,59 @@
|
|
1
|
-
|
1
|
+
## 1.0.3 - 28-Jan-2021
|
2
|
+
* The code for OSX was split out into its own source file. This was partly for
|
3
|
+
ease of maintenance, but also because there was confusion with the
|
4
|
+
processor_info function. The original function was only aimed at Solaris, but
|
5
|
+
it turns out OSX has its own, different implementation. This caused segfaults.
|
6
|
+
|
7
|
+
## 1.0.2 - 25-Jan-2021
|
8
|
+
* Fixed issues where things that were meant to be private weren't actually private.
|
9
|
+
|
10
|
+
## 1.0.1 - 20-Dec-2020
|
11
|
+
* Switched from rdoc to markdown.
|
12
|
+
|
13
|
+
## 1.0.0 - 23-Oct-2020
|
14
|
+
* Fixed a bug in the Windows version where the attempt to convert the ConfigManagerErrorCode
|
15
|
+
to a string was busted. Coincidentally, this also exposed a core bug in JRuby (see PR #6443).
|
16
|
+
Thanks go to G. Gibson for reporting the issue.
|
17
|
+
* Switched the tests from test-unit to rspec.
|
18
|
+
|
19
|
+
## 0.9.0 - 12-May-2020
|
20
|
+
* Added explicit freq, architecture, num_cpu and model methods to the Linux
|
21
|
+
version in an effort to create a common interface across platforms.
|
22
|
+
* Modified the Linux version so that method_missing will raise a NoMethodError
|
23
|
+
if you try to call access an attribute that doesn't exist.
|
24
|
+
* Some updates to the Linux tests.
|
25
|
+
|
26
|
+
## 0.8.3 - 18-Mar-2020
|
2
27
|
* Properly include a LICENSE file as per the Apache-2.0 license.
|
3
28
|
|
4
|
-
|
29
|
+
## 0.8.2 - 14-Jan-2020
|
5
30
|
* Added explicit .rdoc extension to README, CHANGES and MANIFEST files.
|
6
31
|
* Fixed license name in README.
|
7
32
|
|
8
|
-
|
33
|
+
## 0.8.1 - 4-Nov-2018
|
9
34
|
* Added metadata to the gemspec.
|
10
35
|
* Fixed missing hyphen in license name.
|
11
36
|
|
12
|
-
|
37
|
+
## 0.8.0 - 17-Oct-2018
|
13
38
|
* Switched license to Apache 2.0.
|
14
39
|
* Updated documentation for the cpu_stats method on Linux.
|
15
40
|
* The VERSION constant is now frozen.
|
16
41
|
* Now uses require_relative internally where needed.
|
17
42
|
|
18
|
-
|
43
|
+
## 0.7.2 - 5-Sep-2015
|
19
44
|
* Replaced a global array with a constant in the Linux version. Thanks go
|
20
45
|
to Yorick Peterse for the patch.
|
21
46
|
* Added method comments back to the Unix version.
|
22
47
|
* Added a sys-cpu.rb stub file for your convenience.
|
23
48
|
* This gem is now signed.
|
24
49
|
|
25
|
-
|
50
|
+
## 0.7.1 - 2-May-2013
|
26
51
|
* Added a workaround for a win32ole bug in the Windows version.
|
27
52
|
* Reorganized code so that there is now a single gem rather than three
|
28
53
|
separate platform gems.
|
29
54
|
* Updated test-unit dependency which let me simplify the test files a bit.
|
30
55
|
|
31
|
-
|
56
|
+
## 0.7.0 - 14-Dec-2011
|
32
57
|
* Code base now uses FFI. However, HP-UX is not currently supported.
|
33
58
|
HP-UX users should continue to use the 0.6.x version. Note that
|
34
59
|
the code base remains unchanged on Linux and Windows.
|
@@ -37,7 +62,7 @@
|
|
37
62
|
* The type method has been changed to cpu_type on Windows.
|
38
63
|
* Some Rakefile and test suite updates.
|
39
64
|
|
40
|
-
|
65
|
+
## 0.6.4 - 27-Sep-2011
|
41
66
|
* The CPU.freq method now works on OSX.
|
42
67
|
* The CPU.model method on OSX has been altered. Previously it
|
43
68
|
returned the machine model. However, the information is limited.
|
@@ -45,7 +70,7 @@
|
|
45
70
|
* The Linux and Windows gems now have a 'universal' architecture.
|
46
71
|
* Refactored the clean task in the Rakefile.
|
47
72
|
|
48
|
-
|
73
|
+
## 0.6.3 - 9-Oct-2010
|
49
74
|
* Fixed a bug in the install.rb file and refactored it a bit. Thanks go
|
50
75
|
to Di-an Jan for the spot. Note, however, that this file will eventually
|
51
76
|
be removed and/or integrated into the Linux source file.
|
@@ -53,7 +78,7 @@
|
|
53
78
|
* Fixed and updated the CPU.architecture method on MS Windows to handle IA64
|
54
79
|
and x64 architectures.
|
55
80
|
|
56
|
-
|
81
|
+
## 0.6.2 - 1-Jan-2010
|
57
82
|
* Fixed a bug in the cpu_freq function (which would only be noticed on
|
58
83
|
certain platforms in cases where the CPU.freq method failed). Thanks
|
59
84
|
go to Edho P Arief for the spot.
|
@@ -66,13 +91,13 @@
|
|
66
91
|
* Test files renamed.
|
67
92
|
* Added test-unit 2.x as a development dependency.
|
68
93
|
|
69
|
-
|
94
|
+
## 0.6.1 - 4-Jan-2009
|
70
95
|
* Fix for OS X 10.5.x. Thanks go to Victor Costan for the spot and the patch.
|
71
96
|
* Updated the gemspec and some other minor changes.
|
72
97
|
* On MS Windows the impersonation level is now explicitly set to 'impersonate'
|
73
98
|
to avoid issues where systems might be using an older version of WMI.
|
74
99
|
|
75
|
-
|
100
|
+
## 0.6.0 - 26-Apr-2007
|
76
101
|
* Added support for most BSD flavors, including OS X. The freebsd.c file is
|
77
102
|
now just bsd.c.
|
78
103
|
* The CPU.type method for Solaris has been changed to CPU.cpu_type to avoid
|
@@ -84,7 +109,7 @@
|
|
84
109
|
* Improved RDoc comments in the C source files.
|
85
110
|
* Changed CPUError to CPU::Error.
|
86
111
|
|
87
|
-
|
112
|
+
## 0.5.5 - 17-Nov-2006
|
88
113
|
* Fixed a bug in the Linux version where there could be a key but no
|
89
114
|
associated value, causing a String#strip! call to fail. Now the value is
|
90
115
|
simply left at nil.
|
@@ -94,14 +119,14 @@
|
|
94
119
|
* Modified the gemspec so that it sets the platform properly for Linux
|
95
120
|
and Windows.
|
96
121
|
|
97
|
-
|
122
|
+
## 0.5.4 - 12-Jul-2006
|
98
123
|
* Added a gemspec (and a gem on RubyForge).
|
99
124
|
* The CPU.architecture method on HP-UX now returns nil if it cannot be
|
100
125
|
determined instead of "Unknown" for consistency with the other
|
101
126
|
platforms.
|
102
127
|
* Inlined the RDoc and made some minor cosmetic source code changes.
|
103
128
|
|
104
|
-
|
129
|
+
## 0.5.3 - 4-May-2006
|
105
130
|
* Fixed in a bug in the Solaris version where CPU.load_avg returned bad values
|
106
131
|
when compiled in 64 bit mode. Thanks go to James Hranicky for the spot and
|
107
132
|
both James Hranicky and Peter Tribble (via comp.unix.solaris) for patches.
|
@@ -109,7 +134,7 @@
|
|
109
134
|
which test suite to run. All platforms now use 'ts_all.rb', which will run
|
110
135
|
the appropriate test case behind the scenes.
|
111
136
|
|
112
|
-
|
137
|
+
## 0.5.2 - 24-Jun-2005
|
113
138
|
* Bug fixed on Linux where empty lines could cause problems. This affected
|
114
139
|
both the install.rb and linux.rb files, though it only seems to have been
|
115
140
|
an issue on the 2.6+ kernel.
|
@@ -118,7 +143,7 @@
|
|
118
143
|
is the only entry.
|
119
144
|
* Added a sample program for Linux under the 'examples' directory.
|
120
145
|
|
121
|
-
|
146
|
+
## 0.5.1 - 5-May-2005
|
122
147
|
* Fixed a potential bug in the FreeBSD version of CPU.model.
|
123
148
|
* Eliminated some warnings in the FreeBSD version.
|
124
149
|
* Moved examples directory to the toplevel package directory.
|
@@ -131,7 +156,7 @@
|
|
131
156
|
doc/linux.txt.
|
132
157
|
* Some $LOAD_PATH setup changes in the unit tests.
|
133
158
|
|
134
|
-
|
159
|
+
## 0.5.0 - 26-Jun-2004
|
135
160
|
* Now requires Ruby 1.8.0 or later.
|
136
161
|
* FreeBSD support added.
|
137
162
|
* Replaced 'CPUException' with 'CPUError'
|
@@ -145,7 +170,7 @@
|
|
145
170
|
* The .html files have been removed. You can generate the html on your own
|
146
171
|
if you like.
|
147
172
|
|
148
|
-
|
173
|
+
## 0.4.0 - 18-Sep-2003
|
149
174
|
* Added MS Windows support
|
150
175
|
* Changed some method names. The "cpu" has been dropped from most method
|
151
176
|
names. See documentation for details.
|
@@ -157,14 +182,14 @@
|
|
157
182
|
* Minor API change for the load_avg() method on HP-UX. It now accepts a
|
158
183
|
CPU number as an argument.
|
159
184
|
|
160
|
-
|
185
|
+
## 0.3.1 - 16-Jul-2003
|
161
186
|
* Fixed a bug in the Solaris version that was using up and not
|
162
187
|
freeing file descriptors.
|
163
188
|
* Added html doc for Solaris under doc directory.
|
164
189
|
* Minor changes to test_hpux.rb and test_sunos.rb
|
165
190
|
* Minor README changes.
|
166
191
|
|
167
|
-
|
192
|
+
## 0.3.0 - 30-Jun-2003
|
168
193
|
* Added HP-UX support
|
169
194
|
* Removed the VERSION class method. Use the constant instead
|
170
195
|
* Changed license to "Artistic"
|
@@ -173,7 +198,7 @@
|
|
173
198
|
* Modified extconf.rb, moving some of the dynamic test generation
|
174
199
|
into separate files
|
175
200
|
|
176
|
-
|
201
|
+
## 0.2.2 - 25-Mar-2003
|
177
202
|
* fpu_type and cpu_type now return nil if not found (Solaris)
|
178
203
|
* CPUException is now a direct subclass of StandardError
|
179
204
|
* Modified extconf.rb script
|
@@ -181,19 +206,19 @@
|
|
181
206
|
* Added another test to the solaris test suite
|
182
207
|
* Important note added to INSTALL file
|
183
208
|
|
184
|
-
|
209
|
+
## 0.2.1 - 12-Mar-2003
|
185
210
|
* Added the cpu_stats() class method for Linux, which contains the
|
186
211
|
data from the 'cpu' lines of /proc/stat
|
187
212
|
* Minor fix for extconf.rb (thanks Michael Granger)
|
188
213
|
* Some tests added to Linux test suite
|
189
214
|
* MANIFEST correction
|
190
215
|
|
191
|
-
|
216
|
+
## 0.2.0 - 13-Feb-2003
|
192
217
|
* Linux support added (pure Ruby only)
|
193
218
|
* Many changes to extconf.rb to support Linux version
|
194
219
|
* sys-uname prerequisite dropped
|
195
220
|
* rd2 documentation now kept separate from source
|
196
221
|
|
197
|
-
|
222
|
+
## 0.1.0 - 3-Feb-2003
|
198
223
|
* Initial release
|
199
224
|
* Currently supports Solaris (only)
|
data/Gemfile
ADDED
@@ -1,8 +1,9 @@
|
|
1
1
|
* install.rb
|
2
|
-
*
|
3
|
-
*
|
2
|
+
* LICENSE
|
3
|
+
* MANIFEST.md
|
4
|
+
* CHANGES.md
|
4
5
|
* Rakefile
|
5
|
-
* README.
|
6
|
+
* README.md
|
6
7
|
* sys-cpu.gemspec
|
7
8
|
* certs/djberg96_pub.pem
|
8
9
|
* doc/bsd.txt
|
@@ -16,12 +17,14 @@
|
|
16
17
|
* examples/example_sys_cpu_sunos.rb
|
17
18
|
* examples/example_sys_cpu_windows.rb
|
18
19
|
* lib/sys/cpu.rb
|
20
|
+
* lib/sys/darwin/sys/cpu.rb
|
19
21
|
* lib/sys/linux/sys/cpu.rb
|
20
22
|
* lib/sys/unix/sys/cpu.rb
|
21
23
|
* lib/sys/windows/sys/cpu.rb
|
22
|
-
*
|
23
|
-
*
|
24
|
-
*
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*
|
24
|
+
* spec/spec_helper.rb
|
25
|
+
* spec/sys_cpu_spec.rb
|
26
|
+
* spec/sys_cpu_bsd_spec.rb
|
27
|
+
* spec/sys_cpu_hpux_spec.rb
|
28
|
+
* spec/sys_cpu_linux_spec.rb
|
29
|
+
* spec/sys_cpu_sunos_spec.rb
|
30
|
+
* spec/sys_cpu_windows_spec.rb
|
data/{README.rdoc → README.md}
RENAMED
@@ -1,22 +1,22 @@
|
|
1
|
-
|
1
|
+
## Description
|
2
2
|
A Ruby interface for getting cpu information.
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
## Installation
|
5
|
+
`gem install sys-cpu`
|
6
6
|
|
7
|
-
|
8
|
-
|
7
|
+
## Adding the trusted cert
|
8
|
+
`gem cert --add <(curl -Ls https://raw.githubusercontent.com/djberg96/sys-cpu/ffi/certs/djberg96_pub.pem)`
|
9
9
|
|
10
|
-
|
11
|
-
|
10
|
+
## Notes
|
11
|
+
### Solaris
|
12
12
|
Currently there is no +processors+ iterative method for multi-cpu systems.
|
13
13
|
I plan to add it this in a future release.
|
14
14
|
|
15
|
-
|
15
|
+
### OS X
|
16
16
|
The CPU.model method returns very limited information. I do not yet know
|
17
17
|
how to get more detailed information.
|
18
18
|
|
19
|
-
|
19
|
+
### Linux
|
20
20
|
This is pure Ruby. This version reads information out of /proc/cpuinfo and
|
21
21
|
/proc/loadavg, so if /proc isn't mounted it won't work.
|
22
22
|
|
@@ -30,7 +30,7 @@ build process because the fields vary depending on your setup. So, don't
|
|
30
30
|
look at it until *after* you've installed it. You will see a doc/linux.txt
|
31
31
|
file after you run +rake install+ (via install.rb).
|
32
32
|
|
33
|
-
|
33
|
+
### HP-UX
|
34
34
|
Unlike other platforms, you can get load averages for an individual cpu in
|
35
35
|
multi-cpu systems. See documentation for more details.
|
36
36
|
|
@@ -38,38 +38,38 @@ Note that version 0.7.x and later will not work on HP-UX because of the
|
|
38
38
|
switch to FFI and the lack of a testing platform. However, version 0.6.x
|
39
39
|
will work just fine.
|
40
40
|
|
41
|
-
|
41
|
+
### MS Windows
|
42
42
|
This is a pure Ruby implementation using the win32ole package + WMI. The C
|
43
43
|
version has been scrapped.
|
44
44
|
|
45
45
|
As of version 0.5.0, the CPU.usage method has been removed in favor of the
|
46
46
|
CPU.load_avg method. This does not (currently) use a perf counter, so there
|
47
|
-
is no longer any delay.
|
48
|
-
+supported+ method has been dropped.
|
47
|
+
is no longer any delay. Also, the +processors+ method has been added and the
|
48
|
+
+supported+ method has been dropped. See the documentation for other changes.
|
49
49
|
|
50
|
-
|
50
|
+
## Acknowledgements
|
51
51
|
Thanks go to the MPlayer team for some source code that helped me on
|
52
52
|
certain versions of FreeBSD in the original C version.
|
53
53
|
|
54
|
-
|
54
|
+
## Known Bugs
|
55
55
|
None that I'm aware of. Please report bugs on the project page at:
|
56
56
|
|
57
57
|
https://github.com/djberg96/sys-cpu
|
58
58
|
|
59
|
-
|
59
|
+
## Future Plans
|
60
60
|
* Add iterative CPU.processors method.
|
61
61
|
* Add more information in general, such as what +prtdiag+ shows.
|
62
62
|
|
63
|
-
|
63
|
+
## License
|
64
64
|
Apache-2.0
|
65
65
|
|
66
|
-
|
67
|
-
(C) 2003-
|
66
|
+
## Copyright
|
67
|
+
(C) 2003-2021 Daniel J. Berger, All Rights Reserved
|
68
68
|
|
69
|
-
|
69
|
+
## Warranty
|
70
70
|
This package is provided "as is" and without any express or
|
71
71
|
implied warranties, including, without limitation, the implied
|
72
72
|
warranties of merchantability and fitness for a particular purpose.
|
73
73
|
|
74
|
-
|
74
|
+
## Author
|
75
75
|
Daniel J. Berger
|
data/Rakefile
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
require 'rake'
|
2
2
|
require 'rake/clean'
|
3
|
-
require 'rake/testtask'
|
4
3
|
require 'rbconfig'
|
4
|
+
require 'rspec/core/rake_task'
|
5
5
|
include RbConfig
|
6
6
|
|
7
|
-
CLEAN.include('**/*.gem', '**/*.rbc', '**/*.rbx')
|
7
|
+
CLEAN.include('**/*.gem', '**/*.rbc', '**/*.rbx', '**/*.lock')
|
8
8
|
|
9
9
|
namespace 'gem' do
|
10
10
|
desc "Create the sys-cpu gem"
|
@@ -12,7 +12,7 @@ namespace 'gem' do
|
|
12
12
|
require 'rubygems/package'
|
13
13
|
spec = eval(IO.read('sys-cpu.gemspec'))
|
14
14
|
spec.signing_key = File.join(Dir.home, '.ssh', 'gem-private_key.pem')
|
15
|
-
Gem::Package.build(spec
|
15
|
+
Gem::Package.build(spec)
|
16
16
|
end
|
17
17
|
|
18
18
|
desc "Install the sys-cpu gem"
|
@@ -44,9 +44,7 @@ task :example => [:clean] do
|
|
44
44
|
|
45
45
|
end
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
t.test_files = FileList['test/test_sys_cpu.rb']
|
50
|
-
end
|
47
|
+
desc "Run the test suite"
|
48
|
+
RSpec::Core::RakeTask.new(:spec)
|
51
49
|
|
52
|
-
task :default => :
|
50
|
+
task :default => :spec
|
data/lib/sys/cpu.rb
CHANGED
@@ -5,7 +5,7 @@ require 'rbconfig'
|
|
5
5
|
module Sys
|
6
6
|
class CPU
|
7
7
|
# The version of the sys-cpu gem.
|
8
|
-
VERSION = '0.
|
8
|
+
VERSION = '1.0.3'.freeze
|
9
9
|
end
|
10
10
|
end
|
11
11
|
|
@@ -14,6 +14,8 @@ case RbConfig::CONFIG['host_os']
|
|
14
14
|
require_relative('linux/sys/cpu')
|
15
15
|
when /windows|mswin|mingw|cygwin|dos/i
|
16
16
|
require_relative('windows/sys/cpu')
|
17
|
+
when /darwin|mach|osx/i
|
18
|
+
require_relative('darwin/sys/cpu')
|
17
19
|
else
|
18
20
|
require_relative('unix/sys/cpu')
|
19
21
|
end
|
@@ -0,0 +1,167 @@
|
|
1
|
+
require 'ffi'
|
2
|
+
require 'rbconfig'
|
3
|
+
|
4
|
+
module Sys
|
5
|
+
class CPU
|
6
|
+
extend FFI::Library
|
7
|
+
ffi_lib FFI::Library::LIBC
|
8
|
+
|
9
|
+
# Error raised if any of the CPU methods fail.
|
10
|
+
class Error < StandardError; end
|
11
|
+
|
12
|
+
CTL_HW = 6 # Generic hardware/cpu
|
13
|
+
|
14
|
+
HW_MACHINE = 1 # Machine class
|
15
|
+
HW_MODEL = 2 # Specific machine model
|
16
|
+
HW_NCPU = 3 # Number of CPU's
|
17
|
+
HW_CPU_FREQ = 15 # CPU frequency
|
18
|
+
HW_MACHINE_ARCH = 12 # Machine architecture
|
19
|
+
|
20
|
+
SI_MACHINE = 5
|
21
|
+
SI_ARCHITECTURE = 6
|
22
|
+
SC_NPROCESSORS_ONLN = 15
|
23
|
+
|
24
|
+
P_OFFLINE = 1
|
25
|
+
P_ONLINE = 2
|
26
|
+
P_FAULTED = 4
|
27
|
+
P_POWEROFF = 5
|
28
|
+
P_NOINTR = 6
|
29
|
+
P_SPARE = 7
|
30
|
+
|
31
|
+
CPU_ARCH_ABI64 = 0x01000000
|
32
|
+
CPU_TYPE_X86 = 7
|
33
|
+
CPU_TYPE_X86_64 = (CPU_TYPE_X86 | CPU_ARCH_ABI64)
|
34
|
+
CPU_TYPE_SPARC = 14
|
35
|
+
CPU_TYPE_POWERPC = 18
|
36
|
+
CPU_TYPE_POWERPC64 = CPU_TYPE_POWERPC | CPU_ARCH_ABI64
|
37
|
+
|
38
|
+
attach_function(
|
39
|
+
:sysctl,
|
40
|
+
[:pointer, :uint, :pointer, :pointer, :pointer, :size_t],
|
41
|
+
:int
|
42
|
+
)
|
43
|
+
|
44
|
+
private_class_method :sysctl
|
45
|
+
|
46
|
+
attach_function(
|
47
|
+
:sysctlbyname,
|
48
|
+
[:string, :pointer, :pointer, :pointer, :size_t],
|
49
|
+
:int
|
50
|
+
)
|
51
|
+
|
52
|
+
private_class_method :sysctlbyname
|
53
|
+
|
54
|
+
attach_function :getloadavg, [:pointer, :int], :int
|
55
|
+
attach_function :processor_info, [:int, :int, :string, :pointer, :pointer], :int
|
56
|
+
attach_function :sysconf, [:int], :long
|
57
|
+
|
58
|
+
private_class_method :getloadavg
|
59
|
+
private_class_method :processor_info
|
60
|
+
private_class_method :sysconf
|
61
|
+
|
62
|
+
# Returns the cpu's architecture. On most systems this will be identical
|
63
|
+
# to the CPU.machine method. On OpenBSD it will be identical to the CPU.model
|
64
|
+
# method.
|
65
|
+
#
|
66
|
+
def self.architecture
|
67
|
+
optr = FFI::MemoryPointer.new(:char, 256)
|
68
|
+
size = FFI::MemoryPointer.new(:size_t)
|
69
|
+
|
70
|
+
size.write_int(optr.size)
|
71
|
+
|
72
|
+
if sysctlbyname('hw.machine', optr, size, nil, 0) < 0
|
73
|
+
raise Error, 'sysctlbyname function failed'
|
74
|
+
end
|
75
|
+
|
76
|
+
optr.read_string
|
77
|
+
end
|
78
|
+
|
79
|
+
# Returns the number of cpu's on your system. Note that each core on
|
80
|
+
# multi-core systems are counted as a cpu, e.g. one dual core cpu would
|
81
|
+
# return 2, not 1.
|
82
|
+
#
|
83
|
+
def self.num_cpu
|
84
|
+
optr = FFI::MemoryPointer.new(:long)
|
85
|
+
size = FFI::MemoryPointer.new(:size_t)
|
86
|
+
|
87
|
+
size.write_long(optr.size)
|
88
|
+
|
89
|
+
if sysctlbyname('hw.ncpu', optr, size, nil, 0) < 0
|
90
|
+
raise Error, 'sysctlbyname failed'
|
91
|
+
end
|
92
|
+
|
93
|
+
optr.read_long
|
94
|
+
end
|
95
|
+
|
96
|
+
# Returns the cpu's class type. On most systems this will be identical
|
97
|
+
# to the CPU.architecture method. On OpenBSD it will be identical to the
|
98
|
+
# CPU.model method.
|
99
|
+
#
|
100
|
+
def self.machine
|
101
|
+
buf = 0.chr * 32
|
102
|
+
mib = FFI::MemoryPointer.new(:int, 2)
|
103
|
+
size = FFI::MemoryPointer.new(:long, 1)
|
104
|
+
|
105
|
+
mib.write_array_of_int([CTL_HW, HW_MACHINE])
|
106
|
+
size.write_int(buf.size)
|
107
|
+
|
108
|
+
if sysctl(mib, 2, buf, size, nil, 0) < 0
|
109
|
+
raise Error, 'sysctl function failed'
|
110
|
+
end
|
111
|
+
|
112
|
+
buf.strip
|
113
|
+
end
|
114
|
+
|
115
|
+
# Returns a string indicating the cpu model.
|
116
|
+
#
|
117
|
+
def self.model
|
118
|
+
ptr = FFI::MemoryPointer.new(:long)
|
119
|
+
size = FFI::MemoryPointer.new(:size_t)
|
120
|
+
|
121
|
+
size.write_long(ptr.size)
|
122
|
+
|
123
|
+
if sysctlbyname('hw.cputype', ptr, size, nil, 0) < 0
|
124
|
+
raise 'sysctlbyname function failed'
|
125
|
+
end
|
126
|
+
|
127
|
+
case ptr.read_long
|
128
|
+
when CPU_TYPE_X86, CPU_TYPE_X86_64
|
129
|
+
'Intel'
|
130
|
+
when CPU_TYPE_SPARC
|
131
|
+
'Sparc'
|
132
|
+
when CPU_TYPE_POWERPC, CPU_TYPE_POWERPC64
|
133
|
+
'PowerPC'
|
134
|
+
else
|
135
|
+
'Unknown'
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
# Returns an integer indicating the speed of the CPU.
|
140
|
+
#
|
141
|
+
def self.freq
|
142
|
+
optr = FFI::MemoryPointer.new(:long)
|
143
|
+
size = FFI::MemoryPointer.new(:size_t)
|
144
|
+
|
145
|
+
size.write_long(optr.size)
|
146
|
+
|
147
|
+
if sysctlbyname('hw.cpufrequency', optr, size, nil, 0) < 0
|
148
|
+
raise Error, 'sysctlbyname failed'
|
149
|
+
end
|
150
|
+
|
151
|
+
optr.read_long / 1000000
|
152
|
+
end
|
153
|
+
|
154
|
+
# Returns an array of three floats indicating the 1, 5 and 15 minute load
|
155
|
+
# average.
|
156
|
+
#
|
157
|
+
def self.load_avg
|
158
|
+
loadavg = FFI::MemoryPointer.new(:double, 3)
|
159
|
+
|
160
|
+
if getloadavg(loadavg, loadavg.size) < 0
|
161
|
+
raise Error, 'getloadavg function failed'
|
162
|
+
end
|
163
|
+
|
164
|
+
loadavg.get_array_of_double(0, 3)
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|