forked from michaelklishin/rabbit-hole
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathshovels.go
139 lines (112 loc) · 3.53 KB
/
shovels.go
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
133
134
135
136
137
138
139
package rabbithole
import (
"encoding/json"
"net/http"
"net/url"
)
// ShovelInfo contains the configuration of a shovel
type ShovelInfo struct {
// Shovel name
Name string `json:"name"`
// Virtual host this shovel belongs to
Vhost string `json:"vhost"`
// Component shovels belong to
Component string `json:"component"`
// Details the configuration values of the shovel
Definition ShovelDefinition `json:"value"`
}
// ShovelDefinition contains the details of the shovel configuration
type ShovelDefinition struct {
SourceURI string `json:"src-uri"`
SourceExchange string `json:"src-exchange,omitempty"`
SourceExchangeKey string `json:"src-exchange-key,omitempty"`
SourceQueue string `json:"src-queue,omitempty"`
DestinationURI string `json:"dest-uri"`
DestinationExchange string `json:"dest-exchange,omitempty"`
DestinationExchangeKey string `json:"dest-exchange-key,omitempty"`
DestinationQueue string `json:"dest-queue,omitempty"`
PrefetchCount int `json:"prefetch-count,omitempty"`
ReconnectDelay int `json:"reconnect-delay,omitempty"`
AddForwardHeaders bool `json:"add-forward-headers"`
AckMode string `json:"ack-mode"`
DeleteAfter string `json:"delete-after"`
}
// ShovelDefinitionDTO provides a data transfer object
type ShovelDefinitionDTO struct {
Definition ShovelDefinition `json:"value"`
}
//
// GET /api/parameters/shovel
//
// ListShovels returns all shovels
func (c *Client) ListShovels() (rec []ShovelInfo, err error) {
req, err := newGETRequest(c, "parameters/shovel")
if err != nil {
return []ShovelInfo{}, err
}
if err = executeAndParseRequest(c, req, &rec); err != nil {
return []ShovelInfo{}, err
}
return rec, nil
}
//
// GET /api/parameters/shovel/{vhost}
//
// ListShovelsIn returns all shovels in a vhost
func (c *Client) ListShovelsIn(vhost string) (rec []ShovelInfo, err error) {
req, err := newGETRequest(c, "parameters/shovel/"+url.PathEscape(vhost))
if err != nil {
return []ShovelInfo{}, err
}
if err = executeAndParseRequest(c, req, &rec); err != nil {
return []ShovelInfo{}, err
}
return rec, nil
}
//
// GET /api/parameters/shovel/{vhost}/{name}
//
// GetShovel returns a shovel configuration
func (c *Client) GetShovel(vhost, shovel string) (rec *ShovelInfo, err error) {
req, err := newGETRequest(c, "parameters/shovel/"+url.PathEscape(vhost)+"/"+url.PathEscape(shovel))
if err != nil {
return nil, err
}
if err = executeAndParseRequest(c, req, &rec); err != nil {
return nil, err
}
return rec, nil
}
//
// PUT /api/parameters/shovel/{vhost}/{name}
//
// DeclareShovel creates a shovel
func (c *Client) DeclareShovel(vhost, shovel string, info ShovelDefinition) (res *http.Response, err error) {
shovelDTO := ShovelDefinitionDTO{Definition: info}
body, err := json.Marshal(shovelDTO)
if err != nil {
return nil, err
}
req, err := newRequestWithBody(c, "PUT", "parameters/shovel/"+url.PathEscape(vhost)+"/"+url.PathEscape(shovel), body)
if err != nil {
return nil, err
}
if res, err = executeRequest(c, req); err != nil {
return nil, err
}
return res, nil
}
//
// DELETE /api/parameters/shovel/{vhost}/{name}
//
// DeleteShovel a shovel
func (c *Client) DeleteShovel(vhost, shovel string) (res *http.Response, err error) {
req, err := newRequestWithBody(c, "DELETE", "parameters/shovel/"+url.PathEscape(vhost)+"/"+url.PathEscape(shovel), nil)
if err != nil {
return nil, err
}
if res, err = executeRequest(c, req); err != nil {
return nil, err
}
return res, nil
}