iStats 0.0.3 → 0.0.4

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9bff6f43ceaf154fc22a175a84ab82d3f1230346
4
+ data.tar.gz: bcd0dbe5bdbf052142511505b98d8f600d0c1703
5
+ SHA512:
6
+ metadata.gz: a640c65868a3f78e2f7fb2f9221ccb1de7f7f013e8c81ba5f83fb19d208468c5b1377648a1430323e1d36528ed31100d10bc12841b01e698277665b4d1947ab0
7
+ data.tar.gz: 6d640b55b90680bdf895d685eff2b1ce2b17d3b3fc9e1d438f2dd980e10eade76cfcf87fe0eaf9fd4cb8b2ddcab7e8eae464c665ab2675daf2c8c52a5b7622cb
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- iStats (0.0.2)
4
+ iStats (0.0.3)
5
5
  sparkr
6
6
 
7
7
  GEM
data/README.md CHANGED
@@ -3,23 +3,16 @@ iStats
3
3
 
4
4
  Quick attempt at writing a Ruby wrapper for a small C library that interacts with the IOKit library (apple) to get the CPU temperature. Will expand to more hardware data and stats in the future.
5
5
 
6
- __Note:__ Currently only works for Ruby 2.0. Working on a new gem that will work on 1.9, 2.0 and 2.1.
6
+ #### Tested on
7
+ MacBook Pro 2012<br>
8
+ OS X 10.9.2<br>
9
+ Ruby: 1.9.3, 2.0.0, 2.1.1<br>
7
10
 
8
11
  ## Screenshot
9
12
  ![](http://i.imgur.com/ht2NZCL.gif)
10
13
 
11
14
  ## Installation
12
15
 
13
- Add this line to your application's Gemfile:
14
-
15
- gem 'iStats'
16
-
17
- And then execute:
18
-
19
- $ bundle
20
-
21
- Or install it yourself as:
22
-
23
16
  $ gem install iStats
24
17
 
25
18
  ## Usage
data/ext/osx_stats/smc.c CHANGED
@@ -40,6 +40,24 @@ UInt32 _strtoul(char *str, int size, int base)
40
40
  return total;
41
41
  }
42
42
 
43
+ float _strtof(unsigned char *str, int size, int e)
44
+ {
45
+ float total = 0;
46
+ int i;
47
+
48
+ for (i = 0; i < size; i++)
49
+ {
50
+ if (i == (size - 1))
51
+ total += (str[i] & 0xff) >> e;
52
+ else
53
+ total += str[i] << (size - 1 - i) * (8 - e);
54
+ }
55
+
56
+ total += (str[size-1] & 0x03) * 0.25;
57
+
58
+ return total;
59
+ }
60
+
43
61
  void _ultostr(char *str, UInt32 val)
44
62
  {
45
63
  str[0] = '\0';
@@ -167,19 +185,50 @@ double SMCGetTemperature(char *key)
167
185
  return 0.0;
168
186
  }
169
187
 
188
+ float SMCGetFanSpeed(int fanNum)
189
+ {
190
+ SMCVal_t val;
191
+ kern_return_t result;
192
+
193
+ UInt32Char_t key;
194
+ sprintf(key, SMC_KEY_FAN_SPEED, fanNum);
195
+ result = SMCReadKey(key, &val);
196
+ return _strtof(val.bytes, val.dataSize, 2);
197
+ }
198
+
199
+ int SMCGetFanNumber(char *key)
200
+ {
201
+ SMCVal_t val;
202
+ kern_return_t result;
203
+
204
+ result = SMCReadKey(key, &val);
205
+ return _strtoul((char *)val.bytes, val.dataSize, 10);
206
+ }
207
+
170
208
  // int main(int argc, char *argv[])
171
209
  // {
172
210
  // SMCOpen();
173
- // printf("%0.1f°C\n", SMCGetTemperature(SMC_KEY_CPU_TEMP));
211
+ // //printf("%0.1f°C\n", SMCGetTemperature(SMC_KEY_CPU_TEMP));
212
+ // //printf("%0.1f\n", SMCGetFanSpeed(0));
213
+ // //printf("%0.1f\n", SMCGetFanSpeed(3));
214
+ // //printf("%i\n", SMCGetFanNumber(SMC_KEY_FAN_NUM));
174
215
  // SMCClose();
175
216
  //
176
217
  // return 0;
177
218
  // }
178
219
 
220
+ //
221
+ // RUBY MODULE
222
+ //
179
223
  VALUE CPU_STATS = Qnil;
224
+ VALUE FAN_STATS = Qnil;
180
225
  void Init_osx_stats() {
181
226
  CPU_STATS = rb_define_module("CPU_STATS");
182
227
  rb_define_method(CPU_STATS, "get_cpu_temp", method_get_cpu_temp, 0);
228
+
229
+ FAN_STATS = rb_define_module("FAN_STATS");
230
+ rb_define_method(FAN_STATS, "get_fan_number", method_get_fan_number, 0);
231
+ rb_define_method(FAN_STATS, "get_fan_speed", method_get_fan_speed, 1);
183
232
  }
184
233
 
185
234
  VALUE method_get_cpu_temp(VALUE self) {
@@ -189,3 +238,20 @@ VALUE method_get_cpu_temp(VALUE self) {
189
238
 
190
239
  return rb_float_new(temp);
191
240
  }
241
+
242
+ VALUE method_get_fan_number(VALUE self) {
243
+ SMCOpen();
244
+ int num = SMCGetFanNumber(SMC_KEY_FAN_NUM);
245
+ SMCClose();
246
+
247
+ return INT2NUM(num);
248
+ }
249
+
250
+ VALUE method_get_fan_speed(VALUE self, VALUE num) {
251
+ uint fanNum = NUM2UINT(num);
252
+ SMCOpen();
253
+ float speed = SMCGetFanSpeed(fanNum);
254
+ SMCClose();
255
+
256
+ return rb_float_new(speed);
257
+ }
data/ext/osx_stats/smc.h CHANGED
@@ -41,6 +41,8 @@
41
41
 
42
42
  // key values
43
43
  #define SMC_KEY_CPU_TEMP "TC0P"
44
+ #define SMC_KEY_FAN_SPEED "F%dAc"
45
+ #define SMC_KEY_FAN_NUM "FNum"
44
46
 
45
47
 
46
48
  typedef struct {
@@ -90,8 +92,12 @@ typedef struct {
90
92
 
91
93
 
92
94
  // prototypes
95
+ float SMCGetFanSpeed(int fanNum);
96
+ int SMCGetFanNumber(char *key);
97
+ double SMCGetTemperature(char *key);
98
+
99
+ // Ruby modules
93
100
  void Init_osx_stats();
94
101
  VALUE method_get_cpu_temp(VALUE self);
95
- double SMCGetTemperature(char *key);
96
- kern_return_t SMCSetFanRpm(char *key, int rpm);
97
- int SMCGetFanRpm(char *key);
102
+ VALUE method_get_fan_speed(VALUE self, VALUE num);
103
+ VALUE method_get_fan_number(VALUE self);
data/lib/iStats.rb CHANGED
@@ -11,6 +11,7 @@ require 'iStats/color'
11
11
  require 'iStats/symbols'
12
12
  require 'iStats/command'
13
13
  require 'iStats/cpu'
14
+ require 'iStats/fan'
14
15
 
15
16
  module IStats
16
17
  def self.options
@@ -19,6 +19,8 @@ module IStats
19
19
  all
20
20
  when 'cpu'
21
21
  Cpu.delegate stat
22
+ when 'fan'
23
+ Fan.delegate stat
22
24
  else
23
25
  help("Unknown category: #{category}")
24
26
  end
@@ -26,7 +28,10 @@ module IStats
26
28
 
27
29
  def all
28
30
  # Exec all
31
+ puts "--- CPU Stats ---\n"
29
32
  Cpu.all
33
+ puts "\n--- Fan Stats ---\n"
34
+ Fan.all
30
35
  end
31
36
 
32
37
  # Public: Parse extra options
@@ -68,6 +73,8 @@ module IStats
68
73
  istats all Print all stats
69
74
  istats cpu Print all CPU stats
70
75
  istats cpu [temp | temperature] Print CPU temperature
76
+ istats fan Print all fan stats
77
+ istats fan [speed] Print fan speed
71
78
 
72
79
  for more help see: https://github.com/Chris911/iStats
73
80
  ".gsub(/^ {8}/, '') # strip the first eight spaces of every line
data/lib/iStats/fan.rb ADDED
@@ -0,0 +1,66 @@
1
+ module IStats
2
+ # Fan Stats
3
+ # Extend FAN_STATS C module (ext/osx_stats/smc.c)
4
+ class Fan
5
+ extend FAN_STATS
6
+ class << self
7
+ include IStats::Color
8
+
9
+ def delegate(stat)
10
+ case stat
11
+ when 'all'
12
+ all
13
+ when 'number', 'num'
14
+ print_fan_number
15
+ when 'speed'
16
+ fans_speed
17
+ else
18
+ Command.help "Unknown stat for Fan: #{stat}"
19
+ end
20
+ end
21
+
22
+ def all
23
+ print_fan_number
24
+ fans_speed
25
+ end
26
+
27
+ def fan_number
28
+ # C method
29
+ get_fan_number
30
+ end
31
+
32
+ def print_fan_number
33
+ puts "Total fans on system: #{fan_number}"
34
+ end
35
+
36
+ def fans_speed
37
+ fanNum = fan_number
38
+ (0..(fanNum-1)).each do |n|
39
+ s = get_fan_speed(n)
40
+ print_fan_speed(n, s)
41
+ end
42
+ end
43
+
44
+ def print_fan_speed(fanNum, speed)
45
+ message = "Fan #{fanNum} speed: #{speed} RPM "
46
+ list = [0, 30, 55, 80, 100, 130]
47
+ sparkline = Sparkr.sparkline(list) do |tick, count, index|
48
+ if index.between?(0, 5) and speed > 5500
49
+ flash_red(tick)
50
+ elsif index.between?(0, 1)
51
+ green(tick)
52
+ elsif index.between?(2, 3) and speed > 2500
53
+ light_yellow(tick)
54
+ elsif index == 4 and speed > 3500
55
+ yellow(tick)
56
+ elsif index == 5 and speed > 4500
57
+ red(tick)
58
+ else
59
+ tick
60
+ end
61
+ end
62
+ puts message + sparkline
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,3 +1,3 @@
1
1
  module IStats
2
- VERSION = '0.0.3'
2
+ VERSION = '0.0.4'
3
3
  end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: iStats
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
5
- prerelease:
4
+ version: 0.0.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Chris911
@@ -14,65 +13,57 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: sparkr
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: '0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: '0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: bundler
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
33
  version: '1.3'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
40
  version: '1.3'
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: rake
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rake-compiler
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  description: Stats for your mac
@@ -84,7 +75,7 @@ extensions:
84
75
  - ext/osx_stats/extconf.rb
85
76
  extra_rdoc_files: []
86
77
  files:
87
- - .gitignore
78
+ - ".gitignore"
88
79
  - Gemfile
89
80
  - Gemfile.lock
90
81
  - LICENSE
@@ -99,32 +90,32 @@ files:
99
90
  - lib/iStats/color.rb
100
91
  - lib/iStats/command.rb
101
92
  - lib/iStats/cpu.rb
93
+ - lib/iStats/fan.rb
102
94
  - lib/iStats/symbols.rb
103
95
  - lib/iStats/version.rb
104
96
  homepage: https://github.com/Chris911/iStats
105
97
  licenses:
106
98
  - MIT
99
+ metadata: {}
107
100
  post_install_message:
108
101
  rdoc_options: []
109
102
  require_paths:
110
103
  - lib
111
104
  - ext
112
105
  required_ruby_version: !ruby/object:Gem::Requirement
113
- none: false
114
106
  requirements:
115
- - - ! '>='
107
+ - - ">="
116
108
  - !ruby/object:Gem::Version
117
109
  version: '0'
118
110
  required_rubygems_version: !ruby/object:Gem::Requirement
119
- none: false
120
111
  requirements:
121
- - - ! '>='
112
+ - - ">="
122
113
  - !ruby/object:Gem::Version
123
114
  version: '0'
124
115
  requirements: []
125
116
  rubyforge_project:
126
- rubygems_version: 1.8.25
117
+ rubygems_version: 2.2.2
127
118
  signing_key:
128
- specification_version: 3
119
+ specification_version: 4
129
120
  summary: Stats for your mac
130
121
  test_files: []