Class: WavefrontCli::Query

Inherits:
Base
  • Object
show all
Includes:
Wavefront::Mixins
Defined in:
lib/wavefront-cli/query.rb

Overview

CLI coverage for the v2 ‘query’ API.

Constant Summary

Constants included from Constants

Constants::ALL_PAGE_SIZE, Constants::DEFAULT_CONFIG, Constants::DEFAULT_OPTS, Constants::HUMAN_TIME_FORMAT, Constants::HUMAN_TIME_FORMAT_MS

Instance Attribute Summary collapse

Attributes inherited from Base

#klass, #klass_word, #options, #wf

Instance Method Summary collapse

Methods inherited from Base

#_sdk_class, #cannot_noop!, #check_status, #conds_to_query, #dispatch, #display, #display_api_error, #display_no_api_response, #do_delete, #do_describe, #do_import, #do_list, #do_search, #do_undelete, #do_update, #extract_values, #failed_validation_message, #format_var, #handle_error, #handle_response, #hcl_fields, #import_to_create, #initialize, #load_display_class, #load_file, #load_from_stdin, #mk_creds, #mk_opts, #ok_exit, #one_or_all, #options_and_exit, #parseable_output, #range_hash, #run, #search_key, #smart_delete, #smart_delete_message, #validate_id, #validate_input, #validate_opts, #validate_tags, #validator_exception, #validator_method

Constructor Details

This class inherits a constructor from WavefrontCli::Base

Instance Attribute Details

#query_stringObject (readonly)

Returns the value of attribute query_string.



9
10
11
# File 'lib/wavefront-cli/query.rb', line 9

def query_string
  @query_string
end

Instance Method Details

#all_aliasesHash



115
116
117
118
119
# File 'lib/wavefront-cli/query.rb', line 115

def all_aliases
  WavefrontCli::OptHandler.new(options).opts.select do |line|
    line.to_s.start_with?('q_')
  end
end

#default_granularity(window) ⇒ Object

Work out a sensible granularity based on the time window



90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/wavefront-cli/query.rb', line 90

def default_granularity(window)
  window = window.abs / 1000

  if window < 300
    :s
  elsif window < 10_800
    :m
  elsif window < 259_200
    :h
  else
    :d
  end
end

#do_aliasesObject



46
47
48
# File 'lib/wavefront-cli/query.rb', line 46

def do_aliases
  all_aliases
end

#do_defaultObject



17
18
19
20
21
22
23
24
25
26
# File 'lib/wavefront-cli/query.rb', line 17

def do_default
  qs = query_string || options[:'<query>']

  t_start     = window_start
  t_end       = window_end
  granularity = granularity(t_start, t_end)
  t_end       = nil unless options[:end]

  wf.query(qs, granularity, t_start, t_end, q_opts)
end

#do_rawObject



28
29
30
31
# File 'lib/wavefront-cli/query.rb', line 28

def do_raw
  wf.raw(options[:'<metric>'], options[:host], options[:start],
         options[:end])
end

#do_runObject



33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/wavefront-cli/query.rb', line 33

def do_run
  alias_key = format('q_%s', options[:'<alias>']).to_sym
  query = all_aliases.fetch(alias_key, nil)

  unless query
    abort "Query not found. 'wf query aliases' will show all " \
          'aliased queries.'
  end

  @query_string = query
  do_default
end

#extra_validationObject



104
105
106
107
108
109
110
111
# File 'lib/wavefront-cli/query.rb', line 104

def extra_validation
  return unless options[:granularity]
  begin
    wf_granularity?(options[:granularity])
  rescue Wavefront::Exception::InvalidGranularity
    abort "'#{options[:granularity]}' is not a valid granularity."
  end
end

#granularity(t_start, t_end) ⇒ Object



84
85
86
# File 'lib/wavefront-cli/query.rb', line 84

def granularity(t_start, t_end)
  options[:granularity] || default_granularity(t_start - t_end)
end

#no_api_responseObject



13
14
15
# File 'lib/wavefront-cli/query.rb', line 13

def no_api_response
  %w[do_aliases]
end

#q_optsHash

rubocop:disable Metrics/AbcSize



53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'lib/wavefront-cli/query.rb', line 53

def q_opts
  ret = { autoEvents:             options[:events],
          i:                      options[:inclusive],
          summarization:          options[:summarize] || 'mean',
          listMode:               true,
          strict:                 true,
          includeObsoleteMetrics: options[:obsolete],
          sorted:                 true }

  ret[:n] = options[:name] if options[:name]
  ret[:p] = options[:points] if options[:points]
  ret
end

#window_endInteger



79
80
81
82
# File 'lib/wavefront-cli/query.rb', line 79

def window_end
  t = options[:end] ? options[:end].dup : Time.now
  parse_time(t, true)
end

#window_startInteger



71
72
73
74
# File 'lib/wavefront-cli/query.rb', line 71

def window_start
  t = options[:start] ? options[:start].dup : Time.now - 600
  parse_time(t, true)
end