bugs_bunny 0.1.0 → 0.1.1

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.
@@ -7,13 +7,16 @@ RabbitMQ Playground
7
7
 
8
8
  Run 'bbunny config' to create a rabbitmq.yml conf file, edit it, play.
9
9
 
10
-
11
10
  === bbunny queues
12
11
 
13
12
  Lists all queues in the vhost.
14
13
 
15
- works (volatile): 0 messages
16
- todo (volatile): 0 messages
14
+ +------+--------------+-------+-------+-------+--------+------+--------+
15
+ | Msgs | Name | Users | Ready | Noack | Commit | Acts | Memory |
16
+ +------+--------- ----+-------+-------+-------+--------+------+--------+
17
+ | 5 | (D) works | 1 | 5 | 0 | 0 | 0 | 4768 |
18
+ | 20 | (V) mapper | 10 | 0 | 20 | 0 | 0 | 14544 |
19
+ ...
17
20
 
18
21
 
19
22
  === bbunny queues new works
@@ -40,19 +43,34 @@ Live inspection of the queue.
40
43
 
41
44
  -------
42
45
  QUEUE 1 (application/octet-stream): Mode 1
43
- Consumer: todo-908051891800 Exchange:
46
+ Consumer: todo-908051891800
44
47
 
45
48
  Body:
46
49
  Improve Bugs Bunny
47
50
 
48
51
  -------
49
52
  QUEUE 2 (application/octet-stream): Mode 1
50
- Consumer: todo-908051891800 Exchange:
53
+ Consumer: todo-908051891800
51
54
 
52
55
  Body:
53
56
  {:ruby => "object"}
54
57
 
55
58
 
59
+ === bbunny exchanges
60
+
61
+ Exchanges
62
+ +---------------------------------------+---------+-----------+----------+
63
+ | Name | Kind | Durable | Delete |
64
+ +---------------------------------------+---------+-----------+----------+
65
+ | amq.direct | Direct | X | |
66
+ | amq.fanout | Fanout | X | |
67
+ | amq.headers | Headers | X | |
68
+ | amq.match | Headers | X | |
69
+ | amq.topic | Topic | X | |
70
+ | some.fanout | Fanout | | X |
71
+ ...
72
+
73
+
56
74
  === Check out -h for all commands
57
75
 
58
76
  Purge, delete, full CRUD ;)
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{bugs_bunny}
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Marcos Piccinini"]
@@ -29,12 +29,14 @@ Gem::Specification.new do |s|
29
29
  "bugs_bunny.gemspec",
30
30
  "cucumber.yml",
31
31
  "features/bugs_bunny.feature",
32
+ "features/exchanges.feature",
32
33
  "features/queues.feature",
33
34
  "features/step_definitions/bugs_bunny_steps.rb",
34
35
  "features/step_definitions/queue_steps.rb",
35
36
  "features/support/env.rb",
36
37
  "lib/bugs_bunny.rb",
37
38
  "lib/bugs_bunny/cli.rb",
39
+ "lib/bugs_bunny/exchange.rb",
38
40
  "lib/bugs_bunny/helper.rb",
39
41
  "lib/bugs_bunny/queue.rb",
40
42
  "lib/bugs_bunny/rabbit.rb",
@@ -0,0 +1,15 @@
1
+ Feature: Managing exchanges
2
+ In order to manage exchanges
3
+ A user should have a nice command to do it
4
+
5
+ Scenario: List exchanges
6
+ Given I run "exchanges"
7
+ Then I should see "Exchanges"
8
+ And I should see "Name"
9
+ And I should see "Kind"
10
+ And I should see "Durable"
11
+ And I should see "Delete"
12
+ And I should see "amq.fanout"
13
+ And I should see "Fanout"
14
+ And I should see "Direct"
15
+ And I should see "Topic"
@@ -21,7 +21,7 @@ Feature: Managing queues
21
21
  Then I should see "Queues"
22
22
  And I should see "Name"
23
23
  And I should see "todo"
24
- And I should see "(V)"
24
+ And I should see "(D)"
25
25
  And I should see "crucification"
26
26
  And I should see "Msgs"
27
27
  And I should see "3"
@@ -16,3 +16,4 @@ require "bugs_bunny/helper"
16
16
  require "bugs_bunny/cli"
17
17
  require "bugs_bunny/rabbit"
18
18
  require "bugs_bunny/queue"
19
+ require "bugs_bunny/exchange"
@@ -19,9 +19,7 @@ module BugsBunny
19
19
  puts "Can`t do that."; exit
20
20
  end
21
21
  log "Connecting to rabbitmq #{Opt[:rabbit][:vhost]}"
22
- AMQP.start(Opt[:rabbit]) do
23
- rb.start!(argv)
24
- end
22
+ AMQP.start(Opt[:rabbit]) { rb.start!(argv) }
25
23
  end
26
24
  end
27
25
 
@@ -39,6 +37,14 @@ module BugsBunny
39
37
  end
40
38
  end
41
39
 
40
+ def seed
41
+ parse_config
42
+ puts "Creating user and vhost"
43
+ puts `rabbitmqctl add_user #{Opt[:rabbit][:user]} #{Opt[:rabbit][:pass]}`
44
+ puts `rabbitmqctl add_vhost #{Opt[:rabbit][:vhost]}`
45
+ puts `rabbitmqctl set_permissions -p #{Opt[:rabbit][:vhost]} #{Opt[:rabbit][:user]} ".*" ".*" ".*"`
46
+ end
47
+
42
48
  private
43
49
 
44
50
  def log(*args)
@@ -0,0 +1,29 @@
1
+ module BugsBunny
2
+ class Exchange
3
+ attr_reader :name, :durable, :delete
4
+
5
+ def self.parse(txt)
6
+ return nil if txt =~ /Listing|\.\.\./
7
+ new(txt)
8
+ end
9
+
10
+ def initialize(txt)
11
+ @name, @kind, @durable, @delete, @args = txt.split("\t")
12
+ end
13
+
14
+ def <=>(other)
15
+ @name <=> other.name
16
+ end
17
+
18
+ def kind
19
+ @kind.capitalize
20
+ end
21
+
22
+ def x(x)
23
+ eval(x) ? " X" : ""
24
+ end
25
+
26
+ def durable_x; x(@durable); end
27
+ def delete_x; x(@delete); end
28
+ end
29
+ end
@@ -49,7 +49,7 @@ module BugsBunny
49
49
  end
50
50
 
51
51
  puts border
52
- puts "#{items.length} rows in set\n"
52
+ puts "#{items.length} items\n"
53
53
  end
54
54
  end
55
55
  end
@@ -1,12 +1,12 @@
1
1
  module BugsBunny
2
2
  class Queue
3
3
  include Helper
4
- attr_reader :name, :msgs, :users, :ready, :noack, :commit, :acts, :memory
4
+ attr_reader :name, :msgs, :users, :ready, :noack, :commit, :acts
5
5
  @queues = []
6
6
 
7
7
  def self.all
8
8
  # possible with amqp?
9
- `rabbitmqctl list_queues -p #{Opt[:rabbit][:vhost]} name durable auto_delete arguments node messages_ready messages_unacknowledged messages_uncommitted messages consumers transactions memory`.split("\n").each do |l|
9
+ `rabbitmqctl list_queues -p #{Opt[:rabbit][:vhost]} name durable auto_delete arguments messages_ready messages_unacknowledged messages_uncommitted messages consumers transactions memory`.split("\n").each do |l|
10
10
  next if l =~ /Listing|\.\./
11
11
  @queues << BugsBunny::Queue.new(*l.split("\t"))
12
12
  end
@@ -14,13 +14,13 @@ module BugsBunny
14
14
  end
15
15
 
16
16
  def self.create(name)
17
- MQ.queue(name).status do |msg, users|
17
+ MQ.queue(name, :durable => true).status do |msg, users|
18
18
  puts "#{msg} messages, #{users} consumers."
19
19
  end
20
20
  end
21
21
 
22
22
  def initialize(*params)
23
- @name, d, a, args, @node, @ready, @noack, @commit, @msgs,
23
+ @name, d, a, args, @ready, @noack, @commit, @msgs,
24
24
  @users, @acts, @memory = *params
25
25
  @durable = eval(d) if d #ugly
26
26
  @auto_delete = eval(a) if a #more ugly
@@ -40,13 +40,20 @@ module BugsBunny
40
40
  EM.add_timer(1) { halt }
41
41
  end
42
42
 
43
+ def memory
44
+ @memory #"%2.f"
45
+ end
46
+
43
47
  def inspect
44
- puts ""
45
- @mq.bind(MQ.fanout(@name)).subscribe(:ack => true) do |h, body| #, :nowait => false
48
+ # xchange = MQ.fanout(@name)
49
+ #, :durable => false, :auto_delete => true)#, :internal => true)
50
+ #mq = MQ.queue(@name+"_bb", :exclusive => true)
51
+ @mq.subscribe(:ack => true) do |h, body| #, :nowait => false
46
52
  print_queue(h, body)
47
53
  end
48
54
  end
49
- alias :live :inspect
55
+ alias :live :inspect
56
+ alias :watch :inspect
50
57
 
51
58
  def add(txt)
52
59
  @mq.publish(txt)
@@ -24,13 +24,14 @@ module BugsBunny
24
24
  end
25
25
  qs = BugsBunny::Queue.all
26
26
  unless param
27
- print_table "Queues", qs.sort_by { |r| r.msgs }, :msgs, :name_kind,
28
- :users, :ready, :noack, :commit, :acts, :memory
27
+ print_table "Queues", qs.sort, :msgs, :name_kind,
28
+ :users, :ready, :noack, :commit, :acts, :memory
29
29
  else
30
30
  qs.each(&:"#{param}")
31
31
  end
32
32
  halt
33
33
  end
34
+ alias :qu :queues
34
35
 
35
36
  def queue(q, action="info", *params)
36
37
  rec = BugsBunny::Queue.new(q)
@@ -41,11 +42,28 @@ module BugsBunny
41
42
  halt
42
43
  end
43
44
  end
45
+ alias :q :queue
44
46
 
45
47
  def exchanges
46
- print_table "Queues", @mq.exchanges
48
+ arr = `rabbitmqctl list_exchanges -p #{Opt[:rabbit][:vhost]} name type durable auto_delete arguments`.split("\n").map do |e|
49
+ BugsBunny::Exchange.parse(e)
50
+ end.reject(&:nil?).sort
51
+
52
+ print_table "Exchanges", arr, :name, :kind, :durable_x, :delete_x
53
+ halt
47
54
  end
55
+ alias :ex :exchanges
48
56
 
57
+ def bindings
58
+ arr = `rabbitmqctl list_bindings -p #{Opt[:rabbit][:vhost]}`.split("\n")
59
+ arr.map { |l|l.gsub(/^\t/, "") }.sort.each do |l|
60
+ next if l =~ /Listing|\.\.\./
61
+ from, to, args = l.split("\t")
62
+ puts "#{from} <=> #{to}"
63
+ end
64
+ halt
65
+ end
66
+ alias :binds :bindings
49
67
 
50
68
  def halt(msg=nil)
51
69
  BugsBunny::Rabbit.halt(msg)
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 1
8
- - 0
9
- version: 0.1.0
8
+ - 1
9
+ version: 0.1.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - Marcos Piccinini
@@ -77,12 +77,14 @@ files:
77
77
  - bugs_bunny.gemspec
78
78
  - cucumber.yml
79
79
  - features/bugs_bunny.feature
80
+ - features/exchanges.feature
80
81
  - features/queues.feature
81
82
  - features/step_definitions/bugs_bunny_steps.rb
82
83
  - features/step_definitions/queue_steps.rb
83
84
  - features/support/env.rb
84
85
  - lib/bugs_bunny.rb
85
86
  - lib/bugs_bunny/cli.rb
87
+ - lib/bugs_bunny/exchange.rb
86
88
  - lib/bugs_bunny/helper.rb
87
89
  - lib/bugs_bunny/queue.rb
88
90
  - lib/bugs_bunny/rabbit.rb