runnable 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. data/VERSION +1 -1
  2. data/lib/runnable.rb +50 -16
  3. data/runnable.gemspec +7 -7
  4. metadata +18 -16
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.2
1
+ 0.2.3
data/lib/runnable.rb CHANGED
@@ -40,7 +40,13 @@ class Runnable
40
40
  attr_reader :group
41
41
  # Directory where process was called from.
42
42
  attr_reader :pwd
43
-
43
+
44
+ # Input file
45
+ attr_accessor :input
46
+
47
+ # Set the output file
48
+ attr_accessor :output
49
+
44
50
  # Metaprogramming part of the class
45
51
 
46
52
  # Define the parameter style to be used.
@@ -96,10 +102,16 @@ class Runnable
96
102
  end
97
103
 
98
104
  # Store input options
99
- @input = Array.new
105
+ @input = String.new
100
106
 
101
107
  # Store output options
102
- @output = Array.new
108
+ @output = String.new
109
+
110
+ # Standar Outputs
111
+ @std_output = {
112
+ :out => "",
113
+ :err => ""
114
+ }
103
115
 
104
116
  # @todo: checks that command is in the PATH
105
117
  # ...
@@ -133,10 +145,10 @@ class Runnable
133
145
  # Set up the command line
134
146
  command = []
135
147
  command << @command
136
- command << @input.join( " " )
148
+ command << @input
137
149
  command << @options
138
150
  command << @command_line_interface.parse
139
- command << @output.join( " " )
151
+ command << @output
140
152
  command = command.join( " " )
141
153
 
142
154
  @pid = Process.spawn( command, { :out => out_wr, :err => err_wr } )
@@ -230,10 +242,24 @@ class Runnable
230
242
  @run_thread.join if @run_thread.alive?
231
243
  end
232
244
 
245
+ # Check if prcess is running on the system.
246
+ # @return [Bool] True if process is running, false if it is not.
233
247
  def running?
234
248
  Dir.exists?( "/proc/#{@pid}")
235
249
  end
236
250
 
251
+ # Standar output of command
252
+ # @return [String] Standar output
253
+ def std_out
254
+ @std_output[:out]
255
+ end
256
+
257
+ # Standar error output of the command
258
+ # @return [String] Standar error output
259
+ def std_err
260
+ @std_output[:err]
261
+ end
262
+
237
263
  # Calculate the estimated memory usage in Kb.
238
264
  # @return [Number] Estimated mem usage in Kb.
239
265
  def mem
@@ -275,18 +301,22 @@ class Runnable
275
301
 
276
302
  end
277
303
 
278
- # Set the input files.
279
- # @param [String] param Input to be parsed as command options.
280
- # @return [nil]
281
- def input( param )
282
- @input << param
283
- end
304
+ # Estimated bandwidth in kb/s.
305
+ # @param [String] iface Interface to be scaned.
306
+ # @param [Number] sample_time Time passed between samples in seconds.
307
+ # The longest lapse the more accurate stimation.
308
+ # @return [Number] The estimated bandwidth used.
309
+ def bandwidth( iface, sample_lapse = 0.1 )
310
+ file = "/proc/#{@pid}/net/dev"
311
+ File.open( file ).read =~ /#{iface}:\s+(\d+)\s+/
312
+ init = $1.to_i
313
+
314
+ sleep sample_lapse
284
315
 
285
- # Set the output files.
286
- # @param [String] param Output to be parsed as command options.
287
- # @return [nil]
288
- def output( param )
289
- @output << param
316
+ File.open( file ).read =~ /#{iface}:\s+(\d+)\s+/
317
+ finish = $1.to_i
318
+
319
+ (finish - init)*(1/sample_lapse)/1024
290
320
  end
291
321
 
292
322
  # Convert undefined methods (ruby-like syntax) into parameters
@@ -407,7 +437,11 @@ class Runnable
407
437
  @output_threads << Thread.new do
408
438
  pipes[0].close
409
439
 
440
+ @std_output[output_name] = ""
441
+
410
442
  pipes[1].each_line do |line|
443
+ @std_output[output_name] << line
444
+
411
445
  File.open("#{@log_path}#{@command}_#{@pid}.log", "a") do |log_file|
412
446
  log_file.puts( "[#{Time.new.inspect} || [STD#{output_name.to_s.upcase} || [#{@pid}]] #{line}" )
413
447
  end
data/runnable.gemspec CHANGED
@@ -5,13 +5,13 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{runnable}
8
- s.version = "0.2.2"
8
+ s.version = "0.2.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = [%q{Rafael García}, %q{Luis Ciudad}, %q{Pedro Navajas}, %q{Javier Aranda}]
12
- s.date = %q{2011-08-11}
11
+ s.authors = ["Rafael García", "Luis Ciudad", "Pedro Navajas", "Javier Aranda"]
12
+ s.date = %q{2011-08-26}
13
13
  s.description = %q{Convert a executable command in a Ruby-like class you are able to start, define params and send signals (like kill, or stop)}
14
- s.email = [%q{rgarcia@nosolosoftware.biz}, %q{lciudad@nosolosoftware.biz}, %q{pnavajas@nosolosoftware.biz}, %q{jaranda@nosolosoftware.biz}]
14
+ s.email = ["rgarcia@nosolosoftware.biz", "lciudad@nosolosoftware.biz", "pnavajas@nosolosoftware.biz", "jaranda@nosolosoftware.biz"]
15
15
  s.extra_rdoc_files = [
16
16
  "README.markdown"
17
17
  ]
@@ -26,9 +26,9 @@ Gem::Specification.new do |s|
26
26
  "runnable.gemspec"
27
27
  ]
28
28
  s.homepage = %q{http://github.com/nosolosoftware/runnable}
29
- s.licenses = [%q{GPL-3}]
30
- s.require_paths = [%q{lib}]
31
- s.rubygems_version = %q{1.8.6}
29
+ s.licenses = ["GPL-3"]
30
+ s.require_paths = ["lib"]
31
+ s.rubygems_version = %q{1.6.2}
32
32
  s.summary = %q{A Ruby gem for execute and control system commands}
33
33
 
34
34
  if s.respond_to? :specification_version then
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: runnable
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.2.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,12 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2011-08-11 00:00:00.000000000Z
15
+ date: 2011-08-26 00:00:00.000000000 +02:00
16
+ default_executable:
16
17
  dependencies:
17
18
  - !ruby/object:Gem::Dependency
18
19
  name: rake
19
- requirement: &75050040 !ruby/object:Gem::Requirement
20
+ requirement: &24798400 !ruby/object:Gem::Requirement
20
21
  none: false
21
22
  requirements:
22
23
  - - ! '>='
@@ -24,10 +25,10 @@ dependencies:
24
25
  version: 0.8.7
25
26
  type: :development
26
27
  prerelease: false
27
- version_requirements: *75050040
28
+ version_requirements: *24798400
28
29
  - !ruby/object:Gem::Dependency
29
30
  name: yard
30
- requirement: &75049640 !ruby/object:Gem::Requirement
31
+ requirement: &24797260 !ruby/object:Gem::Requirement
31
32
  none: false
32
33
  requirements:
33
34
  - - ! '>='
@@ -35,10 +36,10 @@ dependencies:
35
36
  version: 0.6.8
36
37
  type: :development
37
38
  prerelease: false
38
- version_requirements: *75049640
39
+ version_requirements: *24797260
39
40
  - !ruby/object:Gem::Dependency
40
41
  name: rspec
41
- requirement: &75049120 !ruby/object:Gem::Requirement
42
+ requirement: &24796600 !ruby/object:Gem::Requirement
42
43
  none: false
43
44
  requirements:
44
45
  - - ! '>='
@@ -46,10 +47,10 @@ dependencies:
46
47
  version: 2.5.0
47
48
  type: :development
48
49
  prerelease: false
49
- version_requirements: *75049120
50
+ version_requirements: *24796600
50
51
  - !ruby/object:Gem::Dependency
51
52
  name: cucumber
52
- requirement: &75048540 !ruby/object:Gem::Requirement
53
+ requirement: &24795620 !ruby/object:Gem::Requirement
53
54
  none: false
54
55
  requirements:
55
56
  - - ! '>='
@@ -57,10 +58,10 @@ dependencies:
57
58
  version: 0.10.2
58
59
  type: :development
59
60
  prerelease: false
60
- version_requirements: *75048540
61
+ version_requirements: *24795620
61
62
  - !ruby/object:Gem::Dependency
62
63
  name: jeweler
63
- requirement: &75048080 !ruby/object:Gem::Requirement
64
+ requirement: &24794100 !ruby/object:Gem::Requirement
64
65
  none: false
65
66
  requirements:
66
67
  - - ! '>='
@@ -68,10 +69,10 @@ dependencies:
68
69
  version: 1.6.0
69
70
  type: :development
70
71
  prerelease: false
71
- version_requirements: *75048080
72
+ version_requirements: *24794100
72
73
  - !ruby/object:Gem::Dependency
73
74
  name: bluecloth
74
- requirement: &75047650 !ruby/object:Gem::Requirement
75
+ requirement: &24792600 !ruby/object:Gem::Requirement
75
76
  none: false
76
77
  requirements:
77
78
  - - ! '>='
@@ -79,7 +80,7 @@ dependencies:
79
80
  version: 2.1.0
80
81
  type: :development
81
82
  prerelease: false
82
- version_requirements: *75047650
83
+ version_requirements: *24792600
83
84
  description: Convert a executable command in a Ruby-like class you are able to start,
84
85
  define params and send signals (like kill, or stop)
85
86
  email:
@@ -100,6 +101,7 @@ files:
100
101
  - lib/runnable/extended.rb
101
102
  - lib/runnable/gnu.rb
102
103
  - runnable.gemspec
104
+ has_rdoc: true
103
105
  homepage: http://github.com/nosolosoftware/runnable
104
106
  licenses:
105
107
  - GPL-3
@@ -115,7 +117,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
117
  version: '0'
116
118
  segments:
117
119
  - 0
118
- hash: 86695023
120
+ hash: 1440204115093721090
119
121
  required_rubygems_version: !ruby/object:Gem::Requirement
120
122
  none: false
121
123
  requirements:
@@ -124,7 +126,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
126
  version: '0'
125
127
  requirements: []
126
128
  rubyforge_project:
127
- rubygems_version: 1.8.6
129
+ rubygems_version: 1.6.2
128
130
  signing_key:
129
131
  specification_version: 3
130
132
  summary: A Ruby gem for execute and control system commands