detailed_log_subscriber.rb 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. module ActiveResource
  2. class DetailedLogSubscriber < ActiveSupport::LogSubscriber
  3. VERSION_EOL_WARNING_HEADER = 'x-shopify-api-version-warning'
  4. VERSION_DEPRECATION_HEADER = 'x-shopify-api-deprecated-reason'
  5. def request(event)
  6. log_request_response_details(event)
  7. warn_on_deprecated_header_or_version_eol_header(event)
  8. end
  9. def logger
  10. ActiveResource::Base.logger
  11. end
  12. private
  13. def log_request_response_details(event)
  14. data = event.payload[:data]
  15. headers = data.extract_options!
  16. request_body = data.first
  17. info "Request:\n#{request_body}" if request_body
  18. info "Headers: #{headers.inspect}"
  19. info "Response:\n#{event.payload[:response].body}"
  20. end
  21. def warn_on_deprecated_header_or_version_eol_header(event)
  22. payload = event.payload
  23. payload[:response].each do |header_name, header_value|
  24. case header_name.downcase
  25. when VERSION_DEPRECATION_HEADER
  26. warning_message = <<-MSG
  27. [DEPRECATED] ShopifyAPI made a call to #{payload[:method].upcase} #{payload[:path]}, and this call made
  28. use of a deprecated endpoint, behaviour, or parameter. See #{header_value} for more details.
  29. MSG
  30. warn warning_message
  31. when VERSION_EOL_WARNING_HEADER
  32. warning_message = <<-MSG
  33. [Version EOL Warning] ShopifyAPI made a call to #{payload[:method].upcase} #{payload[:path]}, and this call made
  34. use of an API version that is expired or will expire within 30 days. See #{header_value} for more details.
  35. MSG
  36. warn warning_message
  37. end
  38. end
  39. end
  40. end
  41. end
  42. ActiveResource::DetailedLogSubscriber.attach_to :active_resource_detailed