Class: Wavefront::Search
Overview
Manage and query Wavefront searches. The /search API path has a lot of paths, with a lot of duplication. The current state of this class covers the whole API with two methods, but leaves a lot up to the user. It may grow, with convenience methods.
Instance Attribute Summary
Attributes inherited from CoreApi
#api, #creds, #logger, #opts, #update_keys
Instance Method Summary collapse
-
#body(query, options) ⇒ Object
Build a query body.
- #raw_facet_search(entity = nil, body = nil, deleted = false, facet = false) ⇒ Object
-
#raw_search(entity = nil, body = nil, deleted = false) ⇒ Object
POST /api/v2/search/entity POST /api/v2/search/entity/deleted Run a search query.
-
#search(entity, query, options = {}) ⇒ Object
POST /api/v2/search/entity POST /api/v2/search/entity/deleted Run a search query.
Methods inherited from CoreApi
#api_base, #api_path, #hash_for_update, #initialize, #setup_api, #time_to_ms
Methods included from Mixins
#log, #parse_relative_time, #parse_time, #relative_time, #time_multiplier, #valid_relative_time?
Methods included from Validators
#wf_alert_id?, #wf_alert_severity?, #wf_cloudintegration_id?, #wf_dashboard_id?, #wf_derivedmetric_id?, #wf_distribution?, #wf_distribution_count?, #wf_distribution_interval?, #wf_distribution_values?, #wf_epoch?, #wf_event_id?, #wf_granularity?, #wf_integration_id?, #wf_link_id?, #wf_link_template?, #wf_maintenance_window_id?, #wf_message_id?, #wf_metric_name?, #wf_ms_ts?, #wf_name?, #wf_notificant_id?, #wf_point?, #wf_point_tag?, #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
This class inherits a constructor from Wavefront::CoreApi
Instance Method Details
#body(query, options) ⇒ Object
Build a query body
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/wavefront-sdk/search.rb', line 47 def body(query, ) ret = { limit: [:limit] || 10, offset: [:offset] || 0 } if query && !query.empty? ret[:query] = [query].flatten.map do |q| q.tap { |iq| iq[:matchingMethod] ||= 'CONTAINS' } end ret[:sort] = { field: [query].flatten.first[:key], ascending: ![:desc] || true } end ret end |
#raw_facet_search(entity = nil, body = nil, deleted = false, facet = false) ⇒ Object
98 99 100 101 102 103 104 105 106 |
# File 'lib/wavefront-sdk/search.rb', line 98 def raw_facet_search(entity = nil, body = nil, deleted = false, facet = false) raise ArgumentError unless entity.is_a?(String) && body.is_a?(Hash) path = [entity] path.<< 'deleted' if deleted path.<< facet || 'facets' api.post(path, body, 'application/json') end |
#raw_search(entity = nil, body = nil, deleted = false) ⇒ Object
POST /api/v2/search/entity POST /api/v2/search/entity/deleted Run a search query. This single method maps to many API paths.
76 77 78 79 80 81 82 83 84 85 |
# File 'lib/wavefront-sdk/search.rb', line 76 def raw_search(entity = nil, body = nil, deleted = false) unless (entity.is_a?(String) || entity.is_a?(Symbol)) && body.is_a?(Hash) raise ArgumentError end path = [entity] path.<< 'deleted' if deleted api.post(path, body, 'application/json') end |
#search(entity, query, options = {}) ⇒ Object
POST /api/v2/search/entity POST /api/v2/search/entity/deleted Run a search query. This single method maps to many API paths. It is a wrapper around #raw_search() for common, single key-value searches. If you need to do more complicated things, use #raw_search().
containing the following keys:
key [String] the field on which to search
value [String] what to search for
matchingMethod [String] the method to match values. Defaults
to 'CONTAINS'. Must be one of CONTAINS, STARTSWITH, EXACT,
TAGPATH
If an array of hashes is supplied, Wavefront will apply a
logical AND to the given key-value pairs.
40 41 42 43 |
# File 'lib/wavefront-sdk/search.rb', line 40 def search(entity, query, = {}) raise ArgumentError unless .is_a?(Hash) raw_search(entity, body(query, ), [:deleted] || false) end |