gpeng-throttler 0.0.3 → 0.1.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.
- data/VERSION +1 -1
- data/bin/throttler +7 -4
- data/lib/throttler.rb +22 -2
- data/spec/throttler_spec.rb +42 -2
- data/throttler-0.0.3.gem +0 -0
- data/throttler.gemspec +2 -1
- metadata +2 -1
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0
|
1
|
+
0.1.0
|
data/bin/throttler
CHANGED
@@ -12,14 +12,17 @@ require 'throttler'
|
|
12
12
|
|
13
13
|
def help_text(exit_code = 0)
|
14
14
|
#TODO add help text
|
15
|
-
"Need to add help text"
|
15
|
+
puts "Need to add help text"
|
16
16
|
end
|
17
17
|
|
18
|
-
if ARGV.size.zero? || ['-h', '--help', 'help']
|
18
|
+
if ARGV.size.zero? || ['-h', '--help', 'help'].include?(ARGV.first)
|
19
19
|
help_text
|
20
20
|
else
|
21
21
|
case ARGV[0]
|
22
|
-
when '
|
23
|
-
|
22
|
+
when 'throttle'
|
23
|
+
ARGV.shift
|
24
|
+
Throttler.throttle(*ARGV)
|
25
|
+
when 'restore'
|
26
|
+
Throttler.restore
|
24
27
|
end
|
25
28
|
end
|
data/lib/throttler.rb
CHANGED
@@ -2,8 +2,28 @@ $: << File.dirname(__FILE__)
|
|
2
2
|
|
3
3
|
class Throttler
|
4
4
|
class << self
|
5
|
-
def
|
6
|
-
|
5
|
+
def throttle(kb_speed)
|
6
|
+
#TODO check the argument is a positive number
|
7
|
+
#TODO check that there are no exisiting ipfw rules that would be deleted by the restore command
|
8
|
+
#TODO delete pipe 1 in case this is called more than once without restoring
|
9
|
+
|
10
|
+
exec_command "sudo ipfw add 1 pipe 1 ip from any to any out src-port 80"
|
11
|
+
exec_command "sudo ipfw add 2 pipe 1 ip from any to any in src-port 80"
|
12
|
+
exec_command "sudo ipfw pipe 1 config bw #{kb_speed}Kbit/s"
|
13
|
+
exec_command "sudo ipfw pipe 2 config bw #{kb_speed}Kbit/s"
|
14
|
+
puts "Connection speed set to #{kb_speed}Kbit/s on port 80"
|
15
|
+
end
|
16
|
+
|
17
|
+
def restore
|
18
|
+
#TODO add error message if this is called when no throttling is in place
|
19
|
+
exec_command "sudo ipfw delete 1"
|
20
|
+
exec_command "sudo ipfw delete 2"
|
21
|
+
puts "Connection speed restored"
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
def exec_command(command)
|
26
|
+
`#{command}`
|
7
27
|
end
|
8
28
|
end
|
9
29
|
end
|
data/spec/throttler_spec.rb
CHANGED
@@ -1,7 +1,47 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
2
|
|
3
3
|
describe "Throttler" do
|
4
|
-
|
5
|
-
|
4
|
+
before(:each) do
|
5
|
+
Throttler.stub!(:exec_command)
|
6
|
+
Throttler.stub!(:puts)
|
6
7
|
end
|
8
|
+
|
9
|
+
describe "throttle" do
|
10
|
+
|
11
|
+
it "should add the pipes" do
|
12
|
+
Throttler.should_receive(:exec_command).with("sudo ipfw add 1 pipe 1 ip from any to any out src-port 80")
|
13
|
+
Throttler.should_receive(:exec_command).with("sudo ipfw add 2 pipe 1 ip from any to any in src-port 80")
|
14
|
+
Throttler.throttle 10
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should set the ipfw speed to 10Kbit/s" do
|
18
|
+
Throttler.should_receive(:exec_command).with("sudo ipfw pipe 1 config bw 10Kbit/s")
|
19
|
+
Throttler.should_receive(:exec_command).with("sudo ipfw pipe 2 config bw 10Kbit/s")
|
20
|
+
Throttler.throttle 10
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
it "should return the message 'Connection speed set to *Kbit/s on port 80'" do
|
25
|
+
Throttler.should_receive(:puts).with("Connection speed set to 10Kbit/s on port 80")
|
26
|
+
Throttler.throttle 10
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "restore" do
|
31
|
+
it "should delete the ipfw with id 1" do
|
32
|
+
Throttler.should_receive(:exec_command).with("sudo ipfw delete 1")
|
33
|
+
Throttler.restore
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should delete the ipfw with id 2" do
|
37
|
+
Throttler.should_receive(:exec_command).with("sudo ipfw delete 2")
|
38
|
+
Throttler.restore
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should return the message 'Connection speed restored" do
|
42
|
+
Throttler.should_receive(:puts).with("Connection speed restored")
|
43
|
+
Throttler.restore
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
7
47
|
end
|
data/throttler-0.0.3.gem
ADDED
Binary file
|
data/throttler.gemspec
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{throttler}
|
8
|
-
s.version = "0.0
|
8
|
+
s.version = "0.1.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Graham Pengelly"]
|
@@ -29,6 +29,7 @@ Gem::Specification.new do |s|
|
|
29
29
|
"lib/throttler.rb",
|
30
30
|
"spec/spec_helper.rb",
|
31
31
|
"spec/throttler_spec.rb",
|
32
|
+
"throttler-0.0.3.gem",
|
32
33
|
"throttler.gemspec"
|
33
34
|
]
|
34
35
|
s.homepage = %q{http://github.com/gpeng/throttler}
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gpeng-throttler
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Graham Pengelly
|
@@ -42,6 +42,7 @@ files:
|
|
42
42
|
- lib/throttler.rb
|
43
43
|
- spec/spec_helper.rb
|
44
44
|
- spec/throttler_spec.rb
|
45
|
+
- throttler-0.0.3.gem
|
45
46
|
- throttler.gemspec
|
46
47
|
has_rdoc: false
|
47
48
|
homepage: http://github.com/gpeng/throttler
|