lib/rorvswild.rb in rorvswild-0.2.3 vs lib/rorvswild.rb in rorvswild-0.3.0

- old
+ new

@@ -8,10 +8,23 @@ def self.new(*args) warn "WARNING: RorVsWild.new is deprecated. Use RorVsWild::Client.new instead." Client.new(*args) # Compatibility with 0.0.1 end + def self.detect_config_file + return if !defined?(Rails) + Rails::Railtie.initializer "rorvswild.detect_config_file" do + if !RorVsWild.default_client && (path = Rails.root.join("config/rorvswild.yml")).exist? + RorVsWild.load_config_file(path, Rails.env) + end + end + end + + def self.load_config_file(path, environment) + config = YAML.load_file(path)[environment.to_s] and Client.new(config.symbolize_keys) + end + def self.register_default_client(client) @default_client = client end def self.default_client @@ -41,20 +54,18 @@ class Client def self.default_config { api_url: "http://www.rorvswild.com/api", explain_sql_threshold: 500, - log_sql_threshold: 100, } end - attr_reader :api_url, :api_key, :app_id, :explain_sql_threshold, :log_sql_threshold, :app_root, :app_root_regex + attr_reader :api_url, :api_key, :app_id, :explain_sql_threshold, :app_root, :app_root_regex def initialize(config) config = self.class.default_config.merge(config) @explain_sql_threshold = config[:explain_sql_threshold] - @log_sql_threshold = config[:log_sql_threshold] @app_root = config[:app_root] @api_url = config[:api_url] @api_key = config[:api_key] @app_id = config[:app_id] @logger = config[:logger] @@ -101,17 +112,14 @@ rescue => exception log_error(exception) end def after_sql_query(name, start, finish, id, payload) - return if !queries || payload[:name] == "EXPLAIN".freeze - runtime, sql, plan = compute_duration(start, finish), nil, nil + return if !queries || payload[:name] == "EXPLAIN".freeze || payload[:name] == "SCHEMA".freeze file, line, method = extract_most_relevant_location(caller) - # I can't figure out the exact location which triggered the query, so at least the SQL is logged. - sql, file, line, method = payload[:sql], "Unknow", 0, "Unknow" if !file - sql = payload[:sql] if runtime >= log_sql_threshold - plan = explain(payload[:sql], payload[:binds]) if runtime >= explain_sql_threshold + runtime, sql = compute_duration(start, finish), payload[:sql] + plan = runtime >= explain_sql_threshold ? explain(payload[:sql], payload[:binds]) : nil push_query(file: file, line: line, method: method, sql: sql, plan: plan, runtime: runtime, times: 1) rescue => exception log_error(exception) end @@ -211,19 +219,16 @@ def cleanup_data @data.delete(Thread.current.object_id) end def push_query(query) - if query[:sql] || query[:plan] - queries << query + if hash = queries.find { |hash| hash[:line] == query[:line] && hash[:file] == query[:file] } + hash[:runtime] += query[:runtime] + hash[:plan] = query[:plan] + hash[:times] += 1 else - if hash = queries.find { |hash| hash[:line] == query[:line] && hash[:file] == query[:file] } - hash[:runtime] += query[:runtime] - hash[:times] += 1 - else - queries << query - end + queries << query end end def slowest_views views.values.sort { |h1, h2| h2[:runtime] <=> h1[:runtime] }[0, 25] @@ -318,12 +323,12 @@ def filter_environment_variables(hash) hash.clone.keep_if { |key,value| key == key.upcase } end def log_error(exception) - logger.puts("[RorVsWild] " + exception.inspect) - logger.puts("[RorVsWild] " + exception.backtrace.join("\n[RorVsWild] ")) + @logger.error("[RorVsWild] " + exception.inspect) + @logger.error("[RorVsWild] " + exception.backtrace.join("\n[RorVsWild] ")) end end DASH_PERFORM = "#perform".freeze @@ -337,5 +342,7 @@ def call(worker, item, queue, &block) RorVsWild.measure_block(item["class".freeze] + DASH_PERFORM, &block) end end end + +RorVsWild.detect_config_file