grafana 0.8.2 → 0.8.5
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 +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