grafana 0.8.5 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/README.md +8 -3
- data/lib/_logging.rb_ +55 -0
- data/lib/grafana.rb +1 -1
- data/lib/grafana/admin.rb +2 -1
- data/lib/grafana/alerts.rb +338 -14
- data/lib/grafana/annotations.rb +284 -9
- data/lib/grafana/auth.rb +150 -0
- data/lib/grafana/client.rb +81 -5
- data/lib/grafana/dashboard.rb +99 -7
- data/lib/grafana/dashboard_permissions.rb +132 -0
- data/lib/grafana/dashboard_versions.rb +101 -5
- data/lib/grafana/datasource.rb +34 -38
- data/lib/grafana/folder.rb +198 -0
- data/lib/grafana/folder_and_dashboard_search.rb +57 -0
- data/lib/grafana/folder_permissions.rb +155 -0
- data/lib/grafana/logging.rb +55 -0
- data/lib/grafana/login.rb +93 -49
- data/lib/grafana/network.rb +130 -101
- data/lib/grafana/organization.rb +2 -1
- data/lib/grafana/organizations.rb +15 -6
- data/lib/grafana/playlist.rb +594 -0
- data/lib/grafana/preferences.rb +122 -0
- data/lib/grafana/tags.rb +16 -0
- data/lib/grafana/teams.rb +364 -0
- data/lib/grafana/tools.rb +42 -9
- data/lib/grafana/user.rb +6 -2
- data/lib/grafana/users.rb +19 -11
- data/lib/grafana/validator.rb +47 -2
- data/lib/grafana/version.rb +3 -3
- metadata +16 -39
- data/doc/Array.html +0 -200
- data/doc/Boolean.html +0 -122
- data/doc/FalseClass.html +0 -132
- data/doc/Grafana.html +0 -172
- data/doc/Hash.html +0 -212
- data/doc/Logging.html +0 -326
- data/doc/Object.html +0 -286
- data/doc/Time.html +0 -200
- data/doc/TrueClass.html +0 -132
- data/doc/_index.html +0 -380
- data/doc/class_list.html +0 -51
- data/doc/file.README.html +0 -117
- data/doc/file_list.html +0 -56
- data/doc/frames.html +0 -17
- data/doc/index.html +0 -117
- data/doc/method_list.html +0 -747
- data/doc/top-level-namespace.html +0 -112
- data/lib/logging.rb +0 -35
@@ -1,29 +1,125 @@
|
|
1
1
|
|
2
2
|
module Grafana
|
3
3
|
|
4
|
-
# http://docs.grafana.org/http_api/
|
4
|
+
# http://docs.grafana.org/http_api/dashboard_versions
|
5
5
|
#
|
6
6
|
module DashboardVersions
|
7
7
|
|
8
8
|
# Get all dashboard versions
|
9
9
|
# http://docs.grafana.org/http_api/dashboard_versions/#get-all-dashboard-versions
|
10
10
|
# GET /api/dashboards/id/:dashboardId/versions
|
11
|
-
|
11
|
+
#
|
12
|
+
#
|
13
|
+
#
|
14
|
+
#
|
15
|
+
#
|
16
|
+
#
|
17
|
+
def dashboard_all_versions( params )
|
18
|
+
|
19
|
+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
20
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
21
|
+
|
22
|
+
# v, mv = version.values
|
23
|
+
# return { 'status' => 404, 'message' => format( 'dashboard has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
24
|
+
|
25
|
+
dashboard_id = validate( params, required: true , var: 'dashboard_id', type: Integer )
|
26
|
+
start = validate( params, required: false, var: 'start' , type: Integer )
|
27
|
+
limit = validate( params, required: false, var: 'limit' , type: Integer )
|
28
|
+
|
29
|
+
api = []
|
30
|
+
api << format( 'start=%s', start ) unless( start.nil? )
|
31
|
+
api << format( 'limit=%s', limit ) unless( limit.nil? )
|
32
|
+
api = api.join( '&' )
|
33
|
+
|
34
|
+
endpoint = format('/api/dashboards/id/%s/versions?%s', dashboard_id, api)
|
35
|
+
get(endpoint)
|
36
|
+
end
|
12
37
|
|
13
38
|
# Get dashboard version
|
14
39
|
# http://docs.grafana.org/http_api/dashboard_versions/#get-dashboard-version
|
15
40
|
# GET /api/dashboards/id/:dashboardId/versions/:id
|
16
|
-
def dashboard_version( params )
|
41
|
+
def dashboard_version( params )
|
42
|
+
|
43
|
+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
44
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
45
|
+
|
46
|
+
v, mv = version.values
|
47
|
+
return { 'status' => 404, 'message' => format( 'folder has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
48
|
+
|
49
|
+
dashboard_id = validate( params, required: true, var: 'dashboard_id', type: Integer )
|
50
|
+
version = validate( params, required: true, var: 'version' , type: Integer )
|
51
|
+
|
52
|
+
endpoint = format('/api/dashboards/id/%s/versions/%s', dashboard_id, version)
|
53
|
+
|
54
|
+
r = get(endpoint)
|
55
|
+
|
56
|
+
r['message'] = format('no dashboard version \'%s\' for dashboard \'%s\' found', version, dashboard_id) if(r.dig('status') == 404)
|
57
|
+
r['message'] = format('no dashboard version \'%s\' for dashboard \'%s\' found', version, dashboard_id) if(r.dig('status') == 500)
|
58
|
+
r
|
59
|
+
end
|
17
60
|
|
18
61
|
# Restore dashboard
|
19
62
|
# http://docs.grafana.org/http_api/dashboard_versions/#restore-dashboard
|
20
63
|
# POST /api/dashboards/id/:dashboardId/restore
|
21
|
-
def restore_dashboard( params )
|
64
|
+
def restore_dashboard( params )
|
65
|
+
|
66
|
+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
67
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
68
|
+
|
69
|
+
# v, mv = version.values
|
70
|
+
# return { 'status' => 404, 'message' => format( 'folder has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
71
|
+
|
72
|
+
dashboard_id = validate( params, required: true, var: 'dashboard_id', type: Integer )
|
73
|
+
version = validate( params, required: true, var: 'version' , type: Integer )
|
74
|
+
|
75
|
+
endpoint = format('/api/dashboards/id/%s/restore', dashboard_id)
|
76
|
+
|
77
|
+
payload = {
|
78
|
+
version: version
|
79
|
+
}
|
80
|
+
|
81
|
+
post(endpoint, payload.to_json)
|
82
|
+
end
|
22
83
|
|
23
84
|
# Compare dashboard versions
|
24
85
|
# http://docs.grafana.org/http_api/dashboard_versions/#compare-dashboard-versions
|
25
86
|
# POST /api/dashboards/calculate-diff
|
26
|
-
def compare_dashboard_version( params )
|
87
|
+
def compare_dashboard_version( params )
|
88
|
+
|
89
|
+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
90
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
91
|
+
|
92
|
+
base = validate( params, required: true , var: 'base' , type: Hash )
|
93
|
+
new = validate( params, required: true , var: 'new' , type: Hash )
|
94
|
+
diff_type = validate( params, required: false, var: 'diff_type', type: String ) || 'json'
|
95
|
+
|
96
|
+
base_dashboard_id = validate( base, required: true , var: 'dashboard_id', type: Integer )
|
97
|
+
base_dashboard_version = validate( base, required: true , var: 'version' , type: Integer )
|
98
|
+
new_dashboard_id = validate( new , required: true , var: 'dashboard_id', type: Integer )
|
99
|
+
new_dashboard_version = validate( new , required: true , var: 'version' , type: Integer )
|
100
|
+
|
101
|
+
valid_diff_type = %w[json basic]
|
102
|
+
|
103
|
+
r = validate_hash(diff_type, valid_diff_type)
|
104
|
+
|
105
|
+
return r unless(r == true)
|
106
|
+
|
107
|
+
payload = {
|
108
|
+
base: {
|
109
|
+
dashboardId: base_dashboard_id,
|
110
|
+
version: base_dashboard_version
|
111
|
+
},
|
112
|
+
new: {
|
113
|
+
dashboardId: new_dashboard_id,
|
114
|
+
version: new_dashboard_version
|
115
|
+
},
|
116
|
+
diffType: diff_type
|
117
|
+
}
|
118
|
+
|
119
|
+
endpoint = '/api/dashboards/calculate-diff'
|
120
|
+
|
121
|
+
post(endpoint, payload.to_json)
|
122
|
+
end
|
27
123
|
|
28
124
|
end
|
29
125
|
|
data/lib/grafana/datasource.rb
CHANGED
@@ -44,7 +44,9 @@ module Grafana
|
|
44
44
|
#
|
45
45
|
def datasource( datasource_id )
|
46
46
|
|
47
|
-
|
47
|
+
if( datasource_id.is_a?(String) && datasource_id.is_a?(Integer) )
|
48
|
+
raise ArgumentError.new(format('wrong type. \'datasource_id\' must be an String (for an Datasource name) or an Integer (for an Datasource Id), given \'%s\'', datasource_id.class.to_s))
|
49
|
+
end
|
48
50
|
raise ArgumentError.new('missing \'datasource_id\'') if( datasource_id.size.zero? )
|
49
51
|
|
50
52
|
if(datasource_id.is_a?(String))
|
@@ -105,27 +107,31 @@ module Grafana
|
|
105
107
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
106
108
|
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
107
109
|
|
108
|
-
name
|
109
|
-
organisation
|
110
|
-
type
|
111
|
-
new_name
|
112
|
-
database
|
113
|
-
access
|
114
|
-
default
|
115
|
-
user
|
116
|
-
password
|
117
|
-
url
|
118
|
-
json_data
|
119
|
-
ba_user
|
120
|
-
ba_password
|
121
|
-
basic_auth
|
122
|
-
basic_auth
|
123
|
-
org_id
|
124
|
-
|
125
|
-
|
126
|
-
|
110
|
+
name = validate( params, required: true , var: 'name' )
|
111
|
+
organisation = validate( params, required: false, var: 'organisation' )
|
112
|
+
type = validate( params, required: false, var: 'type', type: String )
|
113
|
+
new_name = validate( params, required: false, var: 'new_name', type: String )
|
114
|
+
database = validate( params, required: false, var: 'database', type: String )
|
115
|
+
access = validate( params, required: false, var: 'access', type: String ) || 'proxy'
|
116
|
+
default = validate( params, required: false, var: 'default', type: Boolean ) || false
|
117
|
+
user = validate( params, required: false, var: 'user', type: String )
|
118
|
+
password = validate( params, required: false, var: 'password', type: String )
|
119
|
+
url = validate( params, required: false, var: 'url', type: String )
|
120
|
+
json_data = validate( params, required: false, var: 'json_data', type: Hash )
|
121
|
+
ba_user = validate( params, required: false, var: 'basic_user', type: String )
|
122
|
+
ba_password = validate( params, required: false, var: 'basic_password', type: String )
|
123
|
+
basic_auth = false
|
124
|
+
basic_auth = true unless( ba_user.nil? && ba_password.nil? )
|
125
|
+
org_id = nil
|
126
|
+
|
127
|
+
if( name.is_a?(String) && name.is_a?(Integer) )
|
128
|
+
raise ArgumentError.new(format('wrong type. \'name\' must be an String (for an Datasource name) or an Integer (for an Datasource Id), given \'%s\'', name.class.to_s))
|
129
|
+
end
|
127
130
|
if( organisation )
|
128
|
-
|
131
|
+
if( organisation.is_a?(String) && organisation.is_a?(Integer) )
|
132
|
+
raise ArgumentError.new(format('wrong type. \'organisation\' must be an String (for an Organisation name) or an Integer (for an Organisation Id), given \'%s\'', organisation.class.to_s))
|
133
|
+
end
|
134
|
+
|
129
135
|
org = organization( organisation )
|
130
136
|
org_id = org.dig('id')
|
131
137
|
|
@@ -170,7 +176,7 @@ module Grafana
|
|
170
176
|
endpoint = format('/api/datasources/%d', datasource_id )
|
171
177
|
|
172
178
|
@logger.debug("Updating data source Id #{datasource_id} (GET #{endpoint})") if @debug
|
173
|
-
|
179
|
+
# logger.debug(payload.to_json) if(@debug)
|
174
180
|
|
175
181
|
put( endpoint, payload.to_json )
|
176
182
|
end
|
@@ -180,10 +186,8 @@ module Grafana
|
|
180
186
|
# @param [Hash] params
|
181
187
|
# @option params [String] type Datasource Type - (required) (grafana graphite cloudwatch elasticsearch prometheus influxdb mysql opentsdb postgres)
|
182
188
|
# @option params [String] name Datasource Name - (required)
|
183
|
-
# @option params [String] database Datasource Database - (required)
|
184
189
|
# @option params [String] access (proxy) Acess Type - (required) (proxy or direct)
|
185
190
|
# @option params [Boolean] default (false)
|
186
|
-
# @option params [String] password
|
187
191
|
# @option params [String] url Datasource URL - (required)
|
188
192
|
# @option params [Hash] json_data
|
189
193
|
# @option params [Hash] json_secure
|
@@ -194,7 +198,6 @@ module Grafana
|
|
194
198
|
# params = {
|
195
199
|
# name: 'graphite',
|
196
200
|
# type: 'graphite',
|
197
|
-
# database: 'graphite',
|
198
201
|
# url: 'http://localhost:8080'
|
199
202
|
# }
|
200
203
|
# create_datasource(params)
|
@@ -202,7 +205,6 @@ module Grafana
|
|
202
205
|
# params = {
|
203
206
|
# name: 'graphite',
|
204
207
|
# type: 'graphite',
|
205
|
-
# database: 'graphite',
|
206
208
|
# default: true,
|
207
209
|
# url: 'http://localhost:8080',
|
208
210
|
# json_data: { graphiteVersion: '1.1' }
|
@@ -231,13 +233,11 @@ module Grafana
|
|
231
233
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
232
234
|
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
233
235
|
|
234
|
-
type = validate( params, required: true, var: 'type', type: String )
|
235
|
-
name = validate( params, required: true, var: 'name', type: String )
|
236
|
-
database = validate( params, required: true, var: 'database', type: String )
|
236
|
+
type = validate( params, required: true , var: 'type', type: String )
|
237
|
+
name = validate( params, required: true , var: 'name', type: String )
|
237
238
|
access = validate( params, required: false, var: 'access', type: String ) || 'proxy'
|
238
239
|
default = validate( params, required: false, var: 'default', type: Boolean ) || false
|
239
|
-
|
240
|
-
url = validate( params, required: true, var: 'url', type: String )
|
240
|
+
url = validate( params, required: true , var: 'url', type: String )
|
241
241
|
json_data = validate( params, required: false, var: 'json_data', type: Hash )
|
242
242
|
json_secure = validate( params, required: false, var: 'json_secure', type: Hash )
|
243
243
|
ba_user = validate( params, required: false, var: 'basic_user', type: String )
|
@@ -262,14 +262,8 @@ module Grafana
|
|
262
262
|
jsonData: json_data,
|
263
263
|
secureJsonData: json_secure
|
264
264
|
}
|
265
|
-
|
266
265
|
payload.reject!{ |_k, v| v.nil? }
|
267
266
|
|
268
|
-
if( @debug )
|
269
|
-
logger.debug("Creating data source: #{name} (database: #{database})")
|
270
|
-
logger.debug( payload.to_json )
|
271
|
-
end
|
272
|
-
|
273
267
|
endpoint = '/api/datasources'
|
274
268
|
post(endpoint, payload.to_json)
|
275
269
|
end
|
@@ -286,7 +280,9 @@ module Grafana
|
|
286
280
|
#
|
287
281
|
def delete_datasource( datasource_id )
|
288
282
|
|
289
|
-
|
283
|
+
if( datasource_id.is_a?(String) && datasource_id.is_a?(Integer) )
|
284
|
+
raise ArgumentError.new(format('wrong type. \'datasource_id\' must be an String (for an Datasource name) or an Integer (for an Datasource Id), given \'%s\'', datasource_id.class.to_s))
|
285
|
+
end
|
290
286
|
raise ArgumentError.new('missing \'datasource_id\'') if( datasource_id.size.zero? )
|
291
287
|
|
292
288
|
if(datasource_id.is_a?(String))
|
@@ -0,0 +1,198 @@
|
|
1
|
+
module Grafana
|
2
|
+
|
3
|
+
# http://docs.grafana.org/http_api/folder/#folder-api
|
4
|
+
#
|
5
|
+
module Folder
|
6
|
+
|
7
|
+
# Get all folders
|
8
|
+
# GET /api/folders
|
9
|
+
# Returns all folders that the authenticated user has permission to view.
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# folders
|
13
|
+
#
|
14
|
+
# @return [Hash]
|
15
|
+
#
|
16
|
+
def folders
|
17
|
+
|
18
|
+
v, mv = version.values
|
19
|
+
return { 'status' => 404, 'message' => format( 'folder has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
20
|
+
|
21
|
+
endpoint = '/api/folders'
|
22
|
+
@logger.debug("Getting all folders (GET #{endpoint})") if @debug
|
23
|
+
get(endpoint)
|
24
|
+
end
|
25
|
+
|
26
|
+
# Get folder by uid
|
27
|
+
# GET /api/folders/:uid
|
28
|
+
#
|
29
|
+
# Will return the folder given the folder uid.
|
30
|
+
#
|
31
|
+
# Get folder by id
|
32
|
+
# GET /api/folders/:id
|
33
|
+
#
|
34
|
+
# Will return the folder identified by id.
|
35
|
+
def folder( folder_uid )
|
36
|
+
|
37
|
+
raise ArgumentError.new(format('wrong type. user \'folder_uid\' must be an String (for an Folder Uid) or an Integer (for an Folder Id), given \'%s\'', folder_uid.class.to_s)) \
|
38
|
+
if( folder_uid.is_a?(String) && folder_uid.is_a?(Integer) )
|
39
|
+
raise ArgumentError.new('missing \'folder_uid\'') if( folder_uid.size.zero? )
|
40
|
+
|
41
|
+
v, mv = version.values
|
42
|
+
return { 'status' => 404, 'message' => format( 'folder has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
43
|
+
|
44
|
+
if(folder_uid.is_a?(Integer))
|
45
|
+
|
46
|
+
f = folders
|
47
|
+
f = JSON.parse(f) if(f.is_a?(String))
|
48
|
+
|
49
|
+
status = f.dig('status')
|
50
|
+
return f if( status != 200 )
|
51
|
+
|
52
|
+
f = f.dig('message').detect {|x| x['id'] == folder_uid }
|
53
|
+
|
54
|
+
return { 'status' => 404, 'message' => format( 'No Folder \'%s\' found', folder_uid) } if( folder_uid.nil? )
|
55
|
+
|
56
|
+
folder_uid = f.dig('uid') unless(f.nil?)
|
57
|
+
|
58
|
+
return { 'status' => 404, 'message' => format( 'No Folder \'%s\' found', folder_uid) } if( folder_uid.is_a?(Integer) )
|
59
|
+
end
|
60
|
+
|
61
|
+
return { 'status' => 404, 'message' => format( 'The uid can have a maximum length of 40 characters, but it is %s characters long', folder_uid.length) } \
|
62
|
+
if( folder_uid.is_a?(String) && folder_uid.length > 40 )
|
63
|
+
return { 'status' => 404, 'message' => format( 'No Folder \'%s\' found', folder_uid) } if( folder_uid.nil? )
|
64
|
+
|
65
|
+
endpoint = format( '/api/folders/%s', folder_uid )
|
66
|
+
|
67
|
+
@logger.debug("Getting folder by Id #{folder_uid} (GET #{endpoint})") if @debug
|
68
|
+
get(endpoint)
|
69
|
+
end
|
70
|
+
|
71
|
+
# Create folder
|
72
|
+
# POST /api/folders
|
73
|
+
#
|
74
|
+
# Creates a new folder.
|
75
|
+
# JSON Body schema:
|
76
|
+
#
|
77
|
+
# uid - Optional unique identifier.
|
78
|
+
# title - The title of the folder.
|
79
|
+
def create_folder( params )
|
80
|
+
|
81
|
+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
82
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
83
|
+
|
84
|
+
v, mv = version.values
|
85
|
+
return { 'status' => 404, 'message' => format( 'folder has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
86
|
+
|
87
|
+
title = validate( params, required: false, var: 'title', type: String )
|
88
|
+
uid = validate( params, required: true , var: 'uid' , type: String )
|
89
|
+
|
90
|
+
return { 'status' => 404, 'message' => format( 'The uid can have a maximum length of 40 characters. \'%s\' given', uid.length) } if( uid.length > 40 )
|
91
|
+
|
92
|
+
data = {
|
93
|
+
uid: uid,
|
94
|
+
title: title
|
95
|
+
}
|
96
|
+
data.reject!{ |_, y| y.nil? }
|
97
|
+
|
98
|
+
payload = data.deep_string_keys
|
99
|
+
|
100
|
+
endpoint = '/api/folders'
|
101
|
+
|
102
|
+
@logger.debug("create folder #{title} (GET #{endpoint})") if @debug
|
103
|
+
logger.debug(payload.to_json) if(@debug)
|
104
|
+
|
105
|
+
post( endpoint, payload.to_json )
|
106
|
+
end
|
107
|
+
|
108
|
+
# Update folder
|
109
|
+
# PUT /api/folders/:uid
|
110
|
+
#
|
111
|
+
# schould be fail, when the version are not incremented
|
112
|
+
# overwrite helps
|
113
|
+
#
|
114
|
+
# Updates an existing folder identified by uid.
|
115
|
+
# JSON Body schema:
|
116
|
+
#
|
117
|
+
# - uid - Provide another unique identifier than stored to change the unique identifier.
|
118
|
+
# - title - The title of the folder.
|
119
|
+
# - version - Provide the current version to be able to update the folder. Not needed if overwrite=true.
|
120
|
+
# - overwrite - Set to true if you want to overwrite existing folder with newer version.
|
121
|
+
def update_folder( params )
|
122
|
+
|
123
|
+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
124
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
125
|
+
|
126
|
+
v, mv = version.values
|
127
|
+
return { 'status' => 404, 'message' => format( 'folder has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
128
|
+
|
129
|
+
uid = validate( params, required: true , var: 'uid' , type: String )
|
130
|
+
title = validate( params, required: true , var: 'title' , type: String )
|
131
|
+
new_uid = validate( params, required: false, var: 'new_uid' , type: String )
|
132
|
+
version = validate( params, required: false, var: 'version' , type: Integer )
|
133
|
+
overwrite = validate( params, required: false, var: 'overwrite', type: Boolean ) || false
|
134
|
+
|
135
|
+
existing_folder = folder( uid )
|
136
|
+
return { 'status' => 404, 'message' => format( 'No Folder \'%s\' found', uid) } if( existing_folder.dig('status') != 200 )
|
137
|
+
|
138
|
+
unless( new_uid.nil? )
|
139
|
+
existing_folder = folder( new_uid )
|
140
|
+
return { 'status' => 404, 'message' => format( 'Folder \'%s\' found', uid) } if( existing_folder.dig('status') == 200 )
|
141
|
+
end
|
142
|
+
|
143
|
+
payload = {
|
144
|
+
title: title,
|
145
|
+
uid: new_uid,
|
146
|
+
version: version,
|
147
|
+
overwrite: overwrite
|
148
|
+
}
|
149
|
+
payload.reject!{ |_, y| y.nil? }
|
150
|
+
|
151
|
+
@logger.debug("Updating folder with Uid #{uid}") if @debug
|
152
|
+
|
153
|
+
endpoint = format( '/api/folders/%s', uid )
|
154
|
+
|
155
|
+
put( endpoint, payload.to_json )
|
156
|
+
end
|
157
|
+
|
158
|
+
|
159
|
+
# Delete folder
|
160
|
+
# DELETE /api/folders/:uid
|
161
|
+
#
|
162
|
+
# Deletes an existing folder identified by uid together with all dashboards stored in the folder, if any.
|
163
|
+
# This operation cannot be reverted.
|
164
|
+
def delete_folder( folder_uid )
|
165
|
+
|
166
|
+
raise ArgumentError.new(format('wrong type. user \'folder_uid\' must be an String (for an Folder Uid) or an Integer (for an Folder Id), given \'%s\'', folder_uid.class.to_s)) \
|
167
|
+
if( folder_uid.is_a?(String) && folder_uid.is_a?(Integer) )
|
168
|
+
raise ArgumentError.new('missing \'folder_uid\'') if( folder_uid.size.zero? )
|
169
|
+
|
170
|
+
v, mv = version.values
|
171
|
+
return { 'status' => 404, 'message' => format( 'folder has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
172
|
+
|
173
|
+
if(folder_uid.is_a?(Integer))
|
174
|
+
|
175
|
+
fldrs = folders
|
176
|
+
|
177
|
+
fldrs = JSON.parse(fldrs) if(fldrs.is_a?(String))
|
178
|
+
status = fldrs.dig('status')
|
179
|
+
|
180
|
+
return fldrs if( status != 200 )
|
181
|
+
|
182
|
+
fldrs.dig('message').each do |d|
|
183
|
+
folder_uid = d.dig('uid').to_s
|
184
|
+
end
|
185
|
+
end
|
186
|
+
|
187
|
+
return { 'status' => 404, 'message' => format( 'No User \'%s\' found', folder_uid) } if( folder_uid.nil? )
|
188
|
+
|
189
|
+
endpoint = format( '/api/folders/%s', folder_uid )
|
190
|
+
|
191
|
+
@logger.debug("deleting folder by uid #{folder_uid} (GET #{endpoint})") if @debug
|
192
|
+
delete(endpoint)
|
193
|
+
end
|
194
|
+
|
195
|
+
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|