grafana 0.8.2 → 0.8.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/doc/Array.html +1 -1
- data/doc/Boolean.html +1 -1
- data/doc/FalseClass.html +1 -1
- data/doc/Grafana.html +1 -1
- data/doc/Hash.html +1 -1
- data/doc/Logging.html +1 -1
- data/doc/Object.html +1 -1
- data/doc/Time.html +1 -1
- data/doc/TrueClass.html +1 -1
- data/doc/_index.html +1 -1
- data/doc/file.README.html +1 -1
- data/doc/index.html +1 -1
- data/doc/method_list.html +33 -57
- data/doc/top-level-namespace.html +1 -1
- data/lib/grafana/admin.rb +37 -64
- data/lib/grafana/client.rb +0 -1
- data/lib/grafana/dashboard.rb +88 -37
- data/lib/grafana/datasource.rb +79 -31
- data/lib/grafana/network.rb +15 -3
- data/lib/grafana/organization.rb +64 -34
- data/lib/grafana/organizations.rb +107 -172
- data/lib/grafana/tags.rb +3 -8
- data/lib/grafana/tools.rb +2 -3
- data/lib/grafana/user.rb +80 -45
- data/lib/grafana/users.rb +97 -54
- data/lib/grafana/version.rb +1 -1
- metadata +1 -1
@@ -13,7 +13,6 @@ module Grafana
|
|
13
13
|
get( endpoint )
|
14
14
|
end
|
15
15
|
|
16
|
-
|
17
16
|
# Get a single data sources by Id or Name
|
18
17
|
#
|
19
18
|
# @example
|
@@ -35,28 +34,6 @@ module Grafana
|
|
35
34
|
get(endpoint)
|
36
35
|
end
|
37
36
|
|
38
|
-
# # Get Organisation by Id
|
39
|
-
# # GET /api/orgs/:orgId
|
40
|
-
# def organization_by_id( id )
|
41
|
-
#
|
42
|
-
# raise ArgumentError.new('id must be an Integer') unless( id.is_a?(Integer) )
|
43
|
-
#
|
44
|
-
# endpoint = format( '/api/orgs/%d', id )
|
45
|
-
# @logger.debug("Get Organisation by Id (GET #{endpoint}})") if @debug
|
46
|
-
# get( endpoint )
|
47
|
-
# end
|
48
|
-
#
|
49
|
-
# # Get Organisation by Name
|
50
|
-
# # GET /api/orgs/name/:orgName
|
51
|
-
# def organization_by_name( name )
|
52
|
-
#
|
53
|
-
# raise ArgumentError.new('name must be an String') unless( name.is_a?(String) )
|
54
|
-
#
|
55
|
-
# endpoint = format( '/api/orgs/name/%s', URI.escape( name ) )
|
56
|
-
# @logger.debug("Get Organisation by Name (GET #{endpoint})") if @debug
|
57
|
-
# get( endpoint )
|
58
|
-
# end
|
59
|
-
|
60
37
|
# Update Organisation
|
61
38
|
#
|
62
39
|
# fields Adress 1, Adress 2, City are not implemented yet.
|
@@ -78,30 +55,25 @@ module Grafana
|
|
78
55
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
79
56
|
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
80
57
|
|
81
|
-
organization
|
82
|
-
name
|
58
|
+
organization = validate( params, required: true, var: 'organization', type: String )
|
59
|
+
name = validate( params, required: true, var: 'name', type: String )
|
60
|
+
org = organization( organization )
|
83
61
|
|
84
|
-
|
62
|
+
return { 'status' => 404, 'message' => format('Organization \'%s\' not found', organization) } if( org.nil? || org.dig('status').to_i != 200 )
|
85
63
|
|
86
|
-
|
87
|
-
return {
|
88
|
-
'status' => 404,
|
89
|
-
'message' => format('Organization \'%s\' not found', organization)
|
90
|
-
}
|
91
|
-
end
|
92
|
-
org_id = org.dig('id')
|
64
|
+
organization_id = org.dig('id')
|
93
65
|
|
66
|
+
endpoint = format( '/api/orgs/%s', organization_id )
|
94
67
|
payload = { name: name }
|
95
68
|
|
96
|
-
|
97
|
-
@logger.debug("Update Organisation id #{org_id} (PUT #{endpoint})") if @debug
|
69
|
+
@logger.debug("Update Organisation id #{organization_id} (PUT #{endpoint})") if @debug
|
98
70
|
|
99
71
|
put( endpoint, payload.to_json )
|
100
72
|
end
|
101
73
|
|
102
74
|
# Get Users in Organisation
|
103
75
|
#
|
104
|
-
# @param [Mixed]
|
76
|
+
# @param [Mixed] organization_id Organistaion Name (String) or Organistaion Id (Integer)
|
105
77
|
#
|
106
78
|
# @example
|
107
79
|
# organization_users( 1 )
|
@@ -109,36 +81,32 @@ module Grafana
|
|
109
81
|
#
|
110
82
|
# @return [Hash]
|
111
83
|
#
|
112
|
-
def organization_users(
|
84
|
+
def organization_users( organization_id )
|
113
85
|
|
114
|
-
raise ArgumentError.new(format('wrong type. user \'
|
115
|
-
raise ArgumentError.new('missing \'
|
86
|
+
raise ArgumentError.new(format('wrong type. user \'organization_id\' must be an String (for an Organisation name) or an Integer (for an Organisation Id), given \'%s\'', organization_id.class.to_s)) if( organization_id.is_a?(String) && organization_id.is_a?(Integer) )
|
87
|
+
raise ArgumentError.new('missing \'organization_id\'') if( organization_id.size.zero? )
|
116
88
|
|
117
|
-
if(
|
118
|
-
org = organization(
|
119
|
-
if( org.nil? || org.dig('status').to_i != 200 )
|
120
|
-
|
121
|
-
|
122
|
-
'message' => format('Organization \'%s\' not found', organization)
|
123
|
-
}
|
124
|
-
end
|
125
|
-
org_id = org.dig('id')
|
89
|
+
if(organization_id.is_a?(String))
|
90
|
+
org = organization(organization_id)
|
91
|
+
return { 'status' => 404, 'message' => format('Organization \'%s\' not found', organization) } if( org.nil? || org.dig('status').to_i != 200 )
|
92
|
+
|
93
|
+
organization_id = org.dig('id')
|
126
94
|
end
|
127
95
|
|
128
|
-
endpoint = format( '/api/orgs/%s/users',
|
96
|
+
endpoint = format( '/api/orgs/%s/users', organization_id )
|
129
97
|
|
130
|
-
@logger.debug("Getting users in Organisation id #{
|
98
|
+
@logger.debug("Getting users in Organisation id #{organization_id} (GET #{endpoint})") if @debug
|
131
99
|
get(endpoint)
|
132
100
|
end
|
133
101
|
|
134
102
|
# Add User in Organisation
|
135
103
|
#
|
136
|
-
# @param
|
104
|
+
# @param [Hash] params
|
137
105
|
# @option params [String] organization Organisation name
|
138
106
|
# @option params [String] login_or_email Login or email
|
139
107
|
# @option params [String] role Name of the Role - only 'Viewer', 'Editor', 'Read Only Editor' or 'Admin' allowed
|
140
108
|
#
|
141
|
-
# @
|
109
|
+
# @example
|
142
110
|
# params = {
|
143
111
|
# organization: 'Foo',
|
144
112
|
# login_or_email: 'foo@foo-bar.tld',
|
@@ -150,54 +118,25 @@ module Grafana
|
|
150
118
|
#
|
151
119
|
def add_user_to_organization( params )
|
152
120
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
organization = validate( params, required: true, var: 'organization', type: String )
|
157
|
-
login_or_email = validate( params, required: true, var: 'login_or_email', type: String )
|
158
|
-
role = validate( params, required: true, var: 'role', type: String )
|
159
|
-
valid_roles = ['Viewer', 'Editor', 'Read Only Editor', 'Admin']
|
160
|
-
|
161
|
-
# https://stackoverflow.com/questions/9333952/case-insensitive-arrayinclude?answertab=votes#tab-top
|
162
|
-
# Do this once, or each time the array changes
|
163
|
-
downcased = Set.new valid_roles.map(&:downcase)
|
164
|
-
unless( downcased.include?( role.downcase ) )
|
121
|
+
data = validate_organisation_user( params )
|
122
|
+
status = data.dig('status')
|
165
123
|
|
166
|
-
|
124
|
+
return data if( status.nil? || status.to_i == 404 )
|
167
125
|
|
168
|
-
|
169
|
-
|
170
|
-
'login_or_email' => login_or_email,
|
171
|
-
'role' => role,
|
172
|
-
'message' => message
|
173
|
-
}
|
174
|
-
end
|
126
|
+
org = data.dig('organisation')
|
127
|
+
usr = data.dig('user')
|
175
128
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
return {
|
181
|
-
'status' => 404,
|
182
|
-
'message' => format('Organization \'%s\' not found', organization)
|
183
|
-
}
|
184
|
-
end
|
185
|
-
|
186
|
-
if( usr.nil? || usr.dig('status').to_i != 200 )
|
187
|
-
return {
|
188
|
-
'status' => 404,
|
189
|
-
'message' => format('User \'%s\' not found', login_or_email)
|
190
|
-
}
|
191
|
-
end
|
192
|
-
|
193
|
-
org_id = org.dig('id')
|
129
|
+
organization_id = org.dig('id')
|
130
|
+
organization = org.dig('name')
|
131
|
+
login_or_email = usr.dig('email')
|
132
|
+
role = data.dig('role')
|
194
133
|
|
134
|
+
endpoint = format( '/api/orgs/%d/users', organization_id )
|
195
135
|
payload = {
|
196
136
|
loginOrEmail: login_or_email,
|
197
137
|
role: role
|
198
138
|
}
|
199
139
|
|
200
|
-
endpoint = format( '/api/orgs/%d/users', org_id )
|
201
140
|
@logger.debug("Adding user '#{login_or_email}' to organisation '#{organization}' (POST #{endpoint})") if @debug
|
202
141
|
|
203
142
|
post( endpoint, payload.to_json )
|
@@ -205,12 +144,12 @@ module Grafana
|
|
205
144
|
|
206
145
|
# Update Users in Organisation
|
207
146
|
#
|
208
|
-
# @param
|
147
|
+
# @param [Hash] params
|
209
148
|
# @option params [String] organization Organisation name
|
210
149
|
# @option params [String] login_or_email Login or email
|
211
150
|
# @option params [String] role Name of the Role - only 'Viewer', 'Editor', 'Read Only Editor' or 'Admin' allowed
|
212
151
|
#
|
213
|
-
# @
|
152
|
+
# @example
|
214
153
|
# params = {
|
215
154
|
# organization: 'Foo',
|
216
155
|
# login_or_email: 'foo@foo-bar.tld',
|
@@ -222,67 +161,36 @@ module Grafana
|
|
222
161
|
#
|
223
162
|
def update_organization_user( params )
|
224
163
|
|
225
|
-
|
226
|
-
|
164
|
+
data = validate_organisation_user( params )
|
165
|
+
status = data.dig('status')
|
227
166
|
|
228
|
-
|
229
|
-
login_or_email = validate( params, required: true, var: 'login_or_email', type: String )
|
230
|
-
role = validate( params, required: true, var: 'role', type: String )
|
231
|
-
valid_roles = ['Viewer', 'Editor', 'Read Only Editor', 'Admin']
|
167
|
+
return data if( status.nil? || status.to_i == 404 )
|
232
168
|
|
233
|
-
|
234
|
-
|
235
|
-
downcased = Set.new valid_roles.map(&:downcase)
|
236
|
-
unless( downcased.include?( role.downcase ) )
|
237
|
-
|
238
|
-
message = format( 'wrong role. Role must be one of %s, given \'%s\'', valid_roles.join(', '), role )
|
239
|
-
|
240
|
-
return {
|
241
|
-
'status' => 404,
|
242
|
-
'login_or_email' => login_or_email,
|
243
|
-
'role' => role,
|
244
|
-
'message' => message
|
245
|
-
}
|
246
|
-
end
|
247
|
-
|
248
|
-
org = organization( organization )
|
249
|
-
usr = user_by_name( login_or_email )
|
169
|
+
org = data.dig('organisation')
|
170
|
+
usr = data.dig('user')
|
250
171
|
|
251
|
-
|
252
|
-
|
253
|
-
'status' => 404,
|
254
|
-
'message' => format('Organization \'%s\' not found', organization)
|
255
|
-
}
|
256
|
-
end
|
257
|
-
|
258
|
-
if( usr.nil? || usr.dig('status').to_i != 200 )
|
259
|
-
return {
|
260
|
-
'status' => 404,
|
261
|
-
'message' => format('User \'%s\' not found', login_or_email)
|
262
|
-
}
|
263
|
-
end
|
264
|
-
|
265
|
-
org_id = org.dig('id')
|
172
|
+
organization_id = org.dig('id')
|
173
|
+
organization = org.dig('name')
|
266
174
|
usr_id = usr.dig('id')
|
175
|
+
login_or_email = usr.dig('name')
|
176
|
+
role = data.dig(:role)
|
267
177
|
|
178
|
+
endpoint = format( '/api/orgs/%d/users/%d', organization_id, usr_id )
|
268
179
|
payload = {
|
269
180
|
role: role
|
270
181
|
}
|
271
182
|
|
272
|
-
endpoint = format( '/api/orgs/%d/users/%d', org_id, usr_id )
|
273
|
-
|
274
183
|
@logger.debug("Updating user '#{login_or_email}' in organization '#{organization}' (PATCH #{endpoint})") if @debug
|
275
184
|
patch( endpoint, payload.to_json )
|
276
185
|
end
|
277
186
|
|
278
187
|
# Delete User in Organisation
|
279
188
|
#
|
280
|
-
# @param
|
189
|
+
# @param [Hash] params
|
281
190
|
# @option params [String] organization Organisation name
|
282
191
|
# @option params [String] login_or_email Login or email
|
283
|
-
# @option params [String] role Name of the Role - only 'Viewer', 'Editor', 'Read Only Editor' or 'Admin' allowed
|
284
192
|
#
|
285
|
-
# @
|
193
|
+
# @example
|
286
194
|
# params = {
|
287
195
|
# organization: 'Foo',
|
288
196
|
# login_or_email: 'foo@foo-bar.tld'
|
@@ -291,7 +199,6 @@ module Grafana
|
|
291
199
|
#
|
292
200
|
# @return [Hash]
|
293
201
|
#
|
294
|
-
# DELETE /api/orgs/:orgId/users/:userId
|
295
202
|
def delete_user_from_organization( params )
|
296
203
|
|
297
204
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
@@ -301,26 +208,15 @@ module Grafana
|
|
301
208
|
login_or_email = validate( params, required: true, var: 'login_or_email', type: String )
|
302
209
|
|
303
210
|
org = organization( organization )
|
304
|
-
usr =
|
211
|
+
usr = user( login_or_email )
|
305
212
|
|
306
|
-
if( org.nil? || org.dig('status').to_i != 200 )
|
307
|
-
|
308
|
-
'status' => 404,
|
309
|
-
'message' => format('Organization \'%s\' not found', organization)
|
310
|
-
}
|
311
|
-
end
|
213
|
+
return { 'status' => 404, 'message' => format('Organization \'%s\' not found', organization) } if( org.nil? || org.dig('status').to_i != 200 )
|
214
|
+
return { 'status' => 404, 'message' => format('User \'%s\' not found', login_or_email) } if( usr.nil? || usr.dig('status').to_i != 200 )
|
312
215
|
|
313
|
-
|
314
|
-
return {
|
315
|
-
'status' => 404,
|
316
|
-
'message' => format('User \'%s\' not found', login_or_email)
|
317
|
-
}
|
318
|
-
end
|
319
|
-
|
320
|
-
org_id = org.dig('id')
|
216
|
+
organization_id = org.dig('id')
|
321
217
|
usr_id = usr.dig('id')
|
322
218
|
|
323
|
-
endpoint = format( '/api/orgs/%d/users/%d',
|
219
|
+
endpoint = format( '/api/orgs/%d/users/%d', organization_id, usr_id )
|
324
220
|
|
325
221
|
@logger.debug("Deleting user '#{login_or_email}' in organization '#{organization}' (DELETE #{endpoint})") if @debug
|
326
222
|
delete(endpoint)
|
@@ -328,10 +224,10 @@ module Grafana
|
|
328
224
|
|
329
225
|
# Create Organisation
|
330
226
|
#
|
331
|
-
# @param
|
227
|
+
# @param [Hash] params
|
332
228
|
# @option params [String] organization Organisation name
|
333
229
|
#
|
334
|
-
# @
|
230
|
+
# @example
|
335
231
|
# params = {
|
336
232
|
# name: 'Foo'
|
337
233
|
# }
|
@@ -345,15 +241,9 @@ module Grafana
|
|
345
241
|
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
346
242
|
|
347
243
|
name = validate( params, required: true, var: 'name', type: String )
|
244
|
+
org = organization( name )
|
348
245
|
|
349
|
-
|
350
|
-
|
351
|
-
if( org.nil? || org.dig('status').to_i == 200 )
|
352
|
-
return {
|
353
|
-
'status' => 409,
|
354
|
-
'message' => format('Organisation \'%s\' already exists', name )
|
355
|
-
}
|
356
|
-
end
|
246
|
+
return { 'status' => 409, 'message' => format('Organisation \'%s\' already exists', name ) } if( org.nil? || org.dig('status').to_i == 200 )
|
357
247
|
|
358
248
|
endpoint = '/api/orgs'
|
359
249
|
payload = {
|
@@ -382,25 +272,70 @@ module Grafana
|
|
382
272
|
if(organisation_id.is_a?(String))
|
383
273
|
data = organizations.dig('message')
|
384
274
|
organisation_map = {}
|
385
|
-
data.each do |
|
386
|
-
organisation_map[
|
275
|
+
data.each do |d|
|
276
|
+
organisation_map[d.dig('id')] = d.dig('name')
|
387
277
|
end
|
388
|
-
organisation_map.select { |
|
389
|
-
organisation_id = organisation_map.keys.first if( data )
|
278
|
+
organisation_id = organisation_map.select { |x,y| y == organisation_id }.keys.first if( organisation_map )
|
390
279
|
end
|
391
280
|
|
392
|
-
if( organisation_id.nil? )
|
281
|
+
return { 'status' => 404, 'message' => format( 'No Organisation \'%s\' found', organisation_id) } if( organisation_id.nil? )
|
282
|
+
|
283
|
+
endpoint = format( '/api/orgs/%d', organisation_id )
|
284
|
+
@logger.debug("Deleting organization #{organisation_id} (DELETE #{endpoint})") if @debug
|
285
|
+
|
286
|
+
delete(endpoint)
|
287
|
+
end
|
288
|
+
|
289
|
+
|
290
|
+
private
|
291
|
+
# validate an user for an organisation
|
292
|
+
#
|
293
|
+
# @example
|
294
|
+
# params = {
|
295
|
+
# organization: 'Foo',
|
296
|
+
# login_or_email: 'foo@foo-bar.tld',
|
297
|
+
# role: 'Viewer'
|
298
|
+
# }
|
299
|
+
# validate_organisation_user( params )
|
300
|
+
#
|
301
|
+
# @return [Hash]
|
302
|
+
#
|
303
|
+
def validate_organisation_user( params )
|
304
|
+
|
305
|
+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
306
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
307
|
+
|
308
|
+
organization = validate( params, required: true, var: 'organization', type: String )
|
309
|
+
login_or_email = validate( params, required: true, var: 'login_or_email', type: String )
|
310
|
+
role = validate( params, required: true, var: 'role', type: String )
|
311
|
+
valid_roles = ['Viewer', 'Editor', 'Read Only Editor', 'Admin']
|
312
|
+
|
313
|
+
# https://stackoverflow.com/questions/9333952/case-insensitive-arrayinclude?answertab=votes#tab-top
|
314
|
+
# Do this once, or each time the array changes
|
315
|
+
downcased = Set.new valid_roles.map(&:downcase)
|
316
|
+
unless( downcased.include?( role.downcase ) )
|
393
317
|
return {
|
394
318
|
'status' => 404,
|
395
|
-
'
|
319
|
+
'login_or_email' => login_or_email,
|
320
|
+
'role' => role,
|
321
|
+
'message' => format( 'wrong role. Role must be one of %s, given \'%s\'', valid_roles.join(', '), role )
|
396
322
|
}
|
397
323
|
end
|
398
324
|
|
399
|
-
|
400
|
-
|
325
|
+
org = organization( organization )
|
326
|
+
usr = user( login_or_email )
|
401
327
|
|
402
|
-
|
328
|
+
return { 'status' => 404, 'message' => format('Organization \'%s\' not found', organization) } if( org.nil? || org.dig('status').to_i != 200 )
|
329
|
+
return { 'status' => 404, 'message' => format('User \'%s\' not found', login_or_email) } if( usr.nil? || usr.dig('status').to_i != 200 )
|
330
|
+
|
331
|
+
{
|
332
|
+
'status' => 200,
|
333
|
+
'organisation' => org,
|
334
|
+
'user' => usr,
|
335
|
+
'role' => role
|
336
|
+
}
|
403
337
|
end
|
404
338
|
|
339
|
+
|
405
340
|
end
|
406
341
|
end
|
data/lib/grafana/tags.rb
CHANGED
@@ -9,12 +9,10 @@ module Grafana
|
|
9
9
|
def expand_tags( params )
|
10
10
|
|
11
11
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
12
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
12
13
|
|
13
|
-
dashboard
|
14
|
-
additional_tags
|
15
|
-
|
16
|
-
raise ArgumentError.new(format('wrong type. \'dashboard\' must be an Hash, given \'%s\'', dashboard.class.to_s)) unless( dashboard.is_a?(Hash) )
|
17
|
-
raise ArgumentError.new(format('wrong type. \'additional_tags\' must be an Array, given \'%s\'', additional_tags.class.to_s)) unless( additional_tags.is_a?(Array) )
|
14
|
+
dashboard = validate( params, required: true, var: 'dashboard', type: Hash )
|
15
|
+
additional_tags = validate( params, required: true, var: 'additional_tags', type: Array )
|
18
16
|
|
19
17
|
# add tags
|
20
18
|
# dashboard = JSON.parse( dashboard ) if( dashboard.is_a?( String ) )
|
@@ -24,12 +22,9 @@ module Grafana
|
|
24
22
|
current_tags = dashboard.dig( 'dashboard', 'tags' )
|
25
23
|
|
26
24
|
if( !current_tags.nil? && additional_tags.count > 0 )
|
27
|
-
|
28
25
|
current_tags << additional_tags
|
29
|
-
|
30
26
|
current_tags.flatten!
|
31
27
|
current_tags.sort!
|
32
|
-
|
33
28
|
dashboard['dashboard']['tags'] = current_tags
|
34
29
|
end
|
35
30
|
|