instrumental_tools 0.2.1 → 0.3.0

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.
@@ -17,6 +17,10 @@ class SystemInspector
17
17
  TYPES = [:gauges, :incrementors]
18
18
  attr_accessor *TYPES
19
19
 
20
+ def self.memory
21
+ @memory ||= Memory.new
22
+ end
23
+
20
24
  def initialize
21
25
  @gauges = {}
22
26
  @incrementors = {}
@@ -32,6 +36,8 @@ class SystemInspector
32
36
  end
33
37
 
34
38
  def load_all
39
+ self.class.memory.cycle
40
+
35
41
  load @platform.load_cpu
36
42
  load @platform.load_memory
37
43
  load @platform.load_disks
@@ -146,14 +152,23 @@ class SystemInspector
146
152
  end
147
153
 
148
154
  def self.cpu
149
- cpu, user, nice, system, idle, iowait = `cat /proc/stat | grep cpu[^0-9]`.chomp.split(/\s+/)
150
- total = user.to_i + system.to_i + idle.to_i + iowait.to_i
151
- {
152
- 'cpu.user' => (user.to_f / total) * 100,
153
- 'cpu.system' => (system.to_f / total) * 100,
154
- 'cpu.idle' => (idle.to_f / total) * 100,
155
- 'cpu.iowait' => (iowait.to_f / total) * 100,
156
- }
155
+ categories = [:user, :nice, :system, :idle, :iowait]
156
+ values = `cat /proc/stat | grep cpu[^0-9]`.chomp.split(/\s+/).slice(1, 5).map(&:to_f)
157
+ SystemInspector.memory.store(:cpu_values, values.dup)
158
+ if previous_values = SystemInspector.memory.retrieve(:cpu_values)
159
+ values.map!.with_index { |value, index| (previous_values[index] - value).abs }
160
+ end
161
+ data = Hash[*categories.zip(values).flatten]
162
+ total = values.inject { |memo, value| memo + value }
163
+
164
+ output = {}
165
+ if previous_values
166
+ data.each do |category, value|
167
+ output["cpu.#{category}"] = value / total * 100
168
+ end
169
+ end
170
+ output["cpu.in_use"] = 100 - data['idle'] / total * 100
171
+ output
157
172
  end
158
173
 
159
174
  def self.loadavg
@@ -240,6 +255,29 @@ class SystemInspector
240
255
  }
241
256
  end
242
257
  end
258
+
259
+ class Memory
260
+ attr_reader :past_values, :current_values
261
+
262
+ def initialize
263
+ @past_values = {}
264
+ @current_values = {}
265
+ end
266
+
267
+ def store(attribute, value)
268
+ @current_values[attribute] = value
269
+ end
270
+
271
+ def retrieve(attribute)
272
+ @past_values[attribute]
273
+ end
274
+
275
+ def cycle
276
+ @past_values = @current_values
277
+ @current_values = {}
278
+ end
279
+ end
280
+
243
281
  end
244
282
 
245
283
  class ServerController < Pidly::Control
@@ -311,6 +349,9 @@ options = {
311
349
 
312
350
  option_parser = OptionParser.new do |opts|
313
351
  opts.banner = "Usage: instrument_server [-k API_KEY] [options] [-d #{ServerController::COMMANDS.join('|')}]"
352
+ opts.on('-H', '--hostname HOSTNAME', 'Hostname to report as') do |hostname|
353
+ options[:hostname] = hostname
354
+ end
314
355
  opts.on('-k', '--api_key API_KEY', 'API key of your project') do |api_key|
315
356
  options[:api_key] = api_key
316
357
  end
@@ -1,5 +1,5 @@
1
1
  module Instrumental
2
2
  module Tools
3
- VERSION = "0.2.1"
3
+ VERSION = "0.3.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,10 +1,15 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: instrumental_tools
3
- version: !ruby/object:Gem::Version
4
- version: 0.2.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 19
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Elijah Miller
9
14
  - Christopher Zelenak
10
15
  - Kristopher Chambers
@@ -12,62 +17,80 @@ authors:
12
17
  autorequire:
13
18
  bindir: bin
14
19
  cert_chain: []
15
- date: 2011-12-28 00:00:00.000000000 Z
16
- dependencies:
17
- - !ruby/object:Gem::Dependency
18
- name: json
19
- requirement: &70269861069500 !ruby/object:Gem::Requirement
20
- none: false
21
- requirements:
22
- - - ! '>='
23
- - !ruby/object:Gem::Version
24
- version: '0'
20
+
21
+ date: 2012-01-11 00:00:00 Z
22
+ dependencies:
23
+ - !ruby/object:Gem::Dependency
25
24
  type: :runtime
26
- prerelease: false
27
- version_requirements: *70269861069500
28
- - !ruby/object:Gem::Dependency
29
- name: instrumental_agent
30
- requirement: &70269861068720 !ruby/object:Gem::Requirement
25
+ requirement: &id001 !ruby/object:Gem::Requirement
31
26
  none: false
32
- requirements:
33
- - - ! '>='
34
- - !ruby/object:Gem::Version
35
- version: '0.5'
27
+ requirements:
28
+ - - ">="
29
+ - !ruby/object:Gem::Version
30
+ hash: 3
31
+ segments:
32
+ - 0
33
+ version: "0"
34
+ name: json
35
+ version_requirements: *id001
36
+ prerelease: false
37
+ - !ruby/object:Gem::Dependency
36
38
  type: :runtime
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 1
45
+ segments:
46
+ - 0
47
+ - 5
48
+ version: "0.5"
49
+ name: instrumental_agent
50
+ version_requirements: *id002
37
51
  prerelease: false
38
- version_requirements: *70269861068720
39
- - !ruby/object:Gem::Dependency
40
- name: pidly
41
- requirement: &70269861067960 !ruby/object:Gem::Requirement
52
+ - !ruby/object:Gem::Dependency
53
+ type: :runtime
54
+ requirement: &id003 !ruby/object:Gem::Requirement
42
55
  none: false
43
- requirements:
44
- - - ! '>='
45
- - !ruby/object:Gem::Version
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 29
60
+ segments:
61
+ - 0
62
+ - 1
63
+ - 3
46
64
  version: 0.1.3
47
- type: :runtime
65
+ name: pidly
66
+ version_requirements: *id003
48
67
  prerelease: false
49
- version_requirements: *70269861067960
50
- - !ruby/object:Gem::Dependency
51
- name: rake
52
- requirement: &70269861067240 !ruby/object:Gem::Requirement
53
- none: false
54
- requirements:
55
- - - ! '>='
56
- - !ruby/object:Gem::Version
57
- version: '0'
68
+ - !ruby/object:Gem::Dependency
58
69
  type: :development
70
+ requirement: &id004 !ruby/object:Gem::Requirement
71
+ none: false
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ hash: 3
76
+ segments:
77
+ - 0
78
+ version: "0"
79
+ name: rake
80
+ version_requirements: *id004
59
81
  prerelease: false
60
- version_requirements: *70269861067240
61
82
  description: Tools for displaying information from and reporting to Instrumental (instrumentalapp.com)
62
- email:
83
+ email:
63
84
  - support@instrumentalapp.com
64
- executables:
85
+ executables:
65
86
  - gitstrumental
66
87
  - instrument_server
67
88
  - instrumental
68
89
  extensions: []
90
+
69
91
  extra_rdoc_files: []
70
- files:
92
+
93
+ files:
71
94
  - .gitignore
72
95
  - Gemfile
73
96
  - README.md
@@ -79,32 +102,36 @@ files:
79
102
  - lib/instrumental_tools/version.rb
80
103
  homepage: http://github.com/fastestforward/instrumental_tools
81
104
  licenses: []
105
+
82
106
  post_install_message:
83
107
  rdoc_options: []
84
- require_paths:
108
+
109
+ require_paths:
85
110
  - lib
86
- required_ruby_version: !ruby/object:Gem::Requirement
111
+ required_ruby_version: !ruby/object:Gem::Requirement
87
112
  none: false
88
- requirements:
89
- - - ! '>='
90
- - !ruby/object:Gem::Version
91
- version: '0'
92
- segments:
113
+ requirements:
114
+ - - ">="
115
+ - !ruby/object:Gem::Version
116
+ hash: 3
117
+ segments:
93
118
  - 0
94
- hash: -834890611261305550
95
- required_rubygems_version: !ruby/object:Gem::Requirement
119
+ version: "0"
120
+ required_rubygems_version: !ruby/object:Gem::Requirement
96
121
  none: false
97
- requirements:
98
- - - ! '>='
99
- - !ruby/object:Gem::Version
100
- version: '0'
101
- segments:
122
+ requirements:
123
+ - - ">="
124
+ - !ruby/object:Gem::Version
125
+ hash: 3
126
+ segments:
102
127
  - 0
103
- hash: -834890611261305550
128
+ version: "0"
104
129
  requirements: []
130
+
105
131
  rubyforge_project:
106
132
  rubygems_version: 1.8.10
107
133
  signing_key:
108
134
  specification_version: 3
109
135
  summary: Command line tools for Instrumental
110
136
  test_files: []
137
+