instrumental_tools 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+