run_statement.rb 1.2 KB

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