module Dripl::Formatter
Public Instance Methods
format_result(result)
click to toggle source
# File lib/dripl/formatter.rb, line 7 def format_result(result) return unless result if result.is_a?(Druid::Query::Builder) start_time = Time.now response = eval("source", binding).post(result) puts(format_query_response(result.query, response)) puts("Query took #{Time.now - start_time}s") else ap(result) end return # prevent default formatting end
Private Instance Methods
format_query_response(query, response)
click to toggle source
# File lib/dripl/formatter.rb, line 24 def format_query_response(query, response) ap(query.as_json) ap(response.as_json) return if response.empty? case query.queryType when "timeseries", "groupBy" format_timeseries_query_response(query, response) when "segmentMetadata" format_segment_metadata_response(query, response) end end
format_segment_metadata_response(query, response)
click to toggle source
# File lib/dripl/formatter.rb, line 60 def format_segment_metadata_response(query, response) columns = response.map { |row| row["columns"].keys } .to_a.flatten.uniq.sort Terminal::Table.new(:headings => columns) {} end
format_timeseries_query_response(query, response)
click to toggle source
# File lib/dripl/formatter.rb, line 45 def format_timeseries_query_response(query, response) response_key = response_key(query.queryType) keys = response.last[response_key].keys grouped_response = response.group_by { |x| x["timestamp"] } Terminal::Table.new(headings: keys) do grouped_response.each do |timestamp, rows| add_row(:separator) unless timestamp == response.first["timestamp"] add_row([{ value: timestamp, colspan: keys.length }]) add_row(:separator) rows.each { |row| add_row(keys.map { |key| row[response_key][key] }) } end end end
response_key(type)
click to toggle source
# File lib/dripl/formatter.rb, line 36 def response_key(type) case type when "timeseries" "result" when "groupBy" "event" end end