2015-11-19 05:45:05 +00:00
|
|
|
package rabbithole
|
|
|
|
|
|
|
|
import (
|
|
|
|
"encoding/json"
|
|
|
|
"net/http"
|
|
|
|
)
|
|
|
|
|
|
|
|
//
|
|
|
|
// GET /api/bindings
|
|
|
|
//
|
|
|
|
|
|
|
|
// Example response:
|
|
|
|
//
|
|
|
|
// [
|
|
|
|
// {
|
|
|
|
// "source": "",
|
|
|
|
// "vhost": "\/",
|
|
|
|
// "destination": "amq.gen-Dzw36tPTm_VsmILY9oTG9w",
|
|
|
|
// "destination_type": "queue",
|
|
|
|
// "routing_key": "amq.gen-Dzw36tPTm_VsmILY9oTG9w",
|
|
|
|
// "arguments": {
|
|
|
|
//
|
|
|
|
// },
|
|
|
|
// "properties_key": "amq.gen-Dzw36tPTm_VsmILY9oTG9w"
|
|
|
|
// }
|
|
|
|
// ]
|
|
|
|
|
|
|
|
type BindingInfo struct {
|
|
|
|
// Binding source (exchange name)
|
|
|
|
Source string `json:"source"`
|
|
|
|
Vhost string `json:"vhost"`
|
|
|
|
// Binding destination (queue or exchange name)
|
|
|
|
Destination string `json:"destination"`
|
|
|
|
// Destination type, either "queue" or "exchange"
|
|
|
|
DestinationType string `json:"destination_type"`
|
|
|
|
RoutingKey string `json:"routing_key"`
|
|
|
|
Arguments map[string]interface{} `json:"arguments"`
|
|
|
|
PropertiesKey string `json:"properties_key"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// Returns all bindings
|
|
|
|
func (c *Client) ListBindings() (rec []BindingInfo, err error) {
|
|
|
|
req, err := newGETRequest(c, "bindings/")
|
|
|
|
if err != nil {
|
|
|
|
return []BindingInfo{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if err = executeAndParseRequest(c, req, &rec); err != nil {
|
|
|
|
return []BindingInfo{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return rec, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// GET /api/bindings/{vhost}
|
|
|
|
//
|
|
|
|
|
|
|
|
// Returns all bindings in a virtual host.
|
|
|
|
func (c *Client) ListBindingsIn(vhost string) (rec []BindingInfo, err error) {
|
2017-03-31 00:03:13 +00:00
|
|
|
req, err := newGETRequest(c, "bindings/"+PathEscape(vhost))
|
2015-11-19 05:45:05 +00:00
|
|
|
if err != nil {
|
|
|
|
return []BindingInfo{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if err = executeAndParseRequest(c, req, &rec); err != nil {
|
|
|
|
return []BindingInfo{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return rec, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// GET /api/queues/{vhost}/{queue}/bindings
|
|
|
|
//
|
|
|
|
|
|
|
|
// Example response:
|
|
|
|
// [
|
|
|
|
// {"source":"",
|
|
|
|
// "vhost":"/",
|
|
|
|
// "destination":"amq.gen-H0tnavWatL7g7uU2q5cAPA",
|
|
|
|
// "destination_type":"queue",
|
|
|
|
// "routing_key":"amq.gen-H0tnavWatL7g7uU2q5cAPA",
|
|
|
|
// "arguments":{},
|
|
|
|
// "properties_key":"amq.gen-H0tnavWatL7g7uU2q5cAPA"},
|
|
|
|
// {"source":"temp",
|
|
|
|
// "vhost":"/",
|
|
|
|
// "destination":"amq.gen-H0tnavWatL7g7uU2q5cAPA",
|
|
|
|
// "destination_type":"queue",
|
|
|
|
// "routing_key":"",
|
|
|
|
// "arguments":{},
|
|
|
|
// "properties_key":"~"}
|
|
|
|
// ]
|
|
|
|
|
|
|
|
// Returns all bindings of individual queue.
|
|
|
|
func (c *Client) ListQueueBindings(vhost, queue string) (rec []BindingInfo, err error) {
|
2017-03-31 00:03:13 +00:00
|
|
|
req, err := newGETRequest(c, "queues/"+PathEscape(vhost)+"/"+PathEscape(queue)+"/bindings")
|
2015-11-19 05:45:05 +00:00
|
|
|
if err != nil {
|
|
|
|
return []BindingInfo{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
if err = executeAndParseRequest(c, req, &rec); err != nil {
|
|
|
|
return []BindingInfo{}, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return rec, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// POST /api/bindings/{vhost}/e/{source}/{destination_type}/{destination}
|
|
|
|
//
|
|
|
|
|
|
|
|
// DeclareBinding updates information about a binding between a source and a target
|
|
|
|
func (c *Client) DeclareBinding(vhost string, info BindingInfo) (res *http.Response, err error) {
|
|
|
|
info.Vhost = vhost
|
|
|
|
|
|
|
|
if info.Arguments == nil {
|
|
|
|
info.Arguments = make(map[string]interface{})
|
|
|
|
}
|
|
|
|
body, err := json.Marshal(info)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
2017-03-31 00:03:13 +00:00
|
|
|
req, err := newRequestWithBody(c, "POST", "bindings/"+PathEscape(vhost)+
|
|
|
|
"/e/"+PathEscape(info.Source)+"/"+PathEscape(string(info.DestinationType[0]))+
|
|
|
|
"/"+PathEscape(info.Destination), body)
|
2015-11-19 05:45:05 +00:00
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
res, err = executeRequest(c, req)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return res, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// DELETE /api/bindings/{vhost}/e/{source}/{destination_type}/{destination}/{props}
|
|
|
|
//
|
|
|
|
|
|
|
|
// DeleteBinding delets an individual binding
|
|
|
|
func (c *Client) DeleteBinding(vhost string, info BindingInfo) (res *http.Response, err error) {
|
2017-03-31 00:03:13 +00:00
|
|
|
req, err := newRequestWithBody(c, "DELETE", "bindings/"+PathEscape(vhost)+
|
|
|
|
"/e/"+PathEscape(info.Source)+"/"+PathEscape(string(info.DestinationType[0]))+
|
|
|
|
"/"+PathEscape(info.Destination)+"/"+PathEscape(info.PropertiesKey), nil)
|
2015-11-19 05:45:05 +00:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
res, err = executeRequest(c, req)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
|
|
|
|
return res, nil
|
|
|
|
}
|