grafana 0.8.2 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +8 -3
- data/lib/grafana/admin.rb +39 -65
- data/lib/grafana/alerts.rb +334 -14
- data/lib/grafana/annotations.rb +284 -9
- data/lib/grafana/client.rb +38 -1
- data/lib/grafana/dashboard.rb +182 -39
- data/lib/grafana/dashboard_permissions.rb +132 -0
- data/lib/grafana/dashboard_versions.rb +101 -5
- data/lib/grafana/datasource.rb +93 -49
- 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/login.rb +41 -35
- data/lib/grafana/network.rb +128 -91
- data/lib/grafana/organization.rb +65 -34
- data/lib/grafana/organizations.rb +119 -175
- data/lib/grafana/playlist.rb +599 -0
- data/lib/grafana/preferences.rb +122 -0
- data/lib/grafana/tags.rb +19 -8
- data/lib/grafana/teams.rb +364 -0
- data/lib/grafana/tools.rb +44 -12
- data/lib/grafana/user.rb +78 -39
- data/lib/grafana/users.rb +104 -53
- data/lib/grafana/validator.rb +47 -2
- data/lib/grafana/version.rb +3 -3
- metadata +13 -38
- 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 -771
- data/doc/top-level-namespace.html +0 -112
@@ -0,0 +1,132 @@
|
|
1
|
+
|
2
|
+
module Grafana
|
3
|
+
|
4
|
+
# http://docs.grafana.org/http_api/dashboard_permissions/#dashboard-permissions-api
|
5
|
+
#
|
6
|
+
# This API can be used to update/get the permissions for a dashboard.
|
7
|
+
# Permissions with dashboardId=-1 are the default permissions for users with the Viewer and Editor roles.
|
8
|
+
# Permissions can be set for a user, a team or a role (Viewer or Editor).
|
9
|
+
# Permissions cannot be set for Admins - they always have access to everything.
|
10
|
+
#
|
11
|
+
# The permission levels for the permission field:
|
12
|
+
#
|
13
|
+
# 1 = View
|
14
|
+
# 2 = Edit
|
15
|
+
# 4 = Admin
|
16
|
+
#
|
17
|
+
module DashboardPermissions
|
18
|
+
|
19
|
+
# http://docs.grafana.org/http_api/dashboard_permissions/#get-permissions-for-a-dashboard
|
20
|
+
#
|
21
|
+
# GET /api/dashboards/id/:dashboardId/permissions
|
22
|
+
#
|
23
|
+
# Gets all existing permissions for the dashboard with the given dashboardId.
|
24
|
+
#
|
25
|
+
def dashboard_permissions(uid)
|
26
|
+
|
27
|
+
if( uid.is_a?(String) && uid.is_a?(Integer) )
|
28
|
+
raise ArgumentError.new(format('wrong type. dashboard \'uid\' must be an String (for an title name) or an Integer (for an Datasource Id), given \'%s\'', uid.class.to_s))
|
29
|
+
end
|
30
|
+
raise ArgumentError.new('missing \'uid\'') if( uid.size.zero? )
|
31
|
+
|
32
|
+
endpoint = format( '/api/dashboards/id/%s/permissions', uid )
|
33
|
+
@logger.debug( "Attempting to get dashboard permissions (GET #{endpoint})" ) if @debug
|
34
|
+
|
35
|
+
r = get( endpoint )
|
36
|
+
r['message'] = format('dashboard \'%s\' not found', uid) if(r.dig('status') == 404)
|
37
|
+
r
|
38
|
+
end
|
39
|
+
|
40
|
+
# http://docs.grafana.org/http_api/dashboard_permissions/#update-permissions-for-a-dashboard
|
41
|
+
#
|
42
|
+
# POST /api/dashboards/id/:dashboardId/permissions
|
43
|
+
#
|
44
|
+
# Updates permissions for a dashboard.
|
45
|
+
# This operation will remove existing permissions if they're not included in the request.
|
46
|
+
#
|
47
|
+
#
|
48
|
+
def update_dashboad_permissions(params)
|
49
|
+
|
50
|
+
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
51
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
52
|
+
|
53
|
+
v, mv = version.values
|
54
|
+
return { 'status' => 404, 'message' => format( 'folder has been supported in Grafana since version 5. you use version %s', v) } if(mv < 5)
|
55
|
+
|
56
|
+
dashboard_id = validate( params, required: true, var: 'dashboard_id', type: Integer )
|
57
|
+
permissions = validate( params, required: true, var: 'permissions' , type: Hash )
|
58
|
+
|
59
|
+
return { 'status' => 404, 'message' => 'no permissions given' } if( permissions.size.zero? )
|
60
|
+
|
61
|
+
valid_roles = %w[View Edit Admin]
|
62
|
+
|
63
|
+
c_team = permissions.dig('team')
|
64
|
+
c_user = permissions.dig('user')
|
65
|
+
team = []
|
66
|
+
user = []
|
67
|
+
|
68
|
+
unless(c_team.nil?)
|
69
|
+
check_keys = []
|
70
|
+
|
71
|
+
c_team.uniq.each do |x|
|
72
|
+
k = x.keys.first
|
73
|
+
v = x.values.first
|
74
|
+
r = validate_hash( v, valid_roles )
|
75
|
+
|
76
|
+
f_team = team(k)
|
77
|
+
team_id = f_team.dig('id')
|
78
|
+
|
79
|
+
next unless(( f_team.dig('status') == 200) && !check_keys.include?(team_id) && r == true )
|
80
|
+
|
81
|
+
check_keys << team_id
|
82
|
+
|
83
|
+
role_id = valid_roles.index(v)
|
84
|
+
role_id += 1
|
85
|
+
role_id += 1 if(v == 'Admin')
|
86
|
+
|
87
|
+
team << {
|
88
|
+
teamId: team_id,
|
89
|
+
permission: role_id
|
90
|
+
}
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
unless(c_user.nil?)
|
95
|
+
check_keys = []
|
96
|
+
|
97
|
+
c_user.uniq.each do |x|
|
98
|
+
k = x.keys.first
|
99
|
+
v = x.values.first
|
100
|
+
r = validate_hash( v, valid_roles )
|
101
|
+
|
102
|
+
f_user = user(k)
|
103
|
+
user_id = f_user.dig('id')
|
104
|
+
|
105
|
+
next unless(( f_user.dig('status') == 200) && !check_keys.include?(user_id) && r == true )
|
106
|
+
|
107
|
+
check_keys << user_id
|
108
|
+
|
109
|
+
role_id = valid_roles.index(v)
|
110
|
+
role_id += 1
|
111
|
+
role_id += 1 if(v == 'Admin')
|
112
|
+
|
113
|
+
user << {
|
114
|
+
userId: user_id,
|
115
|
+
permission: role_id
|
116
|
+
}
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
payload = {
|
121
|
+
items: team + user
|
122
|
+
}
|
123
|
+
payload.reject!{ |_, y| y.nil? }
|
124
|
+
|
125
|
+
|
126
|
+
endpoint = format('/api/dashboards/id/%s/permissions', dashboard_id)
|
127
|
+
post(endpoint, payload.to_json)
|
128
|
+
end
|
129
|
+
|
130
|
+
end
|
131
|
+
|
132
|
+
end
|
@@ -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
@@ -20,12 +20,7 @@ module Grafana
|
|
20
20
|
|
21
21
|
datasources = get( endpoint )
|
22
22
|
|
23
|
-
if
|
24
|
-
return {
|
25
|
-
'status' => 404,
|
26
|
-
'message' => 'No Datasources found'
|
27
|
-
}
|
28
|
-
end
|
23
|
+
return { 'status' => 404, 'message' => 'No Datasources found' } if( datasources.nil? || datasources == false || datasources.dig('status').to_i != 200 )
|
29
24
|
|
30
25
|
datasources = datasources.dig('message')
|
31
26
|
|
@@ -39,6 +34,8 @@ module Grafana
|
|
39
34
|
|
40
35
|
# Get a single datasources by Id or Name
|
41
36
|
#
|
37
|
+
# @param [Mixed] datasource_id Datasource Name (String) or Datasource Id (Integer)
|
38
|
+
#
|
42
39
|
# @example
|
43
40
|
# datasource( 1 )
|
44
41
|
# datasource( 'foo' )
|
@@ -47,7 +44,9 @@ module Grafana
|
|
47
44
|
#
|
48
45
|
def datasource( datasource_id )
|
49
46
|
|
50
|
-
|
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
|
51
50
|
raise ArgumentError.new('missing \'datasource_id\'') if( datasource_id.size.zero? )
|
52
51
|
|
53
52
|
if(datasource_id.is_a?(String))
|
@@ -55,12 +54,7 @@ module Grafana
|
|
55
54
|
datasource_id = data.keys.first if( data )
|
56
55
|
end
|
57
56
|
|
58
|
-
if( datasource_id.nil? )
|
59
|
-
return {
|
60
|
-
'status' => 404,
|
61
|
-
'message' => format( 'No Datasource \'%s\' found', datasource_id)
|
62
|
-
}
|
63
|
-
end
|
57
|
+
return { 'status' => 404, 'message' => format( 'No Datasource \'%s\' found', datasource_id) } if( datasource_id.nil? )
|
64
58
|
|
65
59
|
raise format('DataSource Id can not be 0') if( datasource_id.zero? )
|
66
60
|
|
@@ -82,14 +76,29 @@ module Grafana
|
|
82
76
|
# merge an current existing datasource configuration with the new values
|
83
77
|
#
|
84
78
|
# @param [Hash] params
|
85
|
-
# @option params [
|
86
|
-
# @option params [Mixed]
|
79
|
+
# @option params [Mixed] name Name or Id of the current existing Datasource (required)
|
80
|
+
# @option params [Mixed] organisation Name or Id of an existing Organisation
|
81
|
+
# @option params [String] type Datasource Type - (required) (grafana graphite cloudwatch elasticsearch prometheus influxdb mysql opentsdb postgres)
|
82
|
+
# @option params [String] new_name New Datasource Name
|
83
|
+
# @option params [String] database Datasource Database
|
84
|
+
# @option params [String] access (proxy) Acess Type
|
85
|
+
# @option params [Boolean] default (false)
|
86
|
+
# @option params [String] user
|
87
|
+
# @option params [String] password
|
88
|
+
# @option params [String] url Datasource URL
|
89
|
+
# @option params [Hash] json_data
|
90
|
+
# @option params [String] basic_user
|
91
|
+
# @option params [String] basic_password
|
87
92
|
#
|
88
93
|
# @example
|
89
|
-
#
|
90
|
-
#
|
91
|
-
#
|
92
|
-
#
|
94
|
+
# params = {
|
95
|
+
# name: 'graphite',
|
96
|
+
# new_name: 'influx',
|
97
|
+
# organisation: 'Main Org.',
|
98
|
+
# type: 'influxdb',
|
99
|
+
# url: 'http://localhost:8090'
|
100
|
+
# }
|
101
|
+
# update_datasource( params )
|
93
102
|
#
|
94
103
|
# @return [Hash]
|
95
104
|
#
|
@@ -98,24 +107,76 @@ module Grafana
|
|
98
107
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
99
108
|
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
100
109
|
|
101
|
-
|
102
|
-
|
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
|
130
|
+
if( organisation )
|
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
|
103
134
|
|
104
|
-
|
135
|
+
org = organization( organisation )
|
136
|
+
org_id = org.dig('id')
|
105
137
|
|
106
|
-
|
138
|
+
return { 'status' => 404, 'message' => format('Organization \'%s\' not found', organization) } if( org.nil? || org.dig('status').to_i != 200 )
|
139
|
+
end
|
107
140
|
|
141
|
+
existing_ds = datasource(name)
|
108
142
|
existing_ds.reject! { |x| x == 'status' }
|
109
143
|
existing_ds = existing_ds.deep_string_keys
|
110
|
-
|
111
144
|
datasource_id = existing_ds.dig('id')
|
112
145
|
|
146
|
+
return { 'status' => 404, 'message' => format('No Datasource \'%s\' found', name) } if( datasource_id.nil? )
|
147
|
+
|
148
|
+
raise format('Data Source Id can not be 0') if( datasource_id.zero? )
|
149
|
+
|
150
|
+
unless( type.nil? )
|
151
|
+
valid_types = %w[grafana graphite cloudwatch elasticsearch prometheus influxdb mysql opentsdb postgres]
|
152
|
+
raise ArgumentError.new(format('wrong datasource type. only %s allowed, given \%s\'', valid_types.join(', '), type)) if( valid_types.include?(type.downcase) == false )
|
153
|
+
end
|
154
|
+
|
155
|
+
data = {
|
156
|
+
id: datasource_id,
|
157
|
+
orgId: org_id,
|
158
|
+
name: new_name,
|
159
|
+
type: type,
|
160
|
+
access: access,
|
161
|
+
url: url,
|
162
|
+
password: password,
|
163
|
+
user: user,
|
164
|
+
database: database,
|
165
|
+
basicAuth: basic_auth,
|
166
|
+
basicAuthUser: ba_user,
|
167
|
+
basicAuthPassword: ba_user,
|
168
|
+
isDefault: default,
|
169
|
+
jsonData: json_data
|
170
|
+
}
|
171
|
+
data.reject!{ |_k, v| v.nil? }
|
172
|
+
|
113
173
|
payload = data.deep_string_keys
|
114
174
|
payload = existing_ds.merge(payload).deep_symbolize_keys
|
115
175
|
|
116
176
|
endpoint = format('/api/datasources/%d', datasource_id )
|
177
|
+
|
117
178
|
@logger.debug("Updating data source Id #{datasource_id} (GET #{endpoint})") if @debug
|
118
|
-
|
179
|
+
# logger.debug(payload.to_json) if(@debug)
|
119
180
|
|
120
181
|
put( endpoint, payload.to_json )
|
121
182
|
end
|
@@ -125,11 +186,8 @@ module Grafana
|
|
125
186
|
# @param [Hash] params
|
126
187
|
# @option params [String] type Datasource Type - (required) (grafana graphite cloudwatch elasticsearch prometheus influxdb mysql opentsdb postgres)
|
127
188
|
# @option params [String] name Datasource Name - (required)
|
128
|
-
# @option params [String] database Datasource Database - (required)
|
129
189
|
# @option params [String] access (proxy) Acess Type - (required) (proxy or direct)
|
130
190
|
# @option params [Boolean] default (false)
|
131
|
-
# @option params [String] user
|
132
|
-
# @option params [String] password
|
133
191
|
# @option params [String] url Datasource URL - (required)
|
134
192
|
# @option params [Hash] json_data
|
135
193
|
# @option params [Hash] json_secure
|
@@ -140,7 +198,6 @@ module Grafana
|
|
140
198
|
# params = {
|
141
199
|
# name: 'graphite',
|
142
200
|
# type: 'graphite',
|
143
|
-
# database: 'graphite',
|
144
201
|
# url: 'http://localhost:8080'
|
145
202
|
# }
|
146
203
|
# create_datasource(params)
|
@@ -148,7 +205,6 @@ module Grafana
|
|
148
205
|
# params = {
|
149
206
|
# name: 'graphite',
|
150
207
|
# type: 'graphite',
|
151
|
-
# database: 'graphite',
|
152
208
|
# default: true,
|
153
209
|
# url: 'http://localhost:8080',
|
154
210
|
# json_data: { graphiteVersion: '1.1' }
|
@@ -177,14 +233,11 @@ module Grafana
|
|
177
233
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
178
234
|
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
179
235
|
|
180
|
-
type = validate( params, required: true, var: 'type', type: String )
|
181
|
-
name = validate( params, required: true, var: 'name', type: String )
|
182
|
-
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 )
|
183
238
|
access = validate( params, required: false, var: 'access', type: String ) || 'proxy'
|
184
239
|
default = validate( params, required: false, var: 'default', type: Boolean ) || false
|
185
|
-
|
186
|
-
password = validate( params, required: false, var: 'password', type: String )
|
187
|
-
url = validate( params, required: true, var: 'url', type: String )
|
240
|
+
url = validate( params, required: true , var: 'url', type: String )
|
188
241
|
json_data = validate( params, required: false, var: 'json_data', type: Hash )
|
189
242
|
json_secure = validate( params, required: false, var: 'json_secure', type: Hash )
|
190
243
|
ba_user = validate( params, required: false, var: 'basic_user', type: String )
|
@@ -209,14 +262,8 @@ module Grafana
|
|
209
262
|
jsonData: json_data,
|
210
263
|
secureJsonData: json_secure
|
211
264
|
}
|
212
|
-
|
213
265
|
payload.reject!{ |_k, v| v.nil? }
|
214
266
|
|
215
|
-
if( @debug )
|
216
|
-
logger.debug("Creating data source: #{name} (database: #{database})")
|
217
|
-
logger.debug( payload.to_json )
|
218
|
-
end
|
219
|
-
|
220
267
|
endpoint = '/api/datasources'
|
221
268
|
post(endpoint, payload.to_json)
|
222
269
|
end
|
@@ -233,7 +280,9 @@ module Grafana
|
|
233
280
|
#
|
234
281
|
def delete_datasource( datasource_id )
|
235
282
|
|
236
|
-
|
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
|
237
286
|
raise ArgumentError.new('missing \'datasource_id\'') if( datasource_id.size.zero? )
|
238
287
|
|
239
288
|
if(datasource_id.is_a?(String))
|
@@ -241,12 +290,7 @@ module Grafana
|
|
241
290
|
datasource_id = data.keys.first if( data )
|
242
291
|
end
|
243
292
|
|
244
|
-
if( datasource_id.nil? )
|
245
|
-
return {
|
246
|
-
'status' => 404,
|
247
|
-
'message' => format( 'No Datasource \'%s\' found', datasource_id)
|
248
|
-
}
|
249
|
-
end
|
293
|
+
return { 'status' => 404, 'message' => format( 'No Datasource \'%s\' found', datasource_id) } if( datasource_id.nil? )
|
250
294
|
|
251
295
|
raise format('Data Source Id can not be 0') if( datasource_id.zero? )
|
252
296
|
|