doc_subscriber.rb 1.6 KB

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