Report abuse

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
class Rabbit < Nanite::Actor
  expose :add_user,:delete_user, :change_password, :list_users,
         :add_vhost, :delete_vhost, :list_vhosts,
         :map_user_vhost, :unmap_user_vhost, :list_user_vhosts, :list_vhost_users,
         :list_queues, :list_exchanges, :list_exchanges, :list_connections

  def list_queues(vhost)
    parse_list(rabbitmqctl :list_queues, vhost.empty? ? "" : "-p #{vhost}").first
  end

  def list_exchanges(vhost)
    parse_list(rabbitmqctl :list_exchanges, vhost.empty? ? "" : "-p #{vhost}").first
  end

  def list_bindings(vhost)
    parse_list(rabbitmqctl :list_bindings, vhost.empty? ? "" : "-p #{vhost}").first
  end

  def list_connections(payload)
    parse_list(rabbitmqctl :list_connections).first
  end

  def list_users(payload)
    parse_list(rabbitmqctl :list_users).first
  end

  def list_vhosts(payload)
    parse_list(rabbitmqctl :list_vhosts).first
  end

  def list_vhost_users(vhost)
    parse_list(rabbitmqctl :list_vhost_users, vhost).first
  end

  def list_user_vhosts(user)
    parse_list(rabbitmqctl :list_user_vhosts, user).first
  end

  def map_user_vhost(payload)
    if String === payload
      payload = JSON.parse(payload)
    end
    res = parse_list(rabbitmqctl(:map_user_vhost, payload['user'], payload['vhost']))
    if res[1]
      "problem mapping user to vhost: #{payload['user']}:#{payload['vhost']} #{res[1]}"
    else
      "successfully mapped user to vhost: #{payload['user']}:#{payload['vhost']}"
    end
  end

  def unmap_user_vhost(payload)
    if String === payload
      payload = JSON.parse(payload)
    end
    res = parse_list(rabbitmqctl(:unmap_user_vhost, payload['user'], payload['vhost']))
    if res[1]
      "problem unmapping user from vhost: #{payload['user']}:#{payload['vhost']} #{res[1]}"
    else
      "successfully unmapped user from vhost: #{payload['user']}:#{payload['vhost']}"
    end
  end

  def add_vhost(path)
    res = parse_list(rabbitmqctl(:add_vhost, path))
    if res[1]
      "problem adding vhost: #{path} #{res[1]}"
    else
      "successfully added vhost: #{path}"
    end
  end

  def add_user(payload)
    if String === payload
      payload = JSON.parse(payload)
    end
    res = parse_list(rabbitmqctl(:add_user, payload['user'], payload['pass']))
    if res[1]
      "problem adding user: #{payload['user']} #{res[1]}"
    else
      "successfully added user: #{payload['user']}"
    end
  end

  def change_password(payload)
    if String === payload
      payload = JSON.parse(payload)
    end
    res = parse_list(rabbitmqctl(:change_password, payload['user'], payload['pass']))
    if res[1]
      "problem with change_password user: #{payload['user']} #{res[1]}"
    else
      "successfully changed password user: #{payload['user']}"
    end
  end

  def delete_user(payload)
    if String === payload
      payload = JSON.parse(payload)
    end
    res = parse_list(rabbitmqctl(:delete_user, payload['user']))
    if res[1]
      "problem deleting user: #{payload['user']} #{res[1]}"
    else
      "successfully deleted user: #{payload['user']}"
    end
  end

  def delete_vhost(path)
    res = parse_list(rabbitmqctl(:delete_vhost, path))
    if res[1]
      "problem deleting vhost: #{path} #{res[1]}"
    else
      "successfully deleted vhost: #{path}"
    end
  end

  def rabbitmqctl(*args)
    `rabbitmqctl #{args.join(' ')}`
  end

  def parse_list(out)
    res = []
    error = nil
    out.each do |line|
      res << line.chomp unless line =~ /\.\.\./
      error = $1 if line =~ /Error: (.*)/
    end
    [res, error]
  end
end

Nanite.register Rabbit.new