nulogy_message_bus_consumer 1.0.0.alpha → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (87) hide show
  1. checksums.yaml +4 -4
  2. data/lib/nulogy_message_bus_consumer.rb +16 -7
  3. data/lib/nulogy_message_bus_consumer/config.rb +7 -1
  4. data/lib/nulogy_message_bus_consumer/message.rb +11 -13
  5. data/lib/nulogy_message_bus_consumer/steps/timed_task.rb +42 -0
  6. data/lib/nulogy_message_bus_consumer/tasks/log_consumer_lag.rb +45 -0
  7. data/lib/nulogy_message_bus_consumer/tasks/prune_processed_messages.rb +37 -0
  8. data/lib/nulogy_message_bus_consumer/{steps → tasks}/supervise_consumer_lag.rb +15 -26
  9. data/lib/nulogy_message_bus_consumer/version.rb +1 -1
  10. data/spec/dummy/Rakefile +6 -0
  11. data/spec/dummy/app/assets/config/manifest.js +3 -0
  12. data/spec/dummy/app/assets/stylesheets/application.css +15 -0
  13. data/spec/dummy/app/channels/application_cable/channel.rb +4 -0
  14. data/spec/dummy/app/channels/application_cable/connection.rb +4 -0
  15. data/spec/dummy/app/controllers/application_controller.rb +2 -0
  16. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  17. data/spec/dummy/app/javascript/packs/application.js +15 -0
  18. data/spec/dummy/app/jobs/application_job.rb +7 -0
  19. data/spec/dummy/app/mailers/application_mailer.rb +4 -0
  20. data/spec/dummy/app/models/application_record.rb +3 -0
  21. data/spec/dummy/app/views/layouts/application.html.erb +14 -0
  22. data/spec/dummy/app/views/layouts/mailer.html.erb +13 -0
  23. data/spec/dummy/app/views/layouts/mailer.text.erb +1 -0
  24. data/spec/dummy/bin/rails +4 -0
  25. data/spec/dummy/bin/rake +4 -0
  26. data/spec/dummy/bin/setup +33 -0
  27. data/spec/dummy/config.ru +5 -0
  28. data/spec/dummy/config/application.rb +29 -0
  29. data/spec/dummy/config/boot.rb +5 -0
  30. data/spec/dummy/config/cable.yml +10 -0
  31. data/spec/dummy/config/credentials/message-bus-us-east-1.key +1 -0
  32. data/spec/dummy/config/credentials/message-bus-us-east-1.yml.enc +1 -0
  33. data/spec/dummy/config/database.yml +27 -0
  34. data/spec/dummy/config/environment.rb +5 -0
  35. data/spec/dummy/config/environments/development.rb +62 -0
  36. data/spec/dummy/config/environments/production.rb +112 -0
  37. data/spec/dummy/config/environments/test.rb +49 -0
  38. data/spec/dummy/config/initializers/application_controller_renderer.rb +8 -0
  39. data/spec/dummy/config/initializers/assets.rb +12 -0
  40. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  41. data/spec/dummy/config/initializers/content_security_policy.rb +28 -0
  42. data/spec/dummy/config/initializers/cookies_serializer.rb +5 -0
  43. data/spec/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  44. data/spec/dummy/config/initializers/inflections.rb +16 -0
  45. data/spec/dummy/config/initializers/message_bus_consumer.rb +5 -0
  46. data/spec/dummy/config/initializers/mime_types.rb +4 -0
  47. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  48. data/spec/dummy/config/locales/en.yml +33 -0
  49. data/spec/dummy/config/puma.rb +36 -0
  50. data/spec/dummy/config/routes.rb +3 -0
  51. data/spec/dummy/config/spring.rb +6 -0
  52. data/spec/dummy/config/storage.yml +34 -0
  53. data/spec/dummy/db/schema.rb +21 -0
  54. data/spec/dummy/log/development.log +4 -0
  55. data/spec/dummy/log/production.log +18 -0
  56. data/spec/dummy/log/test.log +7949 -0
  57. data/spec/dummy/public/404.html +67 -0
  58. data/spec/dummy/public/422.html +67 -0
  59. data/spec/dummy/public/500.html +66 -0
  60. data/spec/dummy/public/apple-touch-icon-precomposed.png +0 -0
  61. data/spec/dummy/public/apple-touch-icon.png +0 -0
  62. data/spec/dummy/public/favicon.ico +0 -0
  63. data/spec/dummy/tmp/development_secret.txt +1 -0
  64. data/spec/integration/nulogy_message_bus_consumer/auditor_spec.rb +59 -0
  65. data/spec/integration/nulogy_message_bus_consumer/kafka_utils_spec.rb +41 -0
  66. data/spec/integration/nulogy_message_bus_consumer/steps/commit_on_success_spec.rb +131 -0
  67. data/spec/integration/nulogy_message_bus_consumer/steps/connect_to_message_bus_spec.rb +53 -0
  68. data/spec/integration/nulogy_message_bus_consumer/tasks/prune_processed_messages_spec.rb +32 -0
  69. data/spec/integration/nulogy_message_bus_consumer/tasks/supervise_consumer_lag_spec.rb +33 -0
  70. data/spec/integration/test_topic_spec.rb +39 -0
  71. data/spec/spec_helper.rb +50 -0
  72. data/spec/support/kafka.rb +74 -0
  73. data/spec/support/middleware_tap.rb +12 -0
  74. data/spec/support/skip.rb +9 -0
  75. data/spec/support/test_topic.rb +48 -0
  76. data/spec/unit/nulogy_message_bus_consumer/config_spec.rb +20 -0
  77. data/spec/unit/nulogy_message_bus_consumer/lag_tracker.rb +35 -0
  78. data/spec/unit/nulogy_message_bus_consumer/message_spec.rb +84 -0
  79. data/spec/unit/nulogy_message_bus_consumer/pipeline_spec.rb +49 -0
  80. data/spec/unit/nulogy_message_bus_consumer/steps/commit_on_success_spec.rb +58 -0
  81. data/spec/unit/nulogy_message_bus_consumer/steps/deduplicate_messages_spec.rb +56 -0
  82. data/spec/unit/nulogy_message_bus_consumer/steps/log_messages_spec.rb +70 -0
  83. data/spec/unit/nulogy_message_bus_consumer/steps/stream_messages_spec.rb +35 -0
  84. data/spec/unit/nulogy_message_bus_consumer/tasks/calculator_spec.rb +67 -0
  85. data/spec/unit/nulogy_message_bus_consumer_spec.rb +30 -0
  86. metadata +167 -13
  87. data/lib/nulogy_message_bus_consumer/steps/log_consumer_lag.rb +0 -51
@@ -1,51 +0,0 @@
1
- module NulogyMessageBusConsumer
2
- module Steps
3
- class LogConsumerLag
4
- def initialize(logger)
5
- @logger = logger
6
- end
7
-
8
- def call(kafka_consumer:, **_)
9
- # Ensure that the process is terminated if there is a problem getting the consumption lag.
10
- # This also ensures that the process will terminate on-boot if it cannot connect to Kafka,
11
- # allowing the container to be terminated by ECS.
12
- Thread.abort_on_exception = true
13
-
14
- Thread.new do
15
- # Delayed start. If we attempt to read consumer#committed immediately, it may fail.
16
- # We suspect this is because the consumer#committed is called before the consumer
17
- # has finished connecting. There appears to be a race condition.
18
- KafkaUtils.wait_for_assignment(kafka_consumer)
19
-
20
- loop do
21
- lag_per_topic = kafka_consumer.lag(kafka_consumer.committed)
22
-
23
- @logger.info(JSON.dump({
24
- event: "consumer_lag",
25
- topics: Calculator.add_max_lag(lag_per_topic)
26
- }))
27
- $stdout.flush
28
-
29
- sleep 60
30
- end
31
- end
32
-
33
- yield
34
- end
35
-
36
- module Calculator
37
- def self.add_max_lag(lag_by_topic)
38
- lag_by_topic.each_value do |lag_by_partition|
39
- lag_by_partition[:_max] = lag_by_partition.values.max || 0
40
- end
41
-
42
- lag_by_topic[:_max] = lag_by_topic
43
- .map { |_topic, lag_by_partition| lag_by_partition[:_max] }
44
- .max || 0
45
-
46
- lag_by_topic
47
- end
48
- end
49
- end
50
- end
51
- end