doc_subscriber.rb 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. module Docs
  2. class DocSubscriber < Subscriber
  3. self.namespace = 'doc'
  4. def index(event)
  5. before, after = parse_payload(event)
  6. log "Entries:"
  7. log_diff before['entries'], after['entries'], 'name'
  8. log "Types:"
  9. log_diff before['types'], after['types'], 'name'
  10. end
  11. def db(event)
  12. before, after = parse_payload(event)
  13. log "Files:"
  14. log_diff before.keys, after.keys
  15. end
  16. def info(event)
  17. log event.payload[:msg]
  18. end
  19. def error(event)
  20. exception = event.payload[:exception]
  21. log "ERROR:"
  22. puts " #{event.payload[:url]}"
  23. puts " #{exception.class}: #{exception.message.gsub("\n", "\n ")}"
  24. puts exception.backtrace.select { |line| line.start_with?(Docs.root_path) }.join("\n ").prepend("\n ")
  25. puts "\n"
  26. end
  27. private
  28. def parse_payload(event)
  29. [JSON.parse(event.payload[:before]), JSON.parse(event.payload[:after])]
  30. end
  31. def log_diff(before, after, prop = nil)
  32. before ||= []
  33. after ||= []
  34. if prop
  35. before = before.map { |obj| obj[prop] }
  36. after = after.map { |obj| obj[prop] }
  37. end
  38. created, updated, deleted = (after - before), (before & after), (before - after)
  39. log " Updated: #{updated.length}"
  40. log " Created: #{created.length}"
  41. created.each { |str| log " + #{str}" }
  42. log " Deleted: #{deleted.length}"
  43. deleted.each { |str| log " - #{str}" }
  44. end
  45. end
  46. end