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.
Files changed (49) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +8 -3
  3. data/lib/_logging.rb_ +55 -0
  4. data/lib/grafana.rb +1 -1
  5. data/lib/grafana/admin.rb +2 -1
  6. data/lib/grafana/alerts.rb +338 -14
  7. data/lib/grafana/annotations.rb +284 -9
  8. data/lib/grafana/auth.rb +150 -0
  9. data/lib/grafana/client.rb +81 -5
  10. data/lib/grafana/dashboard.rb +99 -7
  11. data/lib/grafana/dashboard_permissions.rb +132 -0
  12. data/lib/grafana/dashboard_versions.rb +101 -5
  13. data/lib/grafana/datasource.rb +34 -38
  14. data/lib/grafana/folder.rb +198 -0
  15. data/lib/grafana/folder_and_dashboard_search.rb +57 -0
  16. data/lib/grafana/folder_permissions.rb +155 -0
  17. data/lib/grafana/logging.rb +55 -0
  18. data/lib/grafana/login.rb +93 -49
  19. data/lib/grafana/network.rb +130 -101
  20. data/lib/grafana/organization.rb +2 -1
  21. data/lib/grafana/organizations.rb +15 -6
  22. data/lib/grafana/playlist.rb +594 -0
  23. data/lib/grafana/preferences.rb +122 -0
  24. data/lib/grafana/tags.rb +16 -0
  25. data/lib/grafana/teams.rb +364 -0
  26. data/lib/grafana/tools.rb +42 -9
  27. data/lib/grafana/user.rb +6 -2
  28. data/lib/grafana/users.rb +19 -11
  29. data/lib/grafana/validator.rb +47 -2
  30. data/lib/grafana/version.rb +3 -3
  31. metadata +16 -39
  32. data/doc/Array.html +0 -200
  33. data/doc/Boolean.html +0 -122
  34. data/doc/FalseClass.html +0 -132
  35. data/doc/Grafana.html +0 -172
  36. data/doc/Hash.html +0 -212
  37. data/doc/Logging.html +0 -326
  38. data/doc/Object.html +0 -286
  39. data/doc/Time.html +0 -200
  40. data/doc/TrueClass.html +0 -132
  41. data/doc/_index.html +0 -380
  42. data/doc/class_list.html +0 -51
  43. data/doc/file.README.html +0 -117
  44. data/doc/file_list.html +0 -56
  45. data/doc/frames.html +0 -17
  46. data/doc/index.html +0 -117
  47. data/doc/method_list.html +0 -747
  48. data/doc/top-level-namespace.html +0 -112
  49. data/lib/logging.rb +0 -35
data/lib/grafana/tools.rb CHANGED
@@ -3,27 +3,52 @@ module Grafana
3
3
 
4
4
  module Tools
5
5
 
6
+ # return a slugged string for Grafana Dashboards
7
+ #
8
+ # @param text [String] text
9
+ #
10
+ # @example
11
+ # slug( 'test dashboard' )
12
+ #
13
+ # @retunr [String]
14
+ #
6
15
  def slug( text )
7
16
 
8
17
  raise ArgumentError.new(format('wrong type. \'text\' must be an String, given \'%s\'', text.class.to_s)) unless( text.is_a?(String) )
9
18
 
10
19
  begin
11
- if( text =~ /\s/ && text =~ /-/ )
20
+ if( text =~ /\s/ && text =~ /-/ )
12
21
  # if( text =~ /-/ )
13
22
  text = text.gsub( /\s+/, '' )
14
23
  else
15
24
  text = text.gsub( /\s+/, '-' )
16
25
  # end
17
- end
26
+ end
18
27
 
19
- rescue => e
20
- puts e
28
+ rescue => error
29
+ puts error
21
30
  end
22
31
 
23
32
  text.downcase
24
33
  end
25
34
 
26
-
35
+ # regenerate Row Ids in the Dashboard
36
+ # usefull for an automatic generated Dashboard
37
+ #
38
+ # @param params [Hash] params
39
+ #
40
+ # @example
41
+ # params = {
42
+ # dashboard: {
43
+ # rows: [
44
+ #
45
+ # ]
46
+ # }
47
+ # }
48
+ # regenerate_template_ids( params )
49
+ #
50
+ # @return [Hash]
51
+ #
27
52
  def regenerate_template_ids( params )
28
53
 
29
54
  raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
@@ -49,17 +74,25 @@ module Grafana
49
74
  JSON.generate( params )
50
75
  end
51
76
 
52
-
77
+ # check, it an String a valid Json
78
+ #
79
+ # @param json [String] json
80
+ #
81
+ # @example
82
+ # valid_json?( json )
83
+ #
84
+ # @return [Boolean]
85
+ #
53
86
  def valid_json?( json )
54
87
  begin
55
88
  JSON.parse( json )
56
89
  return true
57
- rescue JSON::ParserError => e
58
- @logger.error("json parse error: #{e}") if @debug
90
+ rescue JSON::ParserError => error
91
+ @logger.error("json parse error: #{error}") if @debug
59
92
  return false
60
93
  end
61
94
  end
62
95
 
63
- end
64
96
 
97
+ end
65
98
  end
data/lib/grafana/user.rb CHANGED
@@ -98,7 +98,9 @@ module Grafana
98
98
  #
99
99
  def add_dashboard_star( dashboard_id )
100
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) )
101
+ if( dashboard_id.is_a?(String) && dashboard_id.is_a?(Integer) )
102
+ raise ArgumentError.new(format('wrong type. \'dashboard_id\' must be an String (for an Dashboard name) or an Integer (for an Dashboard Id), given \'%s\'', dashboard_id.class.to_s))
103
+ end
102
104
  raise ArgumentError.new('missing \'dashboard_id\'') if( dashboard_id.size.zero? )
103
105
 
104
106
  dashboard_id = dashboard if(dashboard_id.is_a?(Integer))
@@ -128,7 +130,9 @@ module Grafana
128
130
  #
129
131
  def remove_dashboard_star( dashboard_id )
130
132
 
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) )
133
+ if( dashboard_id.is_a?(String) && dashboard_id.is_a?(Integer) )
134
+ raise ArgumentError.new(format('wrong type. \'dashboard_id\' must be an String (for an Dashboard name) or an Integer (for an Dashboard Id), given \'%s\'', dashboard_id.class.to_s))
135
+ end
132
136
  raise ArgumentError.new('missing \'dashboard_id\'') if( dashboard_id.size.zero? )
133
137
 
134
138
  dashboard_id = dashboard( dashboard_id ) if(dashboard_id.is_a?(Integer))
data/lib/grafana/users.rb CHANGED
@@ -30,17 +30,23 @@ module Grafana
30
30
  #
31
31
  def user( user_id )
32
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) )
33
+ if( user_id.is_a?(String) && user_id.is_a?(Integer) )
34
+ raise ArgumentError.new(format('wrong type. user \'user_id\' must be an String (for an User name) or an Integer (for an User Id), given \'%s\'', user_id.class.to_s))
35
+ end
34
36
  raise ArgumentError.new('missing \'user_id\'') if( user_id.size.zero? )
35
37
 
36
38
  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
39
+ usrs = users
40
+ usrs = JSON.parse(usrs) if(usrs.is_a?(String))
41
+
42
+ status = usrs.dig('status')
43
+ return usrs if( status != 200 )
44
+
45
+ u = usrs.dig('message').detect { |v| v['login'] == user_id || v['email'] == user_id || v['name'] == user_id }
42
46
 
43
- user_id = user_map.select { |_k,v| v['login'] == user_id || v['email'] == user_id || v['name'] == user_id }.keys.first
47
+ return { 'status' => 404, 'message' => format( 'No User \'%s\' found', user_id) } if( u.nil? )
48
+
49
+ user_id = u.dig('id') unless(u.nil?)
44
50
  end
45
51
 
46
52
  return { 'status' => 404, 'message' => format( 'No User \'%s\' found', user_id) } if( user_id.nil? )
@@ -102,10 +108,10 @@ module Grafana
102
108
 
103
109
  raise ArgumentError.new(format('wrong type. \'params\' must be an Hash, given \'%s\'', params.class.to_s)) unless( params.is_a?(Hash) )
104
110
 
105
- user_name = validate( params, required: true, var: 'user_name', type: String )
106
- email = validate( params, required: true, var: 'email', type: String )
111
+ user_name = validate( params, required: true , var: 'user_name' , type: String )
112
+ email = validate( params, required: true , var: 'email' , type: String )
107
113
  login_name = validate( params, required: false, var: 'login_name', type: String ) || user_name
108
- theme = validate( params, required: false, var: 'theme', type: String )
114
+ theme = validate( params, required: false, var: 'theme' , type: String )
109
115
 
110
116
  usr = user(user_name)
111
117
 
@@ -144,7 +150,9 @@ module Grafana
144
150
  #
145
151
  def user_organizations( user_id )
146
152
 
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) )
153
+ if( user_id.is_a?(String) && user_id.is_a?(Integer) )
154
+ 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))
155
+ end
148
156
  raise ArgumentError.new('missing \'user_id\'') if( user_id.size.zero? )
149
157
 
150
158
  usr = user(user_id)
@@ -4,7 +4,20 @@ module Grafana
4
4
  # namespace for validate options
5
5
  module Validator
6
6
 
7
- # validate( params, { required: true, var: name, type: String } )
7
+ # validate some parameters
8
+ #
9
+ # @param params [Hash]
10
+ # @param options [Hash]
11
+ # @option options [Boolean] required
12
+ # @option options [String] var
13
+ # @option options [Class] type
14
+ #
15
+ # @example
16
+ # default = validate( params, required: false, var: 'default', type: Boolean )
17
+ # name = validate( params, required: true, var: 'name', type: String )
18
+ #
19
+ # @return [Mixed]
20
+ #
8
21
  def validate( params, options )
9
22
  required = options.dig(:required) || false
10
23
  var = options.dig(:var)
@@ -13,7 +26,7 @@ module Grafana
13
26
  params = params.deep_symbolize_keys
14
27
  variable = params.dig(var.to_sym)
15
28
 
16
- raise ArgumentError.new(format('\'%s\' is requiered and missing!', var)) if(variable.nil?) if(required == true )
29
+ raise ArgumentError.new(format('\'%s\' is required and missing!', var)) if(variable.nil? && required == true )
17
30
 
18
31
  unless( type.nil? )
19
32
  clazz = Object.const_get(type.to_s)
@@ -23,6 +36,38 @@ module Grafana
23
36
  variable
24
37
  end
25
38
 
39
+ # validate an value with an array of values
40
+ #
41
+ #
42
+ # @return [Mixed]
43
+ #
44
+ def validate_hash( value, valid_params )
45
+
46
+ # puts "validate_hash( #{value}, #{valid_params} )"
47
+
48
+ unless( valid_params.collect { |r| r.downcase }.include?(value.downcase) )
49
+ # puts "NOOO : #{value}"
50
+ return {
51
+ 'status' => 404,
52
+ 'message' => format( 'wrong value. \'%s\' must be one of \'%s\'', value, valid_params.join('\', \''))
53
+ }
54
+ end
55
+ # puts "result: #{result} #{result.class}"
56
+ #
57
+ #
58
+ # downcased = Set.new valid_params.map(&:downcase)
59
+ #
60
+ # puts "downcased: #{downcased}"
61
+ #
62
+ # unless( downcased.include?( value.downcase ) )
63
+ # return {
64
+ # 'status' => 404,
65
+ # 'message' => format( 'wrong value. \'%s\' must be one of \'%s\'', value, valid_params.join('\', \''))
66
+ # }
67
+ # end
68
+ true
69
+ end
70
+
26
71
  end
27
72
  end
28
73
 
@@ -4,11 +4,11 @@ module Grafana
4
4
  module Version
5
5
 
6
6
  # major part of version
7
- MAJOR = 0
7
+ MAJOR = 1
8
8
  # minor part of version
9
- MINOR = 8
9
+ MINOR = 1
10
10
  # tiny part of version
11
- TINY = 5
11
+ TINY = 0
12
12
  end
13
13
 
14
14
  # Current version of gem.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: grafana
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bodo Schulz
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-12-11 00:00:00.000000000 Z
11
+ date: 2020-02-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rest-client
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '2.1'
41
- - !ruby/object:Gem::Dependency
42
- name: ruby_dig
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: rake
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -229,49 +215,41 @@ extra_rdoc_files: []
229
215
  files:
230
216
  - LICENSE
231
217
  - README.md
232
- - doc/Array.html
233
- - doc/Boolean.html
234
- - doc/FalseClass.html
235
- - doc/Grafana.html
236
- - doc/Hash.html
237
- - doc/Logging.html
238
- - doc/Object.html
239
- - doc/Time.html
240
- - doc/TrueClass.html
241
- - doc/_index.html
242
- - doc/class_list.html
243
- - doc/file.README.html
244
- - doc/file_list.html
245
- - doc/frames.html
246
- - doc/index.html
247
- - doc/method_list.html
248
- - doc/top-level-namespace.html
218
+ - lib/_logging.rb_
249
219
  - lib/grafana.rb
250
220
  - lib/grafana/admin.rb
251
221
  - lib/grafana/alerts.rb
252
222
  - lib/grafana/annotations.rb
223
+ - lib/grafana/auth.rb
253
224
  - lib/grafana/client.rb
254
225
  - lib/grafana/dashboard.rb
226
+ - lib/grafana/dashboard_permissions.rb
255
227
  - lib/grafana/dashboard_versions.rb
256
228
  - lib/grafana/datasource.rb
229
+ - lib/grafana/folder.rb
230
+ - lib/grafana/folder_and_dashboard_search.rb
231
+ - lib/grafana/folder_permissions.rb
232
+ - lib/grafana/logging.rb
257
233
  - lib/grafana/login.rb
258
234
  - lib/grafana/network.rb
259
235
  - lib/grafana/organization.rb
260
236
  - lib/grafana/organizations.rb
237
+ - lib/grafana/playlist.rb
238
+ - lib/grafana/preferences.rb
261
239
  - lib/grafana/snapshot.rb
262
240
  - lib/grafana/tags.rb
241
+ - lib/grafana/teams.rb
263
242
  - lib/grafana/tools.rb
264
243
  - lib/grafana/user.rb
265
244
  - lib/grafana/users.rb
266
245
  - lib/grafana/validator.rb
267
246
  - lib/grafana/version.rb
268
- - lib/logging.rb
269
247
  - lib/monkey_patches.rb
270
248
  homepage: http://github.com/bodsch/ruby-grafana
271
249
  licenses:
272
250
  - MIT
273
251
  metadata: {}
274
- post_install_message:
252
+ post_install_message:
275
253
  rdoc_options: []
276
254
  require_paths:
277
255
  - lib
@@ -286,9 +264,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
286
264
  - !ruby/object:Gem::Version
287
265
  version: '0'
288
266
  requirements: []
289
- rubyforge_project:
290
- rubygems_version: 2.6.14
291
- signing_key:
267
+ rubygems_version: 3.2.7
268
+ signing_key:
292
269
  specification_version: 4
293
270
  summary: Grafana HTTP API Wrapper
294
271
  test_files: []
data/doc/Array.html DELETED
@@ -1,200 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
- <head>
4
- <meta charset="utf-8">
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>
7
- Class: Array
8
-
9
- &mdash; Documentation by YARD 0.9.11
10
-
11
- </title>
12
-
13
- <link rel="stylesheet" href="css/style.css" type="text/css" charset="utf-8" />
14
-
15
- <link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
16
-
17
- <script type="text/javascript" charset="utf-8">
18
- pathId = "Array";
19
- relpath = '';
20
- </script>
21
-
22
-
23
- <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
24
-
25
- <script type="text/javascript" charset="utf-8" src="js/app.js"></script>
26
-
27
-
28
- </head>
29
- <body>
30
- <div class="nav_wrap">
31
- <iframe id="nav" src="class_list.html?1"></iframe>
32
- <div id="resizer"></div>
33
- </div>
34
-
35
- <div id="main" tabindex="-1">
36
- <div id="header">
37
- <div id="menu">
38
-
39
- <a href="_index.html">Index (A)</a> &raquo;
40
-
41
-
42
- <span class="title">Array</span>
43
-
44
- </div>
45
-
46
- <div id="search">
47
-
48
- <a class="full_list_link" id="class_list_link"
49
- href="class_list.html">
50
-
51
- <svg width="24" height="24">
52
- <rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
53
- <rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
54
- <rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
55
- </svg>
56
- </a>
57
-
58
- </div>
59
- <div class="clear"></div>
60
- </div>
61
-
62
- <div id="content"><h1>Class: Array
63
-
64
-
65
-
66
- </h1>
67
- <div class="box_info">
68
-
69
- <dl>
70
- <dt>Inherits:</dt>
71
- <dd>
72
- <span class="inheritName"><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></span>
73
-
74
- <ul class="fullTree">
75
- <li><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></li>
76
-
77
- <li class="next">Array</li>
78
-
79
- </ul>
80
- <a href="#" class="inheritanceTree">show all</a>
81
-
82
- </dd>
83
- </dl>
84
-
85
-
86
-
87
-
88
-
89
-
90
-
91
-
92
-
93
-
94
-
95
- <dl>
96
- <dt>Defined in:</dt>
97
- <dd>lib/monkey_patches.rb</dd>
98
- </dl>
99
-
100
- </div>
101
-
102
- <h2>Overview</h2><div class="docstring">
103
- <div class="discussion">
104
- <hr>
105
-
106
-
107
- </div>
108
- </div>
109
- <div class="tags">
110
-
111
-
112
- </div>
113
-
114
-
115
-
116
-
117
-
118
-
119
-
120
- <h2>
121
- Instance Method Summary
122
- <small><a href="#" class="summary_toggle">collapse</a></small>
123
- </h2>
124
-
125
- <ul class="summary">
126
-
127
- <li class="public ">
128
- <span class="summary_signature">
129
-
130
- <a href="#compare-instance_method" title="#compare (instance method)">#<strong>compare</strong>(comparate) &#x21d2; Object </a>
131
-
132
-
133
-
134
- </span>
135
-
136
-
137
-
138
-
139
-
140
-
141
-
142
-
143
-
144
- <span class="summary_desc"><div class='inline'></div></span>
145
-
146
- </li>
147
-
148
-
149
- </ul>
150
-
151
-
152
-
153
-
154
- <div id="instance_method_details" class="method_details_list">
155
- <h2>Instance Method Details</h2>
156
-
157
-
158
- <div class="method_details first">
159
- <h3 class="signature first" id="compare-instance_method">
160
-
161
- #<strong>compare</strong>(comparate) &#x21d2; <tt><span class='object_link'><a href="Object.html" title="Object (class)">Object</a></span></tt>
162
-
163
-
164
-
165
-
166
-
167
- </h3><table class="source_code">
168
- <tr>
169
- <td>
170
- <pre class="lines">
171
-
172
-
173
- 47
174
- 48
175
- 49</pre>
176
- </td>
177
- <td>
178
- <pre class="code"><span class="info file"># File 'lib/monkey_patches.rb', line 47</span>
179
-
180
- <span class='kw'>def</span> <span class='id identifier rubyid_compare'>compare</span><span class='lparen'>(</span> <span class='id identifier rubyid_comparate'>comparate</span> <span class='rparen'>)</span>
181
- <span class='id identifier rubyid_to_set'>to_set</span> <span class='op'>==</span> <span class='id identifier rubyid_comparate'>comparate</span><span class='period'>.</span><span class='id identifier rubyid_to_set'>to_set</span>
182
- <span class='kw'>end</span></pre>
183
- </td>
184
- </tr>
185
- </table>
186
- </div>
187
-
188
- </div>
189
-
190
- </div>
191
-
192
- <div id="footer">
193
- Generated on Tue Dec 12 19:57:41 2017 by
194
- <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
195
- 0.9.11 (ruby-2.2.8).
196
- </div>
197
-
198
- </div>
199
- </body>
200
- </html>