wavefront-sdk 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 424ff394e307dc912d9b323b522afd1a972fd79c
4
- data.tar.gz: ad5f049f02bc52c96f4c7c09e13a68672f94e472
3
+ metadata.gz: 3a04d6dc9514eea460313e7caa056b80e679df99
4
+ data.tar.gz: 4c702f5ec963fa951c5d5b59b916784c12c4f9ec
5
5
  SHA512:
6
- metadata.gz: '083f4d03c0b1e45f0c0b742fca39caead79fee037a326e6f0413e2e66461aafcf731e5ea3734f876b3079ff3f2d57b146aa86e88f1935c8aeee062eaa466e782'
7
- data.tar.gz: 150d41f57564dd6a38d695719100f7e3f853dcdb3c6f991e924a2683effb81a4f209038656b81d7f9a4535fbb9281ee86e1aecb817e3f9c613180453a9b0bb47
6
+ metadata.gz: ecb2531e3b9e2507679abec131ac65d3688c3c959cace5203fe78853d6dec16358687221dc5500701b1d1cc5ec21835b81739a75d51a4720aaf033401eadad9b
7
+ data.tar.gz: ad79ef3b12a11f635bf0a6ab00e3c53aae58ce94a7885811fe13eba1fe59240f36abc2844faf46db73badfe97a165acd6254c33aff4b784df12d24dd4ae362ea
data/Gemfile.lock CHANGED
@@ -1,9 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- wavefront-sdk (0.0.1)
4
+ wavefront-sdk (0.1.0)
5
+ addressable (~> 2.4)
5
6
  faraday (>= 0.12.1, < 0.13)
6
7
  inifile (>= 3.0.0)
8
+ map (~> 6.6.0)
7
9
 
8
10
  GEM
9
11
  remote: https://rubygems.org/
@@ -17,6 +19,7 @@ GEM
17
19
  multipart-post (>= 1.2, < 3)
18
20
  hashdiff (0.3.2)
19
21
  inifile (3.0.0)
22
+ map (6.6.0)
20
23
  minitest (5.8.5)
21
24
  multipart-post (2.0.0)
22
25
  parser (2.4.0.0)
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # wavefront-sdk [![Build Status](https://travis-ci.org/snltd/wavefront-sdk.svg?branch=master)](https://travis-ci.org/snltd/wavefront-sdk) [![Code Climate](https://codeclimate.com/github/snltd/wavefront-sdk/badges/gpa.svg)](https://codeclimate.com/github/snltd/wavefront-sdk) [![Issue Count](https://codeclimate.com/github/snltd/wavefront-sdk/badges/issue_count.svg)](https://codeclimate.com/github/snltd/wavefront-sdk) [![Known Vulnerabilities](https://snyk.io/test/github/snltd/wavefront-sdk/badge.svg)](https://snyk.io/test/github/snltd/wavefront-sdk)
1
+ # wavefront-sdk [![Build Status](https://travis-ci.org/snltd/wavefront-sdk.svg?branch=master)](https://travis-ci.org/snltd/wavefront-sdk) [![Code Climate](https://codeclimate.com/github/snltd/wavefront-sdk/badges/gpa.svg)](https://codeclimate.com/github/snltd/wavefront-sdk) [![Issue Count](https://codeclimate.com/github/snltd/wavefront-sdk/badges/issue_count.svg)](https://codeclimate.com/github/snltd/wavefront-sdk) [![Known Vulnerabilities](https://snyk.io/test/github/snltd/wavefront-sdk/badge.svg)](https://snyk.io/test/github/snltd/wavefront-sdk) [![Gem Version](https://badge.fury.io/rb/wavefront-sdk.svg)](https://badge.fury.io/rb/wavefront-sdk) ![](http://ruby-gem-downloads-badge.herokuapp.com/wavefront-sdk?type=total)
2
2
 
3
3
  This is a Ruby SDK for v2 of
4
4
  [Wavefront](https://www.wavefront.com/)'s public API. It supports Ruby >= 2.2.
@@ -15,15 +15,29 @@ $ gem install wavefront-sdk
15
15
 
16
16
  or to build locally,
17
17
 
18
- ```
18
+
19
19
  $ gem build wavefront-sdk.gemspec
20
20
  ```
21
21
 
22
+ ## Documentation
23
+
24
+ The code is documented with [YARD](http://yardoc.org/) and
25
+ automatically generated documentation is [available on
26
+ rubydoc.info](http://www.rubydoc.info/gems/wavefront-sdk/).
27
+
22
28
  ## Examples
23
29
 
24
30
  First, let's list the IDs of the users in our account. The `list()` method
25
- will return a `Wavefront::Response::User` object with a list of items. Most
26
- response classes behave this way.
31
+ will return a `Wavefront::Response` object. This object has
32
+ `status` and `response` methods. `status` always yields a
33
+ structure containing `result`, `message` and `code` fields which can
34
+ be inspected to ensure an API call was processed successfully.
35
+ `response` gives you a the JSON response from the API, conveniently
36
+ processed and turned into a
37
+ [`Map`](https://github.com/ahoward/map) object. Map objects can be
38
+ interrogated in various ways. For instance `map['items']`,
39
+ `map[:items]` and `map.items` will all get you to the same place.
40
+
27
41
 
28
42
  ```ruby
29
43
  # Define our API endpoint. (This is not a valid token!)
@@ -41,16 +55,24 @@ log = Logger.new(STDOUT)
41
55
 
42
56
  wf = Wavefront::User.new(CREDS, verbose: true, logger: log)
43
57
 
58
+ # See how things went:
59
+
60
+ p wf.status
61
+ #<Wavefront::Type::Status:0x007feb99185538 @result="OK", @message="", @code=200>
62
+
63
+ # And print each user's ID
64
+
44
65
  wf.list.response.items.each { |user| puts user[:identifier] }
45
66
 
46
- # And delete the user 'lolex@oldplace.com'
67
+ # Now delete the user 'lolex@oldplace.com', disregarding the
68
+ # response.
47
69
 
48
70
  wf.delete('lolex@oldplace.com')
49
71
  ```
50
72
 
51
73
  Retrieve a timeseries over the last 10 minutes, with one minute bucket
52
74
  granularity. We will describe the time as a Ruby object, but could also use
53
- an epoch timestamp.
75
+ an epoch timestamp. The SDK happily converts between the two.
54
76
 
55
77
 
56
78
  ```ruby
@@ -63,9 +85,9 @@ Wavefront::Query.new(CREDS).query(
63
85
  )
64
86
  ```
65
87
 
66
- We can write points too, assuming we have a proxy. You can't write points
67
- directly via the API. Unlike all other classes, this one requires the proxy
68
- address and port as its credential hash.
88
+ We can write points too, assuming we have access to a proxy, because
89
+ you can't write points directly via the API. Unlike all other classes, this
90
+ one requires the proxy address and port as its credential hash.
69
91
 
70
92
  ```ruby
71
93
  require 'wavefront-sdk/write'
@@ -77,7 +99,7 @@ wf = Wavefront::Write.new(W_CREDS, debug: true)
77
99
  task = wf.write( [{ path: 'dev.test.sdk', value: 10 }])
78
100
 
79
101
  p task.response
80
- #<struct sent=1, rejected=0, unsent=0>
102
+ #{"sent"=>1, "rejected"=>0, "unsent"=>0}
81
103
  puts task.status.result
82
104
  #OK
83
105
  ```
@@ -5,7 +5,7 @@ module Wavefront
5
5
  # View and manage alerts. Alerts are identified by their millisecond
6
6
  # epoch timestamp. Returns a Wavefront::Response::Alert object.
7
7
  #
8
- class Alert < Wavefront::Base
8
+ class Alert < Base
9
9
 
10
10
  # GET /api/v2/alert
11
11
  # Get all alerts for a customer
@@ -31,7 +31,7 @@ module Wavefront
31
31
  api_post('', body, 'application/json')
32
32
  end
33
33
 
34
- # DELETE /api/v2/alert/{id}
34
+ # DELETE /api/v2/alert/id
35
35
  # Delete a specific alert.
36
36
  #
37
37
  # Deleting an active alert moves it to 'trash', from where it can
@@ -46,8 +46,8 @@ module Wavefront
46
46
  api_delete(id)
47
47
  end
48
48
 
49
- # GET /api/v2/alert/{id}
50
- # GET /api/v2/alert/{id}/history/{version}
49
+ # GET /api/v2/alert/id
50
+ # GET /api/v2/alert/id/history/version
51
51
  # Get a specific alert / Get a specific historical version of a
52
52
  # specific alert.
53
53
  #
@@ -63,7 +63,7 @@ module Wavefront
63
63
  api_get(fragments.uri_concat)
64
64
  end
65
65
 
66
- # PUT /api/v2/alert/{id}
66
+ # PUT /api/v2/alert/id
67
67
  # Update a specific alert.
68
68
  #
69
69
  # @param id [String] a Wavefront alert ID
@@ -76,7 +76,7 @@ module Wavefront
76
76
  api_put(id, body, 'application/json')
77
77
  end
78
78
 
79
- # GET /api/v2/alert/{id}/history
79
+ # GET /api/v2/alert/id/history
80
80
  # Get the version history of a specific alert.
81
81
  #
82
82
  # @param id [String] ID of the alert
@@ -87,12 +87,13 @@ module Wavefront
87
87
  api_get([id, 'history'].uri_concat)
88
88
  end
89
89
 
90
- # POST /api/v2/alert/{id}/snooze
90
+ # POST /api/v2/alert/id/snooze
91
91
  # Snooze a specific alert for some number of seconds.
92
92
  #
93
93
  # @param id [String] ID of the alert
94
- # @param time [Integer] how many seconds to snooze for. Nil is indefinite
95
- # @returns [Hash] object describing the alert with status and
94
+ # @param seconds [Integer] how many seconds to snooze for.
95
+ # Nil is indefinite
96
+ # @return [Hash] object describing the alert with status and
96
97
  # response keys
97
98
  #
98
99
  def snooze(id, seconds = nil)
@@ -101,11 +102,11 @@ module Wavefront
101
102
  api_post([id, "snooze#{qs}"].uri_concat, nil)
102
103
  end
103
104
 
104
- # GET /api/v2/alert/{id}/tag
105
+ # GET /api/v2/alert/id/tag
105
106
  # Get all tags associated with a specific alert.
106
107
  #
107
108
  # @param id [String] ID of the alert
108
- # @returns [Hash] object describing the alert with status and
109
+ # @return [Hash] object describing the alert with status and
109
110
  # response keys
110
111
  #
111
112
  def tags(id)
@@ -113,12 +114,12 @@ module Wavefront
113
114
  api_get([id, 'tag'].uri_concat)
114
115
  end
115
116
 
116
- # POST /api/v2/alert/{id}/tag
117
+ # POST /api/v2/alert/id/tag
117
118
  # Set all tags associated with a specific alert.
118
119
  #
119
120
  # @param id [String] ID of the alert
120
121
  # @param tags [Array] list of tags to set.
121
- # @returns [Hash] object describing the alert with status and
122
+ # @return [Hash] object describing the alert with status and
122
123
  # response keys
123
124
  #
124
125
  def tag_set(id, tags)
@@ -128,12 +129,12 @@ module Wavefront
128
129
  api_post([id, 'tag'].uri_concat, tags.to_json, 'application/json')
129
130
  end
130
131
 
131
- # DELETE /api/v2/alert/{id}/tag/{tagValue}
132
+ # DELETE /api/v2/alert/id/tag/tagValue
132
133
  # Remove a tag from a specific alert.
133
134
  #
134
135
  # @param id [String] ID of the alert
135
136
  # @param tag [String] tag to delete
136
- # @returns [Hash] object with 'status' key and empty 'repsonse'
137
+ # @return [Hash] object with 'status' key and empty 'repsonse'
137
138
  #
138
139
  def tag_delete(id, tag)
139
140
  wf_alert_id?(id)
@@ -141,12 +142,12 @@ module Wavefront
141
142
  api_delete([id, 'tag', tag].uri_concat)
142
143
  end
143
144
 
144
- # PUT /api/v2/alert/{id}/tag/{tagValue}
145
+ # PUT /api/v2/alert/id/tag/tagValue
145
146
  # Add a tag to a specific alert.
146
147
  #
147
148
  # @param id [String] ID of the alert
148
149
  # @param tag [String] tag to set.
149
- # @returns [Hash] object with 'status' key and empty 'repsonse'
150
+ # @return [Hash] object with 'status' key and empty 'repsonse'
150
151
  #
151
152
  def tag_add(id, tag)
152
153
  wf_alert_id?(id)
@@ -154,7 +155,7 @@ module Wavefront
154
155
  api_put([id, 'tag', tag].uri_concat)
155
156
  end
156
157
 
157
- # POST /api/v2/alert/{id}/undelete
158
+ # POST /api/v2/alert/id/undelete
158
159
  # Undelete a specific alert.
159
160
  #
160
161
  # @param id [String] ID of the alert
@@ -165,11 +166,11 @@ module Wavefront
165
166
  api_post([id, 'undelete'].uri_concat)
166
167
  end
167
168
 
168
- # POST /api/v2/alert/{id}/unsnooze
169
+ # POST /api/v2/alert/id/unsnooze
169
170
  # Unsnooze a specific alert.
170
171
  #
171
172
  # @param id [String] ID of the alert
172
- # @returns [Hash] object describing the alert with status and
173
+ # @return [Hash] object describing the alert with status and
173
174
  # response keys
174
175
  #
175
176
  def unsnooze(id)
@@ -186,10 +187,4 @@ module Wavefront
186
187
  api_get('summary')
187
188
  end
188
189
  end
189
-
190
- # A standard response
191
- #
192
- class Response
193
- class Alert < Base; end
194
- end
195
190
  end
@@ -3,6 +3,7 @@ require 'time'
3
3
  require 'faraday'
4
4
  require 'pp'
5
5
  require 'ostruct'
6
+ require 'addressable'
6
7
  require_relative './exception'
7
8
  require_relative './mixins'
8
9
  require_relative './response'
@@ -15,8 +16,7 @@ module Wavefront
15
16
  # any call to the Wavefront API from this SDK, you are returned an
16
17
  # OpenStruct object.
17
18
  #
18
- # @returns a Wavefront::Class::Response object where Class matches
19
- # the inheriting class name.
19
+ # @return a Wavefront::Response object
20
20
  #
21
21
  class Base
22
22
  include Wavefront::Validators
@@ -85,8 +85,8 @@ module Wavefront
85
85
  #
86
86
  def mk_conn(path, headers = {})
87
87
  Faraday.new(
88
- url: "https://#{net[:endpoint]}" +
89
- [net[:api_base], path].uri_concat,
88
+ url: Addressable::URI.encode("https://#{net[:endpoint]}" +
89
+ [net[:api_base], path].uri_concat),
90
90
  headers: net[:headers].merge(headers)
91
91
  )
92
92
  end
@@ -98,7 +98,8 @@ module Wavefront
98
98
  #
99
99
  # @param path [String] path to be appended to the
100
100
  # #net[:api_base] path.
101
- # @param qs [String] optional query string
101
+ # @param query [Hash] optional key-value pairs with will be made
102
+ # into aquery string
102
103
  # @return [Hash] API response
103
104
  #
104
105
  def api_get(path, query = {})
@@ -154,11 +155,12 @@ module Wavefront
154
155
  end
155
156
 
156
157
  # doing a PUT to update an object requires only a certain subset of
157
- # the keys returned by #describe().
158
+ # the keys returned by #describe(). This method takes the
159
+ # existing description of an object and turns it into a new has
160
+ # which can be PUT.
158
161
  #
159
- # @param body [Hash] a hash of the existing object merged with the
160
- # hash describing the user's change(s).
161
- # @param keys [Array, String] the keys(s) the user wishes to update
162
+ # @param old [Hash] a hash of the existing object
163
+ # @param new [Hash] the keys you wish to update
162
164
  # @return [Hash] a hash containing only the keys which need to be
163
165
  # sent to the API. Keys will be symbolized.
164
166
  #
@@ -187,13 +189,20 @@ module Wavefront
187
189
  #
188
190
  return if level == :debug && ! opts[:debug]
189
191
  return if level == :info && ! opts[:verbose]
190
-
191
192
  puts msg
192
193
  end
193
194
  end
194
195
 
196
+ # If we need to massage a raw response to fit what the
197
+ # Wavefront::Response class expects (I'm looking at you,
198
+ # 'User'), a class can provide a {#response_shim} method.
199
+ #
195
200
  def respond(resp)
196
- response_class.send(:new, resp.body, resp.status || {})
201
+ body = respond_to?(:response_shim) ? response_shim(resp.body,
202
+ resp.status) :
203
+ resp.body
204
+
205
+ Wavefront::Response.new(body, resp.status)
197
206
  end
198
207
 
199
208
  private
@@ -226,11 +235,6 @@ module Wavefront
226
235
  respond(resp)
227
236
  end
228
237
 
229
- def response_class
230
- Object.const_get(
231
- "Wavefront::Response::#{self.class.name.split('::').last}")
232
- end
233
-
234
238
  def setup_endpoint(creds)
235
239
  %w(endpoint token).each do |k|
236
240
  raise "creds must contain #{k}" unless creds.key?(k.to_sym)
@@ -5,7 +5,7 @@ module Wavefront
5
5
  # View and manage Cloud Integrations. These are identified by
6
6
  # a UUID.
7
7
  #
8
- class CloudIntegration < Wavefront::Base
8
+ class CloudIntegration < Base
9
9
 
10
10
  # GET /api/v2/cloudintegration
11
11
  # Get all cloud integrations for a customer
@@ -30,7 +30,7 @@ module Wavefront
30
30
  api_post('', body, 'application/json')
31
31
  end
32
32
 
33
- # DELETE /api/v2/cloudintegration/{id}
33
+ # DELETE /api/v2/cloudintegration/id
34
34
  # Delete a specific cloud integration
35
35
  #
36
36
  # Deleting an active integration moves it to 'trash', from where
@@ -45,7 +45,7 @@ module Wavefront
45
45
  api_delete(id)
46
46
  end
47
47
 
48
- # GET /api/v2/cloudintegration/{id}
48
+ # GET /api/v2/cloudintegration/id
49
49
  # Get a specific cloud integration
50
50
  #
51
51
  # @param id [String] ID of the integration
@@ -56,7 +56,7 @@ module Wavefront
56
56
  api_get(id)
57
57
  end
58
58
 
59
- # PUT /api/v2/cloudintegration/{id}
59
+ # PUT /api/v2/cloudintegration/id
60
60
  # Update a specific cloud integration
61
61
  #
62
62
  # @param id [String] ID of the integration
@@ -68,7 +68,7 @@ module Wavefront
68
68
  api_put(id, body)
69
69
  end
70
70
 
71
- # POST /api/v2/cloudintegration/{id}/undelete
71
+ # POST /api/v2/cloudintegration/id/undelete
72
72
  # Undelete a specific cloud integration
73
73
  #
74
74
  # @param id [String] ID of the integration
@@ -79,10 +79,4 @@ module Wavefront
79
79
  api_post([id, 'undelete'].uri_concat)
80
80
  end
81
81
  end
82
-
83
- # A standard response.
84
- #
85
- class Response
86
- class CloudIntegration < Base; end
87
- end
88
82
  end
@@ -1,9 +1,19 @@
1
1
  require 'pathname'
2
2
  require 'inifile'
3
+ require 'map'
3
4
 
4
5
  module Wavefront
5
6
 
6
- # Helper methods to get Wavefront credentials
7
+ # Helper methods to get Wavefront credentials.
8
+ #
9
+ # @return [Wavefront::Credentials]
10
+ #
11
+ # @!attribute config [r]
12
+ # @return [Map] the entire loaded config
13
+ # @!attribute creds [r]
14
+ # @return [Map] credentials for speaking to the Wavefront API
15
+ # @!attribute proxy [r]
16
+ # @return [Map] information for speaking to a Wavefront proxy
7
17
  #
8
18
  class Credentials
9
19
  attr_reader :opts, :config, :creds, :proxy
@@ -35,9 +45,9 @@ module Wavefront
35
45
  end
36
46
 
37
47
  def populate(raw)
38
- @config = raw
39
- @creds = raw.select { |k, _v| [:endpoint, :token].include?(k) }
40
- @proxy = raw.select { |k, _v| [:proxy, :port].include?(k) }
48
+ @config = Map(raw)
49
+ @creds = Map(raw.select { |k, _v| [:endpoint, :token].include?(k) })
50
+ @proxy = Map(raw.select { |k, _v| [:proxy, :port].include?(k) })
41
51
  end
42
52
 
43
53
  def load_from_file(opts)
@@ -4,7 +4,7 @@ module Wavefront
4
4
  #
5
5
  # View and manage dashboards.
6
6
  #
7
- class Dashboard < Wavefront::Base
7
+ class Dashboard < Base
8
8
 
9
9
  # GET /api/v2/dashboard
10
10
  # Get all dashboards for a customer.
@@ -29,7 +29,7 @@ module Wavefront
29
29
  api_post('', body, 'application/json')
30
30
  end
31
31
 
32
- # DELETE /api/v2/dashboard/{id}
32
+ # DELETE /api/v2/dashboard/id
33
33
  # Delete a specific dashboard.
34
34
  # Deleting an active dashboard moves it to 'trash', from where it can
35
35
  # be restored with an #undelete operation. Deleting an dashboard in
@@ -43,7 +43,7 @@ module Wavefront
43
43
  api_delete(id)
44
44
  end
45
45
 
46
- # GET /api/v2/dashboard/{id}
46
+ # GET /api/v2/dashboard/id
47
47
  # Get a specific dashboard / Get a specific historical version of a
48
48
  # specific dashboard.
49
49
  #
@@ -59,7 +59,7 @@ module Wavefront
59
59
  api_get(fragments.uri_concat)
60
60
  end
61
61
 
62
- # PUT /api/v2/dashboard/{id}
62
+ # PUT /api/v2/dashboard/id
63
63
  # Update a specific dashboard.
64
64
  #
65
65
  # Refer to the Swagger API docs for valid keys.
@@ -73,7 +73,7 @@ module Wavefront
73
73
  api_put(id, body)
74
74
  end
75
75
 
76
- # GET /api/v2/dashboard/{id}/history
76
+ # GET /api/v2/dashboard/id/history
77
77
  # Get the version history of an dashboard.
78
78
  #
79
79
  # @param id [String] ID of the dashboard
@@ -84,11 +84,11 @@ module Wavefront
84
84
  api_get([id, 'history'].uri_concat)
85
85
  end
86
86
 
87
- # GET /api/v2/dashboard/{id}/tag
87
+ # GET /api/v2/dashboard/id/tag
88
88
  # Get all tags associated with a specific dashboard.
89
89
  #
90
90
  # @param id [String] ID of the dashboard
91
- # @returns [Hash] object describing the dashboard with status and
91
+ # @return [Hash] object describing the dashboard with status and
92
92
  # response keys
93
93
  #
94
94
  def tags(id)
@@ -96,12 +96,12 @@ module Wavefront
96
96
  api_get([id, 'tag'].uri_concat)
97
97
  end
98
98
 
99
- # POST /api/v2/dashboard/{id}/tag
99
+ # POST /api/v2/dashboard/id/tag
100
100
  # Set all tags associated with a specific dashboard.
101
101
  #
102
102
  # @param id [String] ID of the dashboard
103
103
  # @param tags [Array] list of tags to set.
104
- # @returns [Hash] object describing the dashboard with status and
104
+ # @return [Hash] object describing the dashboard with status and
105
105
  # response keys
106
106
  #
107
107
  def tag_set(id, tags)
@@ -111,12 +111,12 @@ module Wavefront
111
111
  api_post([id, 'tag'].uri_concat, tags.to_json, 'application/json')
112
112
  end
113
113
 
114
- # DELETE /api/v2/dashboard/{id}/tag/{tagValue}
114
+ # DELETE /api/v2/dashboard/id/tag/tagValue
115
115
  # Remove a tag from a specific dashboard.
116
116
  #
117
117
  # @param id [String] ID of the dashboard
118
118
  # @param tag [String] tag to delete
119
- # @returns [Hash] object with 'status' key and empty 'repsonse'
119
+ # @return [Hash] object with 'status' key and empty 'repsonse'
120
120
  #
121
121
  def tag_delete(id, tag)
122
122
  wf_dashboard_id?(id)
@@ -124,12 +124,12 @@ module Wavefront
124
124
  api_delete([id, 'tag', tag].uri_concat)
125
125
  end
126
126
 
127
- # PUT /api/v2/dashboard/{id}/tag/{tagValue}
127
+ # PUT /api/v2/dashboard/id/tag/tagValue
128
128
  # Add a tag to a specific dashboard.
129
129
  #
130
130
  # @param id [String] ID of the dashboard
131
131
  # @param tag [String] tag to set.
132
- # @returns [Hash] object with 'status' key and empty 'repsonse'
132
+ # @return [Hash] object with 'status' key and empty 'repsonse'
133
133
  #
134
134
  def tag_add(id, tag)
135
135
  wf_dashboard_id?(id)
@@ -137,7 +137,7 @@ module Wavefront
137
137
  api_put([id, 'tag', tag].uri_concat)
138
138
  end
139
139
 
140
- # POST /api/v2/dashboard/{id}/undelete
140
+ # POST /api/v2/dashboard/id/undelete
141
141
  # Move an dashboard from 'trash' back into active service.
142
142
  #
143
143
  # @param id [String] ID of the dashboard
@@ -148,10 +148,4 @@ module Wavefront
148
148
  api_post([id, 'undelete'].uri_concat)
149
149
  end
150
150
  end
151
-
152
- # A standard response.
153
- #
154
- class Response
155
- class Dashboard < Base; end
156
- end
157
151
  end