doc_subscriber.rb 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  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 warn(event)
  25. log "ERROR: #{event.payload[:msg]}"
  26. end
  27. def error(event)
  28. exception = event.payload[:exception]
  29. log "ERROR:"
  30. puts " #{event.payload[:url]}"
  31. puts " #{exception.class}: #{exception.message.gsub("\n", "\n ")}"
  32. puts exception.backtrace.select { |line| line.start_with?(Docs.root_path) }.join("\n ").prepend("\n ")
  33. puts "\n"
  34. end
  35. private
  36. def parse_payload(event)
  37. [JSON.parse(event.payload[:before]), JSON.parse(event.payload[:after])]
  38. end
  39. def log_diff(before, after, prop = nil)
  40. before ||= []
  41. after ||= []
  42. if prop
  43. before = before.map { |obj| obj[prop] }
  44. after = after.map { |obj| obj[prop] }
  45. end
  46. created, updated, deleted = (after - before), (before & after), (before - after)
  47. log " Updated: #{updated.length}"
  48. log " Created: #{created.length}"
  49. created.each { |str| log " + #{str}" }
  50. log " Deleted: #{deleted.length}"
  51. deleted.each { |str| log " - #{str}" }
  52. end
  53. end
  54. end