Class: Wavefront::Base
- Inherits:
-
Object
- Object
- Wavefront::Base
- Includes:
- Mixins, Validators
- Defined in:
- lib/wavefront-sdk/base.rb
Overview
Abstract class from which all API classes inherit. When you make any call to the Wavefront API from this SDK, you are returned an OpenStruct object.
Direct Known Subclasses
Alert, CloudIntegration, Dashboard, Event, ExternalLink, MaintenanceWindow, Message, Metric, Proxy, Query, SavedSearch, Search, Source, User, Webhook, Write
Instance Attribute Summary collapse
-
#api_base ⇒ String
readonly
Derive the first part of the API path from the class name.
-
#conn ⇒ Object
readonly
Returns the value of attribute conn.
-
#debug ⇒ Object
readonly
Returns the value of attribute debug.
-
#logger ⇒ Object
readonly
Returns the value of attribute logger.
-
#net ⇒ Object
readonly
Returns the value of attribute net.
-
#noop ⇒ Object
readonly
Returns the value of attribute noop.
-
#opts ⇒ Object
readonly
Returns the value of attribute opts.
-
#update_keys ⇒ Object
readonly
Returns the value of attribute update_keys.
-
#verbose ⇒ Object
readonly
Returns the value of attribute verbose.
Instance Method Summary collapse
-
#api_delete(path) ⇒ Hash
Make a DELETE call to the Wavefront API and return the result as a Ruby hash.
-
#api_get(path, query = {}) ⇒ Hash
Make a GET call to the Wavefront API and return the result as a Ruby hash.
-
#api_post(path, body = nil, ctype = 'text/plain') ⇒ Hash
Make a POST call to the Wavefront API and return the result as a Ruby hash.
-
#api_put(path, body = nil, ctype = 'application/json') ⇒ Hash
Make a PUT call to the Wavefront API and return the result as a Ruby hash.
-
#hash_for_update(old, new) ⇒ Hash
doing a PUT to update an object requires only a certain subset of the keys returned by #describe().
-
#initialize(creds = {}, opts = {}) ⇒ Nil
constructor
Create a new API object.
-
#log(msg, level = nil) ⇒ Object
Send a message to a Ruby logger object if the user supplied one, or print to standard out if not.
-
#mk_conn(path, headers = {}) ⇒ URI::HTTPS
Create a Faraday connection object.
-
#respond(resp) ⇒ Object
If we need to massage a raw response to fit what the Wavefront::Response class expects (I’m looking at you, ‘User’), a class can provide a #response_shim method.
-
#time_to_ms(t) ⇒ Ingeter
Convert an epoch timestamp into epoch milliseconds.
Methods included from Mixins
Methods included from Validators
#wf_alert_id?, #wf_alert_severity?, #wf_cloudintegration_id?, #wf_dashboard_id?, #wf_epoch?, #wf_event_id?, #wf_granularity?, #wf_link_id?, #wf_link_template?, #wf_maintenance_window_id?, #wf_message_id?, #wf_metric_name?, #wf_ms_ts?, #wf_name?, #wf_point?, #wf_point_tags?, #wf_proxy_id?, #wf_savedsearch_entity?, #wf_savedsearch_id?, #wf_source_id?, #wf_string?, #wf_tag?, #wf_ts?, #wf_user_id?, #wf_value?, #wf_version?, #wf_webhook_id?
Constructor Details
#initialize(creds = {}, opts = {}) ⇒ Nil
Create a new API object. This will always be called from a class which inherits this one. If the inheriting class defines #post_initialize, that method will be called afterwards, with the same arguments.
45 46 47 48 49 50 51 52 53 54 |
# File 'lib/wavefront-sdk/base.rb', line 45 def initialize(creds = {}, opts = {}) @opts = opts @debug = opts[:debug] || false @noop = opts[:noop] || false @verbose = opts[:verbose] || false @logger = opts[:logger] || nil setup_endpoint(creds) post_initialize(creds, opts) if respond_to?(:post_initialize) end |
Instance Attribute Details
#api_base ⇒ String (readonly)
Derive the first part of the API path from the class name. You can override this in your class if you wish
74 75 76 |
# File 'lib/wavefront-sdk/base.rb', line 74 def api_base @api_base end |
#conn ⇒ Object (readonly)
Returns the value of attribute conn.
24 25 26 |
# File 'lib/wavefront-sdk/base.rb', line 24 def conn @conn end |
#debug ⇒ Object (readonly)
Returns the value of attribute debug.
24 25 26 |
# File 'lib/wavefront-sdk/base.rb', line 24 def debug @debug end |
#logger ⇒ Object (readonly)
Returns the value of attribute logger.
24 25 26 |
# File 'lib/wavefront-sdk/base.rb', line 24 def logger @logger end |
#net ⇒ Object (readonly)
Returns the value of attribute net.
24 25 26 |
# File 'lib/wavefront-sdk/base.rb', line 24 def net @net end |
#noop ⇒ Object (readonly)
Returns the value of attribute noop.
24 25 26 |
# File 'lib/wavefront-sdk/base.rb', line 24 def noop @noop end |
#opts ⇒ Object (readonly)
Returns the value of attribute opts.
24 25 26 |
# File 'lib/wavefront-sdk/base.rb', line 24 def opts @opts end |
#update_keys ⇒ Object (readonly)
Returns the value of attribute update_keys.
24 25 26 |
# File 'lib/wavefront-sdk/base.rb', line 24 def update_keys @update_keys end |
#verbose ⇒ Object (readonly)
Returns the value of attribute verbose.
24 25 26 |
# File 'lib/wavefront-sdk/base.rb', line 24 def verbose @verbose end |
Instance Method Details
#api_delete(path) ⇒ Hash
Make a DELETE call to the Wavefront API and return the result as a Ruby hash. Can optionally perform a verbose noop, if the #noop class variable is set. If #verbose is set, then prints the information used to build the URI.
153 154 155 |
# File 'lib/wavefront-sdk/base.rb', line 153 def api_delete(path) make_call(mk_conn(path), :delete) end |
#api_get(path, query = {}) ⇒ Hash
Make a GET call to the Wavefront API and return the result as a Ruby hash. Can optionally perform a verbose noop, if the #noop class variable is set. If #verbose is set, then prints the information used to build the URI.
105 106 107 |
# File 'lib/wavefront-sdk/base.rb', line 105 def api_get(path, query = {}) make_call(mk_conn(path), :get, nil, query) end |
#api_post(path, body = nil, ctype = 'text/plain') ⇒ Hash
Make a POST call to the Wavefront API and return the result as a Ruby hash. Can optionally perform a verbose noop, if the #noop class variable is set. If #verbose is set, then prints the information used to build the URI.
120 121 122 123 124 125 |
# File 'lib/wavefront-sdk/base.rb', line 120 def api_post(path, body = nil, ctype = 'text/plain') body = body.to_json unless body.is_a?(String) make_call(mk_conn(path, { 'Content-Type': ctype, 'Accept': 'application/json'}), :post, nil, body) end |
#api_put(path, body = nil, ctype = 'application/json') ⇒ Hash
Make a PUT call to the Wavefront API and return the result as a Ruby hash. Can optionally perform a verbose noop, if the #noop class variable is set. If #verbose is set, then prints the information used to build the URI.
138 139 140 141 142 |
# File 'lib/wavefront-sdk/base.rb', line 138 def api_put(path, body = nil, ctype = 'application/json') make_call(mk_conn(path, { 'Content-Type': ctype, 'Accept': 'application/json' }), :put, nil, body.to_json) end |
#hash_for_update(old, new) ⇒ Hash
doing a PUT to update an object requires only a certain subset of the keys returned by #describe(). This method takes the existing description of an object and turns it into a new has which can be PUT.
167 168 169 170 171 172 173 |
# File 'lib/wavefront-sdk/base.rb', line 167 def hash_for_update(old, new) raise ArgumentError unless old.is_a?(Hash) && new.is_a?(Hash) Hash[old.merge(new).map { |k, v| [k.to_sym, v] }].select do |k, _v| update_keys.include?(k) end end |
#log(msg, level = nil) ⇒ Object
Send a message to a Ruby logger object if the user supplied one, or print to standard out if not.
183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/wavefront-sdk/base.rb', line 183 def log(msg, level = nil) if logger logger.send(level || :info, msg) else # print it unless it's a debug and we're not in debug # return if level == :debug && ! opts[:debug] return if level == :info && ! opts[:verbose] puts msg end end |
#mk_conn(path, headers = {}) ⇒ URI::HTTPS
Create a Faraday connection object. The server comes from the endpoint passed to the initializer in the ‘creds’ hash; the root of the URI is dynamically derived by the #setup_endpoint method.
86 87 88 89 90 91 92 |
# File 'lib/wavefront-sdk/base.rb', line 86 def mk_conn(path, headers = {}) Faraday.new( url: Addressable::URI.encode("https://#{net[:endpoint]}" + [net[:api_base], path].uri_concat), headers: net[:headers].merge(headers) ) end |
#respond(resp) ⇒ Object
If we need to massage a raw response to fit what the Wavefront::Response class expects (I’m looking at you, ‘User’), a class can provide a #response_shim method.
200 201 202 203 204 205 206 |
# File 'lib/wavefront-sdk/base.rb', line 200 def respond(resp) body = respond_to?(:response_shim) ? response_shim(resp.body, resp.status) : resp.body Wavefront::Response.new(body, resp.status) end |
#time_to_ms(t) ⇒ Ingeter
Convert an epoch timestamp into epoch milliseconds. If the timestamp looks like it’s already epoch milliseconds, return it as-is.
63 64 65 66 67 |
# File 'lib/wavefront-sdk/base.rb', line 63 def time_to_ms(t) return false unless t.is_a?(Integer) return t if t.to_s.size == 13 (t.to_f * 1000).round end |