Class: Wavefront::Search

Inherits:
Base
  • Object
show all
Defined in:
lib/wavefront-sdk/search.rb

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 Base

#conn, #debug, #logger, #net, #noop, #opts, #update_keys, #verbose

Instance Method Summary collapse

Methods inherited from Base

#api_base, #api_delete, #api_get, #api_path, #api_post, #api_put, #everything, #hash_for_update, #initialize, #log, #mk_conn, #print_message, #respond, #time_to_ms

Methods included from Mixins

#parse_relative_time, #parse_time, #relative_time, #time_multiplier

Methods included from Validators

#wf_alert_id?, #wf_alert_severity?, #wf_cloudintegration_id?, #wf_dashboard_id?, #wf_derivedmetric_id?, #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::Base

Instance Method Details

#body(query, options) ⇒ Object

Build a query body



47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/wavefront-sdk/search.rb', line 47

def body(query, options)
  ret = {
    limit:  options[:limit] || 10,
    offset: options[:offset] || 0,
    query:  [query].flatten,
    sort:   { field:     [query].flatten.first[:key],
              ascending: !options[:desc] || true }
  }

  ret[:query].map { |q| q[:matchingMethod] ||= 'CONTAINS' }
  ret
end

#raw_facet_search(entity = nil, body = nil, deleted = false, facet = false) ⇒ Object

Parameters:

  • entity (String) (defaults to: nil)

    the type of Wavefront object you wish to search

  • body (Hash) (defaults to: nil)

    the query to use for searching. Refer to the Wavefront Swagger docs for the correct format.

  • deleted (Boolean) (defaults to: false)

    whether to search deleted (true) or active (false) entities

  • facet (String) (defaults to: false)

    the facet on which to search. If this is false, the assumption is that multiple facets will be specified in the body. See the Swagger docs for more information.

Raises:

  • (ArgumentError)


95
96
97
98
99
100
101
102
103
# File 'lib/wavefront-sdk/search.rb', line 95

def raw_facet_search(entity = nil, body = nil, deleted = false,
                     facet = false)
  raise ArgumentError unless entity.is_a?(String)
  raise ArgumentError unless body.is_a?(Hash)
  path = [entity]
  path.<< 'deleted' if deleted
  path.<< facet ? 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.

Parameters:

  • entity (String) (defaults to: nil)

    the type of Wavefront object you wish to search

  • body (Hash) (defaults to: nil)

    the query to use for searching. Refer to the Wavefront Swagger docs for the correct format. Specifying multiple key - value pairs performs a logical AND on the constraints.

  • deleted (Boolean) (defaults to: false)

    whether to search deleted (true) or active (false) entities



73
74
75
76
77
78
79
80
81
82
# File 'lib/wavefront-sdk/search.rb', line 73

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.to_json, '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.

Parameters:

  • entity (String, Symbol)

    the type of Wavefront object you wish to search. e.g. :alert, :dashboard

  • query (Array, Hash)

    A single hash, or array of hashes,

  • value (String)

    the value to search for

  • options (Hash) (defaults to: {})

    tune the query: keys are: deleted [Boolean] whether to search deleted (true) or active

    (false) entities
    

    limit [Integer] how many results to return. Defaults to 0

    (all of them)
    

    offset [Integer] return results after this offset desc: [Boolean] return results in descending order. Defaults

    to false. Sorting is done on the 'key' of the first query
    hash.
    

Raises:

  • (ArgumentError)


40
41
42
43
# File 'lib/wavefront-sdk/search.rb', line 40

def search(entity, query, options = {})
  raise ArgumentError unless options.is_a?(Hash)
  raw_search(entity, body(query, options), options[:deleted] || false)
end