module KibanaUrl
Constructs URLs for Kibana queries.
Constants
- SORT_MODES
possible sort modes
- STANDARD_PATH
stuff after the base URL
- TIME_SCOPE_MODES
possible time scoping modes
Attributes
Public Class Methods
# File lib/kibana_url.rb, line 36 def configure self.config ||= {} yield config end
# File lib/kibana_url.rb, line 68 def generate( log_spout: config&.[](:index_patterns)&.keys&.first, columns: ['_source'], query: '*', sort: { log_param_name: 'time', mode: :desc }, refresh_interval: nil, time_scope: { mode: :relative } ) if config.nil? || config[:index_patterns].empty? || config[:kibana_base_url].empty? raise NotConfiguredError end # There are two params in Kibana URLs. # Each have multiple arguments comma separated. a_params = [] a_params << columns_param(columns) a_params << spout_param(log_spout) a_params << interval_param a_params << query_param(query) a_params << sort_param(sort) a_params_str = a_params.compact.join(',') # comma delimit params g_params = [] g_params << refresh_interval_param(refresh_interval) g_params << time_scope_param(time_scope) g_params_str = g_params.compact.join(',') # comma delimit params "#{config[:kibana_base_url]}#{STANDARD_PATH}?" \ "_g=(#{g_params_str})&_a=(#{a_params_str})" end
Private Class Methods
Method to construct columns params in query. “columns:!(col_1,col_2,…,col_n)”
# File lib/kibana_url.rb, line 104 def columns_param(column_names) column_names.map! { |name| escape(name) } "columns:!(#{column_names.join(',')})" end
Translates a time into a date-time string for Kibana
# File lib/kibana_url.rb, line 162 def date_time_str(time) "#{time.utc.strftime('%Y-%m-%d')}T#{time.utc.strftime('%H:%M:%S.%L')}Z" end
Alias for URL escaping.
# File lib/kibana_url.rb, line 167 def escape(str) CGI.escape(str) end
Method for interval - unclear what this does. “interval:auto”
# File lib/kibana_url.rb, line 117 def interval_param "interval:auto" end
Method for query param. “query:(query_string:(analyze_wildcard:!t,query:'<url escaped query>'))”
# File lib/kibana_url.rb, line 123 def query_param(raw_query_str) "query:(query_string:(analyze_wildcard:" \ "!t,query:'#{escape(raw_query_str)}'))" end
Method to set the refresh interval. “refreshInterval:(display:'<num seconds string>',” \ “pause:!f,section:1,value:<num milliseconds>)”
# File lib/kibana_url.rb, line 137 def refresh_interval_param(seconds) return nil unless seconds "refreshInterval:(display:'#{seconds}%20seconds'," \ "pause:!f,section:1,value:#{seconds * 1000})" end
Method to set a particular sort on the logs. “sort:!(<log param name>,<sort mode: :desc or :asc>)”
# File lib/kibana_url.rb, line 130 def sort_param(log_param_name: 'time', mode: :desc) "sort:!(#{escape(log_param_name)},#{mode})" end
Method determines correct index pattern (stream from which to draw logs). “index:'<spout name>'”
# File lib/kibana_url.rb, line 111 def spout_param(spout_name) "index:'#{config[:index_patterns][spout_name]}'" end
Method to set a time scope for the query. Creates “time:(from:<from Time>,mode:<mode>,to:<from Time>)” or nil
# File lib/kibana_url.rb, line 145 def time_scope_param( mode: :relative, from: Time.now - (15 * 60), to: Time.now ) if mode == :relative to_str = 'now' num_seconds_ago = Time.now.to_i - from.to_i from_str = "now-#{num_seconds_ago}s" elsif mode == :absolute to_str = date_time_str(to) from_str = date_time_str(from) end "time:(from:'#{from_str}',mode:#{mode},to:'#{to_str}')" end