grafana 0.8.2 → 0.8.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -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 ??
@@ -6,7 +6,12 @@ module Grafana
6
6
  module User
7
7
 
8
8
  # Actual User
9
- # GET /api/user
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
- # PUT /api/user/password
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 = params.dig(:old_password)
23
- new_password = params.dig(: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, { oldPassword: old_password, newPassword: new_password, confirmNew: new_password }.to_json )
47
+ put( endpoint, payload.to_json )
31
48
  end
32
49
 
33
50
  # Switch user context for signed in user
34
- # POST /api/user/using/:organizationId
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( params.is_a?(String) )
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 org.nil? || org.dig('status').to_i != 200
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
- # GET /api/user/orgs
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
- # POST /api/user/stars/dashboard/:dashboardId
67
- def add_dashboard_star( dashboard )
68
-
69
- if( !dashboard.is_a?(String) && !dashboard.is_a?(Integer) )
70
- raise ArgumentError.new('dashboard must be an String (for an Dashboard name) or an Integer (for an Dashboard ID)')
71
- end
72
-
73
- dashboard_id = dashboard if(dashboard.is_a?(Integer))
74
-
75
- if(dashboard.is_a?(String))
76
- search = { query: dashboard }
77
- r = search_dashboards( search )
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 id can not be 0') if dashboard_id.zero?
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
- # DELETE /api/user/stars/dashboard/:dashboardId
91
- def remove_dashboard_star( dashboard )
92
-
93
- if( !dashboard.is_a?(String) && !dashboard.is_a?(Integer) )
94
- raise ArgumentError.new('dashboard must be an String (for an Dashboard name) or an Integer (for an Dashboard ID)')
95
- end
96
-
97
- dashboard_id = dashboard if(dashboard.is_a?(Integer))
98
-
99
- if(dashboard.is_a?(String))
100
-
101
- search = { query: dashboard }
102
- r = search_dashboards( search )
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
@@ -5,113 +5,156 @@ module Grafana
5
5
  #
6
6
  module Users
7
7
 
8
- # Search Users
9
- # GET /api/users
10
- def all_users
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
- # GET /api/users/:id
18
- def user_by_id(id)
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
- raise ArgumentError.new('id must be an Integer') unless( id.is_a?(Integer) )
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
- endpoint = format( '/api/users/%d', id )
23
- @logger.debug("Getting user by Id #{id} (GET #{endpoint})") if @debug
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
- # Get single user by Username(login) or Email
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/lookup?loginOrEmail=%s', URI.escape( name ) )
32
- @logger.debug("Get User by Name (GET #{endpoint})") if @debug
33
- get( endpoint )
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 = self.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 : false)
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 = params.dig(:user_name)
62
-
63
- raise ArgumentError.new('missing \'user_name\'') if( user_name.nil? )
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 = user_by_id(user_name) if(user_name.is_a?(Integer))
70
- usr = user_by_name(user_name) if(user_name.is_a?(String))
110
+ usr = user(user_name)
71
111
 
72
- if usr.nil? || usr.dig('status').to_i != 200
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 = usr.deep_string_keys
86
- params = params.deep_string_keys
127
+ usr = usr.deep_string_keys
128
+ payload = payload.deep_string_keys
87
129
 
88
- params = usr.merge(params)
130
+ payload = usr.merge(payload)
89
131
 
90
- put( endpoint, params.to_json )
132
+ put( endpoint, payload.to_json )
91
133
  end
92
134
 
93
135
  # Get Organisations for user
94
- # GET /api/users/:id/orgs
95
- def user_organizations(user)
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
- if( !user.is_a?(String) && !user.is_a?(Integer) )
98
- raise ArgumentError.new('user must be an String (for an Dashboard name) or an Integer (for an Dashboard ID)')
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 = user_by_id(user) if(user.is_a?(Integer))
102
- usr = user_by_name(user) if(user.is_a?(String))
150
+ usr = user(user_id)
103
151
 
104
- if usr.nil? || usr.dig('status').to_i != 200
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 #{user} (GET #{endpoint})") if @debug
157
+ @logger.debug("Getting organizations for User #{user_id} (GET #{endpoint})") if @debug
115
158
  get(endpoint)
116
159
  end
117
160
 
@@ -8,7 +8,7 @@ module Grafana
8
8
  # minor part of version
9
9
  MINOR = 8
10
10
  # tiny part of version
11
- TINY = 2
11
+ TINY = 5
12
12
  end
13
13
 
14
14
  # Current version of gem.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grafana
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bodo Schulz