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