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
data/lib/grafana/tools.rb
CHANGED
@@ -27,19 +27,18 @@ module Grafana
|
|
27
27
|
def regenerate_template_ids( params )
|
28
28
|
|
29
29
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
30
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
30
31
|
|
31
32
|
rows = params.dig('dashboard','rows')
|
33
|
+
# name = validate( params, required: true, var: 'name', type: String )
|
32
34
|
|
33
35
|
unless( rows.nil? )
|
34
36
|
|
35
37
|
# counter = 1
|
36
38
|
id_counter = 10
|
37
39
|
rows.each_with_index do |r, _counter|
|
38
|
-
|
39
40
|
panel = r.dig('panels')
|
40
|
-
|
41
41
|
next if( panel.nil? )
|
42
|
-
|
43
42
|
panel.each do |p|
|
44
43
|
p['id'] = id_counter
|
45
44
|
id_counter = id_counter +=1 # id_counter+1 # id_counter +=1 ??
|
data/lib/grafana/user.rb
CHANGED
@@ -6,7 +6,12 @@ module Grafana
|
|
6
6
|
module User
|
7
7
|
|
8
8
|
# Actual User
|
9
|
-
#
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# current_user
|
12
|
+
#
|
13
|
+
# @return [Hash]
|
14
|
+
#
|
10
15
|
def current_user
|
11
16
|
endpoint = '/api/user'
|
12
17
|
@logger.debug("Getting user current user (GET #{endpoint})") if @debug
|
@@ -14,36 +19,51 @@ module Grafana
|
|
14
19
|
end
|
15
20
|
|
16
21
|
# Change Password
|
17
|
-
#
|
22
|
+
#
|
23
|
+
# @param [Hash] params
|
24
|
+
# @option params [String] old_password the old password
|
25
|
+
# @option params [String] new_password the new password
|
26
|
+
#
|
27
|
+
# @example
|
28
|
+
# update_current_user_password( old_password: 'foo', new_password: 'FooBar' )
|
29
|
+
#
|
30
|
+
# @return [Hash]
|
31
|
+
#
|
18
32
|
def update_current_user_password( params )
|
19
33
|
|
20
34
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
35
|
+
raise ArgumentError.new('missing \'params\'') if( params.size.zero? )
|
21
36
|
|
22
|
-
old_password
|
23
|
-
new_password
|
24
|
-
|
25
|
-
raise ArgumentError.new('missing old_password for update') if( old_password.nil? )
|
26
|
-
raise ArgumentError.new('missing new_password for update') if( new_password.nil? )
|
37
|
+
old_password = validate( params, required: true, var: 'old_password', type: String )
|
38
|
+
new_password = validate( params, required: true, var: 'new_password', type: String )
|
27
39
|
|
28
40
|
endpoint = '/api/user/password'
|
41
|
+
payload = {
|
42
|
+
oldPassword: old_password,
|
43
|
+
newPassword: new_password,
|
44
|
+
confirmNew: new_password
|
45
|
+
}
|
29
46
|
@logger.debug("Updating current user password (PUT #{endpoint})") if @debug
|
30
|
-
put( endpoint,
|
47
|
+
put( endpoint, payload.to_json )
|
31
48
|
end
|
32
49
|
|
33
50
|
# Switch user context for signed in user
|
34
|
-
#
|
51
|
+
#
|
52
|
+
# @param organization [String ] organization
|
53
|
+
#
|
54
|
+
# @example
|
55
|
+
# switch_current_user_organization( 'Main. Org' )
|
56
|
+
#
|
57
|
+
# @return [Hash]
|
58
|
+
#
|
35
59
|
def switch_current_user_organization( organization )
|
36
60
|
|
37
|
-
raise ArgumentError.new('organization must be an String') unless(
|
61
|
+
raise ArgumentError.new(format('wrong type. \'organization\' must be an String, given \'%s\'', organization.class.to_s)) unless( organization.is_a?(String) )
|
62
|
+
raise ArgumentError.new('missing \'organization\'') if( organization.size.zero? )
|
38
63
|
|
39
64
|
org = organization_by_name( organization )
|
40
65
|
|
41
|
-
if
|
42
|
-
return {
|
43
|
-
'status' => 404,
|
44
|
-
'message' => format('Organization \'%s\' not found', organization)
|
45
|
-
}
|
46
|
-
end
|
66
|
+
return { 'status' => 404, 'message' => format('Organization \'%s\' not found', organization) } if( org.nil? || org.dig('status').to_i != 200 )
|
47
67
|
|
48
68
|
org_id = org.dig('id')
|
49
69
|
|
@@ -54,52 +74,67 @@ module Grafana
|
|
54
74
|
end
|
55
75
|
|
56
76
|
# Organisations of the actual User
|
57
|
-
#
|
77
|
+
#
|
78
|
+
# @example
|
79
|
+
# current_user_oganizations
|
80
|
+
#
|
81
|
+
# @return [Hash]
|
82
|
+
#
|
58
83
|
def current_user_oganizations
|
59
|
-
|
60
84
|
endpoint = '/api/user/orgs'
|
61
85
|
@logger.debug("Getting current user organizations (GET #{endpoint})") if @debug
|
62
86
|
get(endpoint)
|
63
87
|
end
|
64
88
|
|
65
89
|
# Star a dashboard
|
66
|
-
#
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
90
|
+
#
|
91
|
+
# @param [Mixed] dashboard_id Dashboard Name (String) or Dashboard Id (Integer) for add a star
|
92
|
+
#
|
93
|
+
# @example
|
94
|
+
# add_dashboard_star( 1 )
|
95
|
+
# add_dashboard_star( 'QA Graphite Carbon Metrics' )
|
96
|
+
#
|
97
|
+
# @return [Hash]
|
98
|
+
#
|
99
|
+
def add_dashboard_star( dashboard_id )
|
100
|
+
|
101
|
+
raise ArgumentError.new(format('wrong type. user \'dashboard_id\' must be an String (for an Dashboard name) or an Integer (for an Dashboard Id), given \'%s\'', dashboard_id.class.to_s)) if( dashboard_id.is_a?(String) && dashboard_id.is_a?(Integer) )
|
102
|
+
raise ArgumentError.new('missing \'dashboard_id\'') if( dashboard_id.size.zero? )
|
103
|
+
|
104
|
+
dashboard_id = dashboard if(dashboard_id.is_a?(Integer))
|
105
|
+
|
106
|
+
if(dashboard_id.is_a?(String))
|
107
|
+
r = search_dashboards( query: dashboard_id )
|
78
108
|
message = r.dig('message')
|
79
109
|
dashboard_id = message.first.dig('id')
|
80
110
|
end
|
81
111
|
|
82
|
-
raise format('Dashboard
|
112
|
+
raise format('Dashboard Id can not be 0') if( dashboard_id.zero? )
|
83
113
|
|
84
114
|
endpoint = format( '/api/user/stars/dashboard/%d', dashboard_id )
|
85
115
|
@logger.debug("Adding star to dashboard id #{dashboard_id} (GET #{endpoint})") if @debug
|
86
|
-
post(endpoint, {}.to_json)
|
116
|
+
post( endpoint, {}.to_json )
|
87
117
|
end
|
88
118
|
|
89
119
|
# Unstar a dashboard
|
90
|
-
#
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
120
|
+
#
|
121
|
+
# @param [Mixed] dashboard_id Dashboard Name (String) or Dashboard Id (Integer) for delete a star
|
122
|
+
#
|
123
|
+
# @example
|
124
|
+
# remove_dashboard_star( 1 )
|
125
|
+
# remove_dashboard_star( 'QA Graphite Carbon Metrics' )
|
126
|
+
#
|
127
|
+
# @return [Hash]
|
128
|
+
#
|
129
|
+
def remove_dashboard_star( dashboard_id )
|
130
|
+
|
131
|
+
raise ArgumentError.new(format('wrong type. user \'dashboard_id\' must be an String (for an Dashboard name) or an Integer (for an Dashboard Id), given \'%s\'', dashboard_id.class.to_s)) if( dashboard_id.is_a?(String) && dashboard_id.is_a?(Integer) )
|
132
|
+
raise ArgumentError.new('missing \'dashboard_id\'') if( dashboard_id.size.zero? )
|
133
|
+
|
134
|
+
dashboard_id = dashboard( dashboard_id ) if(dashboard_id.is_a?(Integer))
|
135
|
+
|
136
|
+
if(dashboard_id.is_a?(String))
|
137
|
+
r = search_dashboards( query: dashboard_id )
|
103
138
|
message = r.dig('message')
|
104
139
|
dashboard_id = message.first.dig('id')
|
105
140
|
end
|
data/lib/grafana/users.rb
CHANGED
@@ -5,113 +5,156 @@ module Grafana
|
|
5
5
|
#
|
6
6
|
module Users
|
7
7
|
|
8
|
-
#
|
9
|
-
#
|
10
|
-
|
8
|
+
# All Users
|
9
|
+
#
|
10
|
+
# @example
|
11
|
+
# all_users
|
12
|
+
#
|
13
|
+
# @return [Hash]
|
14
|
+
#
|
15
|
+
def users
|
11
16
|
endpoint = '/api/users'
|
12
17
|
@logger.debug("Getting all users (GET #{endpoint})") if @debug
|
13
18
|
get(endpoint)
|
14
19
|
end
|
15
20
|
|
16
|
-
# Get single user by Id
|
17
|
-
#
|
18
|
-
|
21
|
+
# Get a single user by Id or Name
|
22
|
+
#
|
23
|
+
# @param [Mixed] user_id Username (String) or Userid (Integer)
|
24
|
+
#
|
25
|
+
# @example
|
26
|
+
# user( 1 )
|
27
|
+
# user( 'foo' )
|
28
|
+
#
|
29
|
+
# @return [Hash]
|
30
|
+
#
|
31
|
+
def user( user_id )
|
32
|
+
|
33
|
+
raise ArgumentError.new(format('wrong type. user \'user_id\' must be an String (for an Datasource name) or an Integer (for an Datasource Id), given \'%s\'', user_id.class.to_s)) if( user_id.is_a?(String) && user_id.is_a?(Integer) )
|
34
|
+
raise ArgumentError.new('missing \'user_id\'') if( user_id.size.zero? )
|
19
35
|
|
20
|
-
|
36
|
+
if(user_id.is_a?(String))
|
37
|
+
user_map = {}
|
38
|
+
users.dig('message').each do |d|
|
39
|
+
usr_id = d.dig('id').to_i
|
40
|
+
user_map[usr_id] = d
|
41
|
+
end
|
21
42
|
|
22
|
-
|
23
|
-
|
24
|
-
get(endpoint)
|
25
|
-
end
|
43
|
+
user_id = user_map.select { |_k,v| v['login'] == user_id || v['email'] == user_id || v['name'] == user_id }.keys.first
|
44
|
+
end
|
26
45
|
|
27
|
-
|
28
|
-
# GET /api/users/lookup?loginOrEmail=user@mygraf.com
|
29
|
-
def user_by_name( name )
|
46
|
+
return { 'status' => 404, 'message' => format( 'No User \'%s\' found', user_id) } if( user_id.nil? )
|
30
47
|
|
31
|
-
endpoint = format( '/api/users
|
32
|
-
|
33
|
-
|
48
|
+
endpoint = format( '/api/users/%s', user_id )
|
49
|
+
|
50
|
+
@logger.debug("Getting user by Id #{user_id} (GET #{endpoint})") if @debug
|
51
|
+
data = get(endpoint)
|
52
|
+
data['id'] = user_id
|
53
|
+
data
|
34
54
|
end
|
35
55
|
|
56
|
+
# search users with parameters
|
57
|
+
#
|
58
|
+
# @example
|
59
|
+
# search_for_users_by( isAdmin: true )
|
60
|
+
# search_for_users_by( login: 'foo' )
|
36
61
|
#
|
62
|
+
# @return [Array of Hashes] or false
|
37
63
|
#
|
38
64
|
def search_for_users_by( params )
|
39
65
|
|
40
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? )
|
41
68
|
|
42
|
-
all_users =
|
69
|
+
all_users = users
|
43
70
|
key, value = params.first
|
44
71
|
|
45
72
|
logger.debug("Searching for users matching '#{key}' = '#{value}'") if @debug
|
46
73
|
users = []
|
47
|
-
|
48
74
|
all_users.dig('message').each do |u|
|
49
75
|
users.push(u) if u.select { |_k,v| v == value }.count >= 1
|
50
76
|
end
|
51
77
|
|
52
|
-
(users.length >= 1 ? users :
|
78
|
+
(users.length >= 1 ? users : nil)
|
53
79
|
end
|
54
80
|
|
55
81
|
# User Update
|
82
|
+
#
|
83
|
+
# @param [Hash] params
|
84
|
+
# @option params [String] email
|
85
|
+
# @option params [String] user_name
|
86
|
+
# @option params [String] login_name
|
87
|
+
# @option params [String] theme
|
88
|
+
#
|
89
|
+
# @example
|
90
|
+
# params = {
|
91
|
+
# email:'user@mygraf.com',
|
92
|
+
# user_name:'User2',
|
93
|
+
# login_name:'user',
|
94
|
+
# theme: 'light'
|
95
|
+
# }
|
96
|
+
# update_user( params )
|
97
|
+
#
|
98
|
+
# @return [Hash]
|
99
|
+
#
|
56
100
|
# PUT /api/users/:id
|
57
|
-
def update_user( params
|
101
|
+
def update_user( params )
|
58
102
|
|
59
103
|
raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
|
60
104
|
|
61
|
-
user_name
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
if( !user_name.is_a?(String) && !user_name.is_a?(Integer) )
|
66
|
-
raise ArgumentError.new('user_name must be an String (for an Username) or an Integer (for an User Id)')
|
67
|
-
end
|
105
|
+
user_name = validate( params, required: true, var: 'user_name', type: String )
|
106
|
+
email = validate( params, required: true, var: 'email', type: String )
|
107
|
+
login_name = validate( params, required: false, var: 'login_name', type: String ) || user_name
|
108
|
+
theme = validate( params, required: false, var: 'theme', type: String )
|
68
109
|
|
69
|
-
usr =
|
70
|
-
usr = user_by_name(user_name) if(user_name.is_a?(String))
|
110
|
+
usr = user(user_name)
|
71
111
|
|
72
|
-
if
|
73
|
-
return {
|
74
|
-
'status' => 404,
|
75
|
-
'message' => format('User \'%s\' not found', user_name)
|
76
|
-
}
|
77
|
-
end
|
112
|
+
return { 'status' => 404, 'message' => format('User \'%s\' not found', user_name) } if( usr.nil? || usr.dig('status').to_i != 200 )
|
78
113
|
|
79
114
|
user_id = usr.dig('id')
|
80
115
|
|
81
116
|
endpoint = format( '/api/users/%d', user_id )
|
117
|
+
payload = {
|
118
|
+
email: email,
|
119
|
+
name: user_name,
|
120
|
+
login: login_name,
|
121
|
+
theme: theme
|
122
|
+
}
|
123
|
+
payload.reject!{ |_k, v| v.nil? }
|
82
124
|
|
83
125
|
@logger.debug("Updating user with Id #{user_id}") if @debug
|
84
126
|
|
85
|
-
usr
|
86
|
-
|
127
|
+
usr = usr.deep_string_keys
|
128
|
+
payload = payload.deep_string_keys
|
87
129
|
|
88
|
-
|
130
|
+
payload = usr.merge(payload)
|
89
131
|
|
90
|
-
put( endpoint,
|
132
|
+
put( endpoint, payload.to_json )
|
91
133
|
end
|
92
134
|
|
93
135
|
# Get Organisations for user
|
94
|
-
#
|
95
|
-
|
136
|
+
#
|
137
|
+
# @param [Mixed] user_id Username (String) or Userid (Integer)
|
138
|
+
#
|
139
|
+
# @example
|
140
|
+
# user_organizations( 1 )
|
141
|
+
# user_organizations( 'foo' )
|
142
|
+
#
|
143
|
+
# @return [Hash]
|
144
|
+
#
|
145
|
+
def user_organizations( user_id )
|
96
146
|
|
97
|
-
|
98
|
-
|
99
|
-
end
|
147
|
+
raise ArgumentError.new(format('wrong type. user \'user_id\' must be an String (for an Username) or an Integer (for an Userid), given \'%s\'', user_id.class.to_s)) if( user_id.is_a?(String) && user_id.is_a?(Integer) )
|
148
|
+
raise ArgumentError.new('missing \'user_id\'') if( user_id.size.zero? )
|
100
149
|
|
101
|
-
usr =
|
102
|
-
usr = user_by_name(user) if(user.is_a?(String))
|
150
|
+
usr = user(user_id)
|
103
151
|
|
104
|
-
if
|
105
|
-
return {
|
106
|
-
'status' => 404,
|
107
|
-
'message' => format('User \'%s\' not found', user)
|
108
|
-
}
|
109
|
-
end
|
152
|
+
return { 'status' => 404, 'message' => format('User \'%s\' not found', user_id) } if( usr.nil? || usr.dig('status').to_i != 200 )
|
110
153
|
|
111
154
|
user_id = usr.dig('id')
|
112
155
|
|
113
156
|
endpoint = format('/api/users/%d/orgs', user_id )
|
114
|
-
@logger.debug("Getting organizations for User #{
|
157
|
+
@logger.debug("Getting organizations for User #{user_id} (GET #{endpoint})") if @debug
|
115
158
|
get(endpoint)
|
116
159
|
end
|
117
160
|
|
data/lib/grafana/version.rb
CHANGED