Class: Blazer::DataSource
- Inherits:
-
Object
- Object
- Blazer::DataSource
- Extended by:
- Forwardable
- Defined in:
- lib/blazer/data_source.rb
Instance Attribute Summary collapse
-
#adapter ⇒ Object
readonly
Returns the value of attribute adapter.
-
#adapter_instance ⇒ Object
readonly
Returns the value of attribute adapter_instance.
-
#id ⇒ Object
readonly
Returns the value of attribute id.
-
#settings ⇒ Object
readonly
Returns the value of attribute settings.
Instance Method Summary collapse
- #cache ⇒ Object
- #cache_expires_in ⇒ Object
- #cache_key(key) ⇒ Object
- #cache_mode ⇒ Object
- #cache_slow_threshold ⇒ Object
- #clear_cache(statement) ⇒ Object
- #delete_results(run_id) ⇒ Object
-
#initialize(id, settings) ⇒ DataSource
constructor
A new instance of DataSource.
- #linked_columns ⇒ Object
- #local_time_suffix ⇒ Object
- #name ⇒ Object
- #read_cache(cache_key) ⇒ Object
- #run_cache_key(run_id) ⇒ Object
- #run_results(run_id) ⇒ Object
- #run_statement(statement, options = {}) ⇒ Object
- #smart_columns ⇒ Object
- #smart_variables ⇒ Object
- #statement_cache_key(statement) ⇒ Object
- #timeout ⇒ Object
- #variable_defaults ⇒ Object
Constructor Details
#initialize(id, settings) ⇒ DataSource
Returns a new instance of DataSource.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/blazer/data_source.rb', line 11 def initialize(id, settings) @id = id @settings = settings unless settings["url"] || Rails.env.development? raise Blazer::Error, "Empty url" end @adapter_instance = case adapter when "elasticsearch" Blazer::Adapters::ElasticsearchAdapter.new(self) when "mongodb" Blazer::Adapters::MongodbAdapter.new(self) when "presto" Blazer::Adapters::PrestoAdapter.new(self) when "sql" Blazer::Adapters::SqlAdapter.new(self) else raise Blazer::Error, "Unknown adapter" end end |
Instance Attribute Details
#adapter ⇒ Object (readonly)
Returns the value of attribute adapter.
7 8 9 |
# File 'lib/blazer/data_source.rb', line 7 def adapter @adapter end |
#adapter_instance ⇒ Object (readonly)
Returns the value of attribute adapter_instance.
7 8 9 |
# File 'lib/blazer/data_source.rb', line 7 def adapter_instance @adapter_instance end |
#id ⇒ Object (readonly)
Returns the value of attribute id.
7 8 9 |
# File 'lib/blazer/data_source.rb', line 7 def id @id end |
#settings ⇒ Object (readonly)
Returns the value of attribute settings.
7 8 9 |
# File 'lib/blazer/data_source.rb', line 7 def settings @settings end |
Instance Method Details
#cache ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/blazer/data_source.rb', line 62 def cache @cache ||= begin if settings["cache"].is_a?(Hash) settings["cache"] elsif settings["cache"] { "mode" => "all", "expires_in" => settings["cache"] } else { "mode" => "off" } end end end |
#cache_expires_in ⇒ Object
83 84 85 |
# File 'lib/blazer/data_source.rb', line 83 def cache_expires_in (cache["expires_in"] || 60).to_f end |
#cache_key(key) ⇒ Object
142 143 144 |
# File 'lib/blazer/data_source.rb', line 142 def cache_key(key) (["blazer", "v4"] + key).join("/") end |
#cache_mode ⇒ Object
79 80 81 |
# File 'lib/blazer/data_source.rb', line 79 def cache_mode cache["mode"] end |
#cache_slow_threshold ⇒ Object
87 88 89 |
# File 'lib/blazer/data_source.rb', line 87 def cache_slow_threshold (cache["slow_threshold"] || 15).to_f end |
#clear_cache(statement) ⇒ Object
138 139 140 |
# File 'lib/blazer/data_source.rb', line 138 def clear_cache(statement) Blazer.cache.delete(statement_cache_key(statement)) end |
#delete_results(run_id) ⇒ Object
106 107 108 |
# File 'lib/blazer/data_source.rb', line 106 def delete_results(run_id) Blazer.cache.delete(run_cache_key(run_id)) end |
#linked_columns ⇒ Object
42 43 44 |
# File 'lib/blazer/data_source.rb', line 42 def linked_columns settings["linked_columns"] || {} end |
#local_time_suffix ⇒ Object
91 92 93 |
# File 'lib/blazer/data_source.rb', line 91 def local_time_suffix @local_time_suffix ||= Array(settings["local_time_suffix"]) end |
#name ⇒ Object
38 39 40 |
# File 'lib/blazer/data_source.rb', line 38 def name settings["name"] || @id end |
#read_cache(cache_key) ⇒ Object
95 96 97 98 99 100 |
# File 'lib/blazer/data_source.rb', line 95 def read_cache(cache_key) value = Blazer.cache.read(cache_key) if value Blazer::Result.new(self, *Marshal.load(value), nil) end end |
#run_cache_key(run_id) ⇒ Object
150 151 152 |
# File 'lib/blazer/data_source.rb', line 150 def run_cache_key(run_id) cache_key(["run", run_id]) end |
#run_results(run_id) ⇒ Object
102 103 104 |
# File 'lib/blazer/data_source.rb', line 102 def run_results(run_id) read_cache(run_cache_key(run_id)) end |
#run_statement(statement, options = {}) ⇒ Object
110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 |
# File 'lib/blazer/data_source.rb', line 110 def run_statement(statement, = {}) run_id = [:run_id] result = nil if cache_mode != "off" && ![:refresh_cache] result = read_cache(statement_cache_key(statement)) end unless result comment = "blazer" if [:user].respond_to?(:id) comment << ",user_id:#{options[:user].id}" end if [:user].respond_to?(Blazer.user_name) # only include letters, numbers, and spaces to prevent injection comment << ",user_name:#{options[:user].send(Blazer.user_name).to_s.gsub(/[^a-zA-Z0-9 ]/, "")}" end if [:query].respond_to?(:id) comment << ",query_id:#{options[:query].id}" end if [:check] comment << ",check_id:#{options[:check].id},check_emails:#{options[:check].emails}" end result = run_statement_helper(statement, comment, [:run_id]) end result end |
#smart_columns ⇒ Object
46 47 48 |
# File 'lib/blazer/data_source.rb', line 46 def smart_columns settings["smart_columns"] || {} end |
#smart_variables ⇒ Object
50 51 52 |
# File 'lib/blazer/data_source.rb', line 50 def smart_variables settings["smart_variables"] || {} end |
#statement_cache_key(statement) ⇒ Object
146 147 148 |
# File 'lib/blazer/data_source.rb', line 146 def statement_cache_key(statement) cache_key(["statement", id, Digest::MD5.hexdigest(statement)]) end |
#timeout ⇒ Object
58 59 60 |
# File 'lib/blazer/data_source.rb', line 58 def timeout settings["timeout"] end |
#variable_defaults ⇒ Object
54 55 56 |
# File 'lib/blazer/data_source.rb', line 54 def variable_defaults settings["variable_defaults"] || {} end |