run_statement.rb 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. class RunStatement
  2. def perform(data_source, statement, options = {})
  3. query = options[:query]
  4. Blazer.transform_statement.call(data_source, statement) if Blazer.transform_statement
  5. # audit
  6. if Blazer.audit
  7. audit = Blazer::Audit.new(statement: statement)
  8. audit.query = query
  9. audit.data_source = data_source.id
  10. audit.user = options[:user]
  11. audit.save!
  12. end
  13. start_time = Time.now
  14. result = data_source.run_statement(statement, options)
  15. duration = Time.now - start_time
  16. if Blazer.audit
  17. audit.duration = duration if audit.respond_to?(:duration=)
  18. audit.error = result.error if audit.respond_to?(:error=)
  19. audit.timed_out = result.timed_out? if audit.respond_to?(:timed_out=)
  20. audit.cached = result.cached? if audit.respond_to?(:cached=)
  21. if !result.cached? && duration >= 10
  22. audit.cost = data_source.cost(statement) if audit.respond_to?(:cost=)
  23. end
  24. audit.save! if audit.changed?
  25. end
  26. if query && !result.timed_out?
  27. query.checks.each do |check|
  28. check.update_state(result)
  29. end
  30. end
  31. result
  32. end
  33. end