doc_subscriber.rb 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. size = event.payload[:after].bytesize
  8. size_diff = size - event.payload[:before].bytesize
  9. log "Entries: (#{(size / 1_000.0).ceil} KB, #{'+' if size_diff >= 0}#{(size_diff / 1_000.0).ceil} KB)"
  10. log_diff before['entries'], after['entries'], 'name'
  11. log "Types:"
  12. log_diff before['types'], after['types'], 'name'
  13. end
  14. def db(event)
  15. before, after = parse_payload(event)
  16. size = event.payload[:after].bytesize
  17. size_diff = size - event.payload[:before].bytesize
  18. log "Files: (#{(size / 1_000_000.0).ceil(1)} MB, #{'+' if size_diff >= 0}#{(size_diff / 1_000_000.0).ceil(1)} MB)"
  19. log_diff before.keys, after.keys
  20. end
  21. def info(event)
  22. log event.payload[:msg]
  23. end
  24. def error(event)
  25. exception = event.payload[:exception]
  26. log "ERROR:"
  27. puts " #{event.payload[:url]}"
  28. puts " #{exception.class}: #{exception.message.gsub("\n", "\n ")}"
  29. puts exception.backtrace.select { |line| line.start_with?(Docs.root_path) }.join("\n ").prepend("\n ")
  30. puts "\n"
  31. end
  32. private
  33. def parse_payload(event)
  34. [JSON.parse(event.payload[:before]), JSON.parse(event.payload[:after])]
  35. end
  36. def log_diff(before, after, prop = nil)
  37. before ||= []
  38. after ||= []
  39. if prop
  40. before = before.map { |obj| obj[prop] }
  41. after = after.map { |obj| obj[prop] }
  42. end
  43. created, updated, deleted = (after - before), (before & after), (before - after)
  44. log " Updated: #{updated.length}"
  45. log " Created: #{created.length}"
  46. created.each { |str| log " + #{str}" }
  47. log " Deleted: #{deleted.length}"
  48. deleted.each { |str| log " - #{str}" }
  49. end
  50. end
  51. end