1
+ package sdk
2
+
3
+ /*
4
+ Copyright 2016 Alexander I.Grafov <[email protected] >
5
+ Copyright 2016-2022 The Grafana SDK authors
6
+
7
+ Licensed under the Apache License, Version 2.0 (the "License");
8
+ you may not use this file except in compliance with the License.
9
+ You may obtain a copy of the License at
10
+
11
+ http://www.apache.org/licenses/LICENSE-2.0
12
+
13
+ Unless required by applicable law or agreed to in writing, software
14
+ distributed under the License is distributed on an "AS IS" BASIS,
15
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
+ See the License for the specific language governing permissions and
17
+ limitations under the License.
18
+
19
+ ॐ तारे तुत्तारे तुरे स्व
20
+ */
21
+
22
+ import (
23
+ "bytes"
24
+ "context"
25
+ "encoding/json"
26
+ "fmt"
27
+ "net/url"
28
+ "strconv"
29
+ )
30
+
31
+ // SearchTeams search teams with optional parameters.
32
+ // Reflects GET /api/teams/search API call.
33
+ func (r * Client ) SearchTeams (ctx context.Context , params ... SearchTeamParams ) (PageTeams , error ) {
34
+ var (
35
+ raw []byte
36
+ pageTeams PageTeams
37
+ code int
38
+ err error
39
+ requestParams = make (url.Values )
40
+ )
41
+
42
+ for _ , p := range params {
43
+ p (requestParams )
44
+ }
45
+
46
+ if raw , code , err = r .get (ctx , "api/teams/search" , requestParams ); err != nil {
47
+ return pageTeams , err
48
+ }
49
+ if code != 200 {
50
+ return pageTeams , fmt .Errorf ("HTTP error %d: returns %s" , code , raw )
51
+ }
52
+ dec := json .NewDecoder (bytes .NewReader (raw ))
53
+ dec .UseNumber ()
54
+ if err := dec .Decode (& pageTeams ); err != nil {
55
+ return pageTeams , fmt .Errorf ("unmarshal teams: %s\n %s" , err , raw )
56
+ }
57
+ return pageTeams , err
58
+ }
59
+
60
+ func (r * Client ) GetTeamByName (ctx context.Context , name string ) (Team , error ) {
61
+ var (
62
+ team Team
63
+ err error
64
+ )
65
+ search , err := r .SearchTeams (ctx , WithTeam (name ))
66
+ if err != nil {
67
+ return team , err
68
+ }
69
+ if len (search .Teams ) == 0 {
70
+ return Team {}, TeamNotFound
71
+ }
72
+
73
+ return search .Teams [0 ], nil
74
+ }
75
+
76
+ // GetTeam gets an team by ID.
77
+ // Reflects GET /api/teams/:id API call.
78
+ func (r * Client ) GetTeam (ctx context.Context , id uint ) (Team , error ) {
79
+ var (
80
+ raw []byte
81
+ team Team
82
+ code int
83
+ err error
84
+ )
85
+ if raw , code , err = r .get (ctx , fmt .Sprintf ("api/teams/%d" , id ), nil ); err != nil {
86
+ return team , err
87
+ }
88
+ if code != 200 {
89
+ return team , fmt .Errorf ("HTTP error %d: returns %s" , code , raw )
90
+ }
91
+ dec := json .NewDecoder (bytes .NewReader (raw ))
92
+ dec .UseNumber ()
93
+ if err := dec .Decode (& team ); err != nil {
94
+ return team , fmt .Errorf ("unmarshal team: %s\n %s" , err , raw )
95
+ }
96
+ return team , err
97
+ }
98
+
99
+ // CreateTeam creates a new team.
100
+ // Reflects POST /api/teams API call.
101
+ func (r * Client ) CreateTeam (ctx context.Context , t Team ) (StatusMessage , error ) {
102
+ var (
103
+ raw []byte
104
+ resp StatusMessage
105
+ err error
106
+ )
107
+ if raw , err = json .Marshal (t ); err != nil {
108
+ return StatusMessage {}, err
109
+ }
110
+ if raw , _ , err = r .post (ctx , "api/teams" , nil , raw ); err != nil {
111
+ return StatusMessage {}, err
112
+ }
113
+ if err = json .Unmarshal (raw , & resp ); err != nil {
114
+ return StatusMessage {}, err
115
+ }
116
+ return resp , nil
117
+ }
118
+
119
+ // UpdateTeam updates a team.
120
+ // Reflects PUT /api/teams/:id API call.
121
+ func (r * Client ) UpdateTeam (ctx context.Context , id uint , t Team ) (StatusMessage , error ) {
122
+ var (
123
+ raw []byte
124
+ resp StatusMessage
125
+ err error
126
+ )
127
+ if raw , err = json .Marshal (t ); err != nil {
128
+ return StatusMessage {}, err
129
+ }
130
+ if raw , _ , err = r .put (ctx , fmt .Sprintf ("api/teams/%d" , id ), nil , raw ); err != nil {
131
+ return StatusMessage {}, err
132
+ }
133
+ if err = json .Unmarshal (raw , & resp ); err != nil {
134
+ return StatusMessage {}, err
135
+ }
136
+ return resp , nil
137
+ }
138
+
139
+ // DeleteTeam deletes a team.
140
+ // Reflects DELETE /api/teams/:id API call.
141
+ func (r * Client ) DeleteTeam (ctx context.Context , id uint ) (StatusMessage , error ) {
142
+ var (
143
+ raw []byte
144
+ resp StatusMessage
145
+ err error
146
+ )
147
+ if raw , _ , err = r .delete (ctx , fmt .Sprintf ("api/teams/%d" , id )); err != nil {
148
+ return StatusMessage {}, err
149
+ }
150
+ if err = json .Unmarshal (raw , & resp ); err != nil {
151
+ return StatusMessage {}, err
152
+ }
153
+ return resp , nil
154
+ }
155
+
156
+ // GetTeamMembers gets the members of a team by id.
157
+ // Reflects GET /api/teams/:teamId/members API call.
158
+ func (r * Client ) GetTeamMembers (ctx context.Context , teamId uint ) ([]TeamMember , error ) {
159
+ var (
160
+ raw []byte
161
+ teamMembers []TeamMember
162
+ code int
163
+ err error
164
+ )
165
+ if raw , code , err = r .get (ctx , fmt .Sprintf ("api/teams/%d/members" , teamId ), nil ); err != nil {
166
+ return teamMembers , err
167
+ }
168
+ if code != 200 {
169
+ return teamMembers , fmt .Errorf ("HTTP error %d: returns %s" , code , raw )
170
+ }
171
+ dec := json .NewDecoder (bytes .NewReader (raw ))
172
+ dec .UseNumber ()
173
+ if err := dec .Decode (& teamMembers ); err != nil {
174
+ return teamMembers , fmt .Errorf ("unmarshal team: %s\n %s" , err , raw )
175
+ }
176
+ return teamMembers , err
177
+ }
178
+
179
+ // AddTeamMember adds a member to a team.
180
+ // Reflects POST /api/teams/:teamId/members API call.
181
+ func (r * Client ) AddTeamMember (ctx context.Context , teamId uint , userId uint ) (StatusMessage , error ) {
182
+ var (
183
+ raw []byte
184
+ resp StatusMessage
185
+ err error
186
+ )
187
+ if raw , err = json .Marshal (struct {
188
+ UserId uint `json:"userId"`
189
+ }{
190
+ UserId : userId ,
191
+ }); err != nil {
192
+ return StatusMessage {}, err
193
+ }
194
+ if raw , _ , err = r .post (ctx , fmt .Sprintf ("api/teams/%d/members" , teamId ), nil , raw ); err != nil {
195
+ return StatusMessage {}, err
196
+ }
197
+ if err = json .Unmarshal (raw , & resp ); err != nil {
198
+ return StatusMessage {}, err
199
+ }
200
+ return resp , nil
201
+ }
202
+
203
+ // DeleteTeamMember removes a ream member from a team by id.
204
+ // Reflects DELETE /api/teams/:teamId/:userId API call.
205
+ func (r * Client ) DeleteTeamMember (ctx context.Context , teamId uint , userId uint ) (StatusMessage , error ) {
206
+ var (
207
+ raw []byte
208
+ resp StatusMessage
209
+ err error
210
+ )
211
+ if raw , _ , err = r .delete (ctx , fmt .Sprintf ("api/teams/%d/members/%d" , teamId , userId )); err != nil {
212
+ return StatusMessage {}, err
213
+ }
214
+ if err = json .Unmarshal (raw , & resp ); err != nil {
215
+ return StatusMessage {}, err
216
+ }
217
+ return resp , nil
218
+ }
219
+
220
+ // GetTeamPreferences gets the preferences for a team by id.
221
+ // Reflects GET /api/teams/:teamId/preferences API call.
222
+ func (r * Client ) GetTeamPreferences (ctx context.Context , teamId uint ) (TeamPreferences , error ) {
223
+ var (
224
+ raw []byte
225
+ teamPreferences TeamPreferences
226
+ code int
227
+ err error
228
+ )
229
+ if raw , code , err = r .get (ctx , fmt .Sprintf ("api/teams/%d/preferences" , teamId ), nil ); err != nil {
230
+ return teamPreferences , err
231
+ }
232
+ if code != 200 {
233
+ return teamPreferences , fmt .Errorf ("HTTP error %d: returns %s" , code , raw )
234
+ }
235
+ dec := json .NewDecoder (bytes .NewReader (raw ))
236
+ dec .UseNumber ()
237
+ if err := dec .Decode (& teamPreferences ); err != nil {
238
+ return teamPreferences , fmt .Errorf ("unmarshal team: %s\n %s" , err , raw )
239
+ }
240
+ return teamPreferences , err
241
+ }
242
+
243
+ // UpdateTeamPreferences updates the preferences for a team by id.
244
+ // Reflects PUT /api/teams/:teamId/preferences API call.
245
+ func (r * Client ) UpdateTeamPreferences (ctx context.Context , teamId uint , tp TeamPreferences ) (StatusMessage , error ) {
246
+ var (
247
+ raw []byte
248
+ resp StatusMessage
249
+ err error
250
+ )
251
+ if raw , err = json .Marshal (tp ); err != nil {
252
+ return StatusMessage {}, err
253
+ }
254
+ if raw , _ , err = r .put (ctx , fmt .Sprintf ("api/teams/%d/preferences" , teamId ), nil , raw ); err != nil {
255
+ return StatusMessage {}, err
256
+ }
257
+ if err = json .Unmarshal (raw , & resp ); err != nil {
258
+ return StatusMessage {}, err
259
+ }
260
+ return resp , nil
261
+ }
262
+
263
+ // TeamNotFound is an error returned if the given team was not found.
264
+ var TeamNotFound = fmt .Errorf ("team not found" )
265
+
266
+ // SearchTeamParams is the type for all options implementing query parameters
267
+ // perpage optional. default 1000
268
+ // page optional. default 1
269
+ // http://docs.grafana.org/http_api/team/#search-teams
270
+ // http://docs.grafana.org/http_api/team/#search-teams-with-paging
271
+ type SearchTeamParams func (values url.Values )
272
+
273
+ // WithQuery adds a query parameter
274
+ func WithQuery (query string ) SearchTeamParams {
275
+ return func (v url.Values ) {
276
+ v .Set ("query" , query )
277
+ }
278
+ }
279
+
280
+ // WithPagesize adds a page size query parameter
281
+ func WithPagesize (size uint ) SearchTeamParams {
282
+ return func (v url.Values ) {
283
+ v .Set ("perpage" , strconv .FormatUint (uint64 (size ),10 ))
284
+ }
285
+ }
286
+
287
+ // WithPage adds a page number query parameter
288
+ func WithPage (page uint ) SearchTeamParams {
289
+ return func (v url.Values ) {
290
+ v .Set ("page" , strconv .FormatUint (uint64 (page ),10 ))
291
+ }
292
+ }
293
+
294
+ // WithTeam adds a query parameter
295
+ func WithTeam (team string ) SearchTeamParams {
296
+ return func (v url.Values ) {
297
+ v .Set ("team" , team )
298
+ }
299
+ }
0 commit comments