소스 검색

Create service to run main statements

Andrew Kane 8 년 전
부모
커밋
f3882f92e7
5개의 변경된 파일41개의 추가작업 그리고 39개의 파일을 삭제
  1. 1 1
      app/controllers/blazer/queries_controller.rb
  2. 1 0
      lib/blazer.rb
  3. 0 37
      lib/blazer/data_source.rb
  4. 38 0
      lib/blazer/run_statement.rb
  5. 1 1
      lib/blazer/run_statement_job.rb

+ 1 - 1
app/controllers/blazer/queries_controller.rb

@@ -114,7 +114,7 @@ module Blazer
           end
           @result = result.first
         else
-          @result = @data_source.run_main_statement(@statement, options)
+          @result = RunStatement.new.perform(@data_source, @statement, options)
         end
 
         if @result

+ 1 - 0
lib/blazer.rb

@@ -5,6 +5,7 @@ require "safely/core"
 require "blazer/version"
 require "blazer/data_source"
 require "blazer/result"
+require "blazer/run_statement"
 require "blazer/adapters/active_record_adapter"
 require "blazer/engine"
 

+ 0 - 37
lib/blazer/data_source.rb

@@ -76,43 +76,6 @@ module Blazer
       @local_time_suffix ||= Array(settings["local_time_suffix"])
     end
 
-    def run_main_statement(statement, options = {})
-      query = options[:query]
-      Blazer.transform_statement.call(self, statement) if Blazer.transform_statement
-
-      # audit
-      if Blazer.audit
-        audit = Blazer::Audit.new(statement: statement)
-        audit.query = query
-        audit.data_source = id
-        audit.user = options[:user]
-        audit.save!
-      end
-
-      start_time = Time.now
-      result = run_statement(statement, options)
-      duration = Time.now - start_time
-
-      if Blazer.audit
-        audit.duration = duration if audit.respond_to?(:duration=)
-        audit.error = result.error if audit.respond_to?(:error=)
-        audit.timed_out = result.timed_out? if audit.respond_to?(:timed_out=)
-        audit.cached = result.cached? if audit.respond_to?(:cached=)
-        if !result.cached? && duration >= 10
-          audit.cost = cost(statement) if audit.respond_to?(:cost=)
-        end
-        audit.save! if audit.changed?
-      end
-
-      if query && !result.timed_out?
-        query.checks.each do |check|
-          check.update_state(result)
-        end
-      end
-
-      result
-    end
-
     def read_cache(cache_key)
       value = Blazer.cache.read(cache_key)
       if value

+ 38 - 0
lib/blazer/run_statement.rb

@@ -0,0 +1,38 @@
+class RunStatement
+  def perform(data_source, statement, options = {})
+    query = options[:query]
+    Blazer.transform_statement.call(data_source, statement) if Blazer.transform_statement
+
+    # audit
+    if Blazer.audit
+      audit = Blazer::Audit.new(statement: statement)
+      audit.query = query
+      audit.data_source = data_source.id
+      audit.user = options[:user]
+      audit.save!
+    end
+
+    start_time = Time.now
+    result = data_source.run_statement(statement, options)
+    duration = Time.now - start_time
+
+    if Blazer.audit
+      audit.duration = duration if audit.respond_to?(:duration=)
+      audit.error = result.error if audit.respond_to?(:error=)
+      audit.timed_out = result.timed_out? if audit.respond_to?(:timed_out=)
+      audit.cached = result.cached? if audit.respond_to?(:cached=)
+      if !result.cached? && duration >= 10
+        audit.cost = data_source.cost(statement) if audit.respond_to?(:cost=)
+      end
+      audit.save! if audit.changed?
+    end
+
+    if query && !result.timed_out?
+      query.checks.each do |check|
+        check.update_state(result)
+      end
+    end
+
+    result
+  end
+end

+ 1 - 1
lib/blazer/run_statement_job.rb

@@ -8,7 +8,7 @@ module Blazer
     def perform(result, data_source, statement, options)
       ActiveRecord::Base.connection_pool.with_connection do
         data_source.connection_model.connection_pool.with_connection do
-          result << data_source.run_main_statement(statement, options)
+          result << RunStatement.new.perform(data_source, statement, options)
         end
       end
     end