rockstart 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (240) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -0
  3. data/lib/generators/rockstart/authorization/USAGE +9 -0
  4. data/lib/generators/rockstart/authorization/auth0/USAGE +10 -0
  5. data/lib/generators/rockstart/authorization/auth0/auth0_generator.rb +49 -0
  6. data/lib/generators/rockstart/authorization/auth0/templates/app/controllers/auth_controller.rb.tt +47 -0
  7. data/lib/generators/rockstart/authorization/auth0/templates/app/controllers/concerns/session_auth.rb +23 -0
  8. data/lib/generators/rockstart/authorization/auth0/templates/app/models/user.rb.tt +82 -0
  9. data/lib/generators/rockstart/authorization/auth0/templates/app/views/auth/new.html.erb +3 -0
  10. data/lib/generators/rockstart/authorization/auth0/templates/app/views/auth/sign_out.html.erb +1 -0
  11. data/lib/generators/rockstart/authorization/auth0/templates/auth0.en.yml +5 -0
  12. data/lib/generators/rockstart/authorization/auth0/templates/auth0_initializer.rb +27 -0
  13. data/lib/generators/rockstart/authorization/auth0/templates/auth0_util.rb.tt +38 -0
  14. data/lib/generators/rockstart/authorization/auth0/templates/auth0_util_spec.rb +21 -0
  15. data/lib/generators/rockstart/authorization/auth0/templates/spec/factories/users.rb.tt +32 -0
  16. data/lib/generators/rockstart/authorization/auth0/templates/spec/models/user_spec.rb.tt +91 -0
  17. data/lib/generators/rockstart/authorization/auth0/templates/spec/requests/auth_spec.rb +94 -0
  18. data/lib/generators/rockstart/authorization/auth0/templates/spec/support/auth_request_helper.rb +27 -0
  19. data/lib/generators/rockstart/authorization/authorization_generator.rb +29 -0
  20. data/lib/generators/rockstart/{devise → authorization/devise}/USAGE +3 -1
  21. data/lib/generators/rockstart/authorization/devise/devise_generator.rb +208 -0
  22. data/lib/generators/rockstart/authorization/devise/templates/add_devise_to_users_migration.rb.tt +50 -0
  23. data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/passwords_controller.rb +0 -0
  24. data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/registrations_controller.rb +0 -0
  25. data/lib/generators/rockstart/{devise → authorization/devise}/templates/controllers/sessions_controller.rb +0 -0
  26. data/lib/generators/rockstart/{devise → authorization/devise}/templates/create_user_migration.rb.tt +0 -0
  27. data/lib/generators/rockstart/{devise → authorization/devise}/templates/models/user.rb +14 -2
  28. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/factories/users.rb +0 -0
  29. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/models/user_spec.rb +9 -21
  30. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/passwords_spec.rb +0 -0
  31. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/registrations_spec.rb +2 -11
  32. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/requests/users/sessions_spec.rb +1 -38
  33. data/lib/generators/rockstart/{devise → authorization/devise}/templates/spec/support/devise_request_spec_helper.rb +0 -0
  34. data/lib/generators/rockstart/{devise → authorization/devise}/templates/translations.en.yml +0 -0
  35. data/lib/generators/rockstart/{pundit → authorization/pundit}/USAGE +1 -1
  36. data/lib/generators/rockstart/authorization/pundit/pundit_generator.rb +41 -0
  37. data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/app/controllers/concerns/pundit_error_handling.rb +0 -0
  38. data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/app/policies/application_policy.rb +0 -0
  39. data/lib/generators/rockstart/{pundit/templates/app/policies/user_policy.rb → authorization/pundit/templates/app/policies/user_policy.rb.tt} +4 -0
  40. data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/config/locales/pundit.en.yml +0 -0
  41. data/lib/generators/rockstart/authorization/pundit/templates/lib/admin_constraint.rb +11 -0
  42. data/lib/generators/rockstart/{pundit/templates/lib/templates/pundit/policy/policy.rb → authorization/pundit/templates/scaffold/policy.rb.tt} +0 -0
  43. data/lib/generators/rockstart/{pundit/templates/lib/templates/rspec/policy/policy_spec.rb → authorization/pundit/templates/scaffold/policy_spec.rb.tt} +0 -0
  44. data/lib/generators/rockstart/{pundit/templates/spec/policies/user_policy_spec.rb → authorization/pundit/templates/spec/policies/user_policy_spec.rb.tt} +43 -5
  45. data/lib/generators/rockstart/{pundit → authorization/pundit}/templates/spec/support/pundit_matchers.rb +0 -0
  46. data/lib/generators/rockstart/deployment/USAGE +8 -0
  47. data/lib/generators/rockstart/deployment/deployment_generator.rb +78 -0
  48. data/lib/generators/rockstart/{docker → deployment/docker}/USAGE +0 -0
  49. data/lib/generators/rockstart/deployment/docker/docker_generator.rb +70 -0
  50. data/lib/generators/rockstart/{docker → deployment/docker}/templates/app/Dockerfile-app +6 -5
  51. data/lib/generators/rockstart/{docker → deployment/docker}/templates/docker-compose.test.yml +5 -2
  52. data/lib/generators/rockstart/deployment/docker/templates/docker-compose.yml +74 -0
  53. data/lib/generators/rockstart/{docker → deployment/docker}/templates/dockerignore +0 -0
  54. data/lib/generators/rockstart/deployment/docker/templates/dotenv.docker-db.tt +3 -0
  55. data/lib/generators/rockstart/deployment/docker/templates/dotenv.docker.tt +20 -0
  56. data/lib/generators/rockstart/{docker → deployment/docker}/templates/web/Dockerfile-web +0 -0
  57. data/lib/generators/rockstart/{docker → deployment/docker}/templates/web/nginx.conf +24 -1
  58. data/lib/generators/rockstart/deployment/heroku/USAGE +9 -0
  59. data/lib/generators/rockstart/deployment/heroku/heroku_generator.rb +50 -0
  60. data/lib/generators/rockstart/deployment/heroku/templates/Procfile.tt +5 -0
  61. data/lib/generators/rockstart/deployment/heroku/templates/app.json.tt +50 -0
  62. data/lib/generators/rockstart/deployment/heroku/templates/deploy-heroku.tt +42 -0
  63. data/lib/generators/rockstart/deployment/heroku/templates/heroku.rake.tt +25 -0
  64. data/lib/generators/rockstart/deployment/heroku/templates/slugignore +3 -0
  65. data/lib/generators/rockstart/deployment/nginx/USAGE +8 -0
  66. data/lib/generators/rockstart/deployment/nginx/nginx_generator.rb +20 -0
  67. data/lib/generators/rockstart/deployment/templates/hooks-postdeploy.tt +22 -0
  68. data/lib/generators/rockstart/deployment/templates/hooks-release.tt +17 -0
  69. data/lib/generators/rockstart/deployment/templates/rack_deflater_spec.rb +28 -0
  70. data/lib/generators/rockstart/deployment/templates/web.tt +3 -0
  71. data/lib/generators/rockstart/deployment/templates/worker.tt +3 -0
  72. data/lib/generators/rockstart/development/USAGE +10 -0
  73. data/lib/generators/rockstart/development/audited/USAGE +10 -0
  74. data/lib/generators/rockstart/development/audited/audited_generator.rb +35 -0
  75. data/lib/generators/rockstart/development/audited/templates/audit.rb.tt +35 -0
  76. data/lib/generators/rockstart/development/audited/templates/audit_spec.rb.tt +54 -0
  77. data/lib/generators/rockstart/development/audited/templates/audited_initializer.rb +5 -0
  78. data/lib/generators/rockstart/development/audited/templates/audited_support.rb +3 -0
  79. data/lib/generators/rockstart/development/audited/templates/install_audited.rb.tt +45 -0
  80. data/lib/generators/rockstart/development/development_generator.rb +42 -0
  81. data/lib/generators/rockstart/development/env/USAGE +8 -0
  82. data/lib/generators/rockstart/development/env/env_generator.rb +17 -0
  83. data/lib/generators/rockstart/development/env/templates/dotenv.development.tt +4 -0
  84. data/lib/generators/rockstart/development/friendly_id/USAGE +8 -0
  85. data/lib/generators/rockstart/development/friendly_id/friendly_id_generator.rb +15 -0
  86. data/lib/generators/rockstart/development/friendly_id/templates/friendly_id_initializer.rb +52 -0
  87. data/lib/generators/rockstart/development/generator_overrides/USAGE +8 -0
  88. data/lib/generators/rockstart/development/generator_overrides/generator_overrides_generator.rb +31 -0
  89. data/lib/generators/rockstart/development/generator_overrides/templates/resource_route_generator.rb.tt +54 -0
  90. data/lib/generators/rockstart/development/localhost_setup/USAGE +8 -0
  91. data/lib/generators/rockstart/development/localhost_setup/localhost_setup_generator.rb +34 -0
  92. data/lib/generators/rockstart/{docker → development/localhost_setup}/templates/localhost_domains.ext.tt +0 -0
  93. data/lib/generators/rockstart/{docker → development/localhost_setup}/templates/setup-localhost.tt +5 -5
  94. data/lib/generators/rockstart/development/readme/USAGE +8 -0
  95. data/lib/generators/rockstart/development/readme/readme_generator.rb +18 -0
  96. data/lib/generators/rockstart/development/readme/templates/README.md +74 -0
  97. data/lib/generators/rockstart/development/rebuild/USAGE +8 -0
  98. data/lib/generators/rockstart/development/rebuild/rebuild_generator.rb +21 -0
  99. data/lib/generators/rockstart/development/rebuild/templates/rockstart.tt +28 -0
  100. data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/USAGE +1 -1
  101. data/lib/generators/rockstart/development/scaffolds/scaffolds_generator.rb +46 -0
  102. data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/templates/api_controller.rb.tt +15 -7
  103. data/lib/generators/rockstart/{scaffold_templates → development/scaffolds}/templates/controller.rb.tt +18 -9
  104. data/lib/generators/rockstart/development/scaffolds/templates/factory_bot/factories.erb +8 -0
  105. data/lib/generators/rockstart/development/scaffolds/templates/model.rb.tt +61 -0
  106. data/lib/generators/rockstart/development/scaffolds/templates/rspec/api_request_spec.rb.tt +142 -0
  107. data/lib/generators/rockstart/development/scaffolds/templates/rspec/model_spec.rb.tt +35 -0
  108. data/lib/generators/rockstart/development/scaffolds/templates/rspec/request_spec.rb.tt +492 -0
  109. data/lib/generators/rockstart/frontend_app/USAGE +10 -0
  110. data/lib/generators/rockstart/frontend_app/application_urls/USAGE +8 -0
  111. data/lib/generators/rockstart/frontend_app/application_urls/application_urls_generator.rb +28 -0
  112. data/lib/generators/rockstart/{frontend_helpers → frontend_app/application_urls}/templates/application_urls.rb +0 -0
  113. data/lib/generators/rockstart/{frontend_helpers → frontend_app/application_urls}/templates/application_urls_helper.rb +0 -0
  114. data/lib/generators/rockstart/frontend_app/assets/USAGE +8 -0
  115. data/lib/generators/rockstart/frontend_app/assets/assets_generator.rb +11 -0
  116. data/lib/generators/rockstart/frontend_app/assets/templates/assets.rake +22 -0
  117. data/lib/generators/rockstart/frontend_app/frontend_app_generator.rb +38 -0
  118. data/lib/generators/rockstart/frontend_app/simple_form/USAGE +8 -0
  119. data/lib/generators/rockstart/frontend_app/simple_form/simple_form_generator.rb +9 -0
  120. data/lib/generators/rockstart/frontend_app/titles/USAGE +8 -0
  121. data/lib/generators/rockstart/{frontend_helpers → frontend_app/titles}/templates/titles.en.yml.tt +0 -0
  122. data/lib/generators/rockstart/frontend_app/titles/titles_generator.rb +22 -0
  123. data/lib/generators/rockstart/gemset/USAGE +8 -0
  124. data/lib/generators/rockstart/gemset/gemset_generator.rb +129 -0
  125. data/lib/generators/rockstart/mailers/USAGE +8 -0
  126. data/lib/generators/rockstart/mailers/mailers_generator.rb +7 -0
  127. data/lib/generators/rockstart/{smtp_mailer → mailers/smtp_mailer}/USAGE +0 -0
  128. data/lib/generators/rockstart/mailers/smtp_mailer/smtp_mailer_generator.rb +36 -0
  129. data/lib/generators/rockstart/{smtp_mailer/templates/config/initializers/action_mailer.rb → mailers/smtp_mailer/templates/action_mailer_initializer.rb} +0 -0
  130. data/lib/generators/rockstart/monitoring/USAGE +8 -0
  131. data/lib/generators/rockstart/{logging → monitoring/lograge}/USAGE +1 -1
  132. data/lib/generators/rockstart/monitoring/lograge/lograge_generator.rb +19 -0
  133. data/lib/generators/rockstart/monitoring/lograge/templates/lograge_initializer.rb +44 -0
  134. data/lib/generators/rockstart/monitoring/lograge/templates/lograge_util.rb +42 -0
  135. data/lib/generators/rockstart/monitoring/monitoring_generator.rb +35 -0
  136. data/lib/generators/rockstart/monitoring/okcomputer/USAGE +8 -0
  137. data/lib/generators/rockstart/monitoring/okcomputer/okcomputer_generator.rb +28 -0
  138. data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer.en.yml +5 -0
  139. data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer_initializer.rb.tt +34 -0
  140. data/lib/generators/rockstart/monitoring/okcomputer/templates/okcomputer_spec.rb +62 -0
  141. data/lib/generators/rockstart/monitoring/rollbar/USAGE +8 -0
  142. data/lib/generators/rockstart/monitoring/rollbar/rollbar_generator.rb +20 -0
  143. data/lib/generators/rockstart/monitoring/rollbar/templates/rollbar_initializer.rb.tt +80 -0
  144. data/lib/generators/rockstart/monitoring/sidekiq_ui/USAGE +8 -0
  145. data/lib/generators/rockstart/monitoring/sidekiq_ui/sidekiq_ui_generator.rb +38 -0
  146. data/lib/generators/rockstart/monitoring/sidekiq_ui/templates/sidekiq_spec.rb +32 -0
  147. data/lib/generators/rockstart/quality/quality_generator.rb +5 -16
  148. data/lib/generators/rockstart/quality/rubocop/USAGE +11 -0
  149. data/lib/generators/rockstart/quality/rubocop/rubocop_generator.rb +23 -0
  150. data/lib/generators/rockstart/quality/rubocop/templates/rubocop.rake +19 -0
  151. data/lib/generators/rockstart/quality/{templates → rubocop/templates}/rubocop.yml +0 -0
  152. data/lib/generators/rockstart/rockstart_generator.rb +13 -65
  153. data/lib/generators/rockstart/run/USAGE +17 -0
  154. data/lib/generators/rockstart/run/run_generator.rb +73 -0
  155. data/lib/generators/rockstart/security/brakeman/USAGE +9 -0
  156. data/lib/generators/rockstart/security/brakeman/brakeman_generator.rb +15 -0
  157. data/lib/generators/rockstart/security/{templates → brakeman/templates}/brakeman.rake +1 -1
  158. data/lib/generators/rockstart/security/bundler_audit/USAGE +8 -0
  159. data/lib/generators/rockstart/security/bundler_audit/bundler_audit_generator.rb +11 -0
  160. data/lib/generators/rockstart/security/bundler_audit/templates/bundler_audit.rake +14 -0
  161. data/lib/generators/rockstart/security/content_security/USAGE +8 -0
  162. data/lib/generators/rockstart/security/content_security/content_security_generator.rb +41 -0
  163. data/lib/generators/rockstart/security/{templates → content_security/templates}/content_security_policy_initializer.rb.tt +2 -2
  164. data/lib/generators/rockstart/security/{templates → content_security/templates}/content_security_spec.rb.tt +12 -13
  165. data/lib/generators/rockstart/security/{templates/csp_violations_controller.rb → content_security/templates/csp_violations_controller.rb.tt} +14 -6
  166. data/lib/generators/rockstart/security/{templates → content_security/templates}/session_store_initializer.rb.tt +1 -2
  167. data/lib/generators/rockstart/security/rack_attack/USAGE +8 -0
  168. data/lib/generators/rockstart/security/rack_attack/rack_attack_generator.rb +37 -0
  169. data/lib/generators/rockstart/security/{templates → rack_attack/templates}/cache_support.rb +1 -1
  170. data/lib/generators/rockstart/security/{templates/rack_attack.rb → rack_attack/templates/rack_attack_initializer.rb.tt} +34 -1
  171. data/lib/generators/rockstart/security/rack_attack/templates/rack_attack_spec.rb.tt +116 -0
  172. data/lib/generators/rockstart/security/security_generator.rb +20 -84
  173. data/lib/generators/rockstart/storage/USAGE +8 -0
  174. data/lib/generators/rockstart/storage/active_storage/USAGE +8 -0
  175. data/lib/generators/rockstart/storage/active_storage/active_storage_generator.rb +59 -0
  176. data/lib/generators/rockstart/storage/active_storage/templates/active_storage_initializer.rb +9 -0
  177. data/lib/generators/rockstart/storage/active_storage/templates/better_s3_service.rb +27 -0
  178. data/lib/generators/rockstart/storage/active_storage/templates/cloudcube_util.rb +30 -0
  179. data/lib/generators/rockstart/storage/active_storage/templates/cloudcube_util_spec.rb +73 -0
  180. data/lib/generators/rockstart/storage/active_storage/templates/storage.yml.tt +15 -0
  181. data/lib/generators/rockstart/storage/memcached/USAGE +8 -0
  182. data/lib/generators/rockstart/storage/memcached/memcached_generator.rb +27 -0
  183. data/lib/generators/rockstart/{postgres → storage/postgres}/USAGE +1 -1
  184. data/lib/generators/rockstart/storage/postgres/postgres_generator.rb +20 -0
  185. data/lib/generators/rockstart/{postgres → storage/postgres}/templates/config/database.yml.tt +6 -0
  186. data/lib/generators/rockstart/{postgres → storage/postgres}/templates/migration.rb.tt +0 -0
  187. data/lib/generators/rockstart/storage/storage_generator.rb +26 -0
  188. data/lib/generators/rockstart/testing/USAGE +9 -0
  189. data/lib/generators/rockstart/testing/env/USAGE +8 -0
  190. data/lib/generators/rockstart/testing/env/env_generator.rb +24 -0
  191. data/lib/generators/rockstart/testing/env/templates/climate_control_helpers_support.rb +14 -0
  192. data/lib/generators/rockstart/testing/env/templates/dotenv.test.tt +8 -0
  193. data/lib/generators/rockstart/{rspec → testing/rspec}/USAGE +1 -1
  194. data/lib/generators/rockstart/testing/rspec/rspec_generator.rb +52 -0
  195. data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/factory_bot.rb +0 -0
  196. data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/shoulda_matchers.rb +0 -0
  197. data/lib/generators/rockstart/{rspec → testing/rspec}/templates/support/test_helpers.rb +0 -0
  198. data/lib/generators/rockstart/testing/rspec/templates/support/vcr.rb +11 -0
  199. data/lib/generators/rockstart/testing/simplecov/USAGE +9 -0
  200. data/lib/generators/rockstart/testing/simplecov/simplecov_generator.rb +11 -0
  201. data/lib/generators/rockstart/testing/testing_generator.rb +24 -0
  202. data/lib/generators/rockstart/workers/USAGE +8 -0
  203. data/lib/generators/rockstart/workers/sidekiq/USAGE +9 -0
  204. data/lib/generators/rockstart/workers/sidekiq/sidekiq_generator.rb +29 -0
  205. data/lib/generators/rockstart/workers/sidekiq/templates/sidekiq.yml.tt +5 -0
  206. data/lib/generators/rockstart/workers/sidekiq/templates/sidekiq_initializer.rb +5 -0
  207. data/lib/generators/rockstart/workers/workers_generator.rb +18 -0
  208. data/lib/rockstart/base_generator.rb +4 -5
  209. data/lib/rockstart/env.rb +3 -1
  210. data/lib/rockstart/generators/class_option_helpers.rb +154 -0
  211. data/lib/rockstart/generators/content_security_options.rb +61 -0
  212. data/lib/rockstart/generators/migration_helpers.rb +30 -0
  213. data/lib/rockstart/generators/system_helpers.rb +14 -0
  214. data/lib/rockstart/generators/template_helpers.rb +27 -0
  215. data/lib/rockstart/version.rb +1 -1
  216. metadata +212 -83
  217. data/lib/generators/rockstart/devise/devise_generator.rb +0 -258
  218. data/lib/generators/rockstart/docker/docker_generator.rb +0 -86
  219. data/lib/generators/rockstart/docker/templates/docker-compose.yml +0 -47
  220. data/lib/generators/rockstart/docker/templates/dotenv.docker.tt +0 -4
  221. data/lib/generators/rockstart/frontend_helpers/USAGE +0 -8
  222. data/lib/generators/rockstart/frontend_helpers/frontend_helpers_generator.rb +0 -65
  223. data/lib/generators/rockstart/logging/logging_generator.rb +0 -12
  224. data/lib/generators/rockstart/logging/templates/rockstart/lograge_initializer.rb +0 -50
  225. data/lib/generators/rockstart/postgres/postgres_generator.rb +0 -32
  226. data/lib/generators/rockstart/pundit/pundit_generator.rb +0 -32
  227. data/lib/generators/rockstart/quality/templates/rubocop.rake +0 -4
  228. data/lib/generators/rockstart/rspec/rspec_generator.rb +0 -70
  229. data/lib/generators/rockstart/rspec/templates/dotenv.development +0 -1
  230. data/lib/generators/rockstart/rspec/templates/dotenv.test +0 -1
  231. data/lib/generators/rockstart/rspec/templates/rspec_templates/model/model_spec.rb +0 -13
  232. data/lib/generators/rockstart/scaffold_templates/scaffold_templates_generator.rb +0 -39
  233. data/lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/api_request_spec.rb +0 -139
  234. data/lib/generators/rockstart/scaffold_templates/templates/rspec/scaffold/request_spec.rb +0 -408
  235. data/lib/generators/rockstart/security/templates/bundler_audit.rake +0 -4
  236. data/lib/generators/rockstart/smtp_mailer/smtp_mailer_generator.rb +0 -30
  237. data/lib/generators/rockstart/tailwindcss/USAGE +0 -8
  238. data/lib/generators/rockstart/tailwindcss/tailwindcss_generator.rb +0 -30
  239. data/lib/generators/rockstart/tailwindcss/templates/application.css +0 -3
  240. data/lib/generators/rockstart/tailwindcss/templates/postcss.config.js +0 -32
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Utility functions used with Lograge generated by rockstart:security:lograge
4
+ module LogrageUtil
5
+ class << self
6
+ # format a throttle.rack_attack message from rack:attack
7
+ def format_rack_attack_throttle(name, start, finish, request_id, payload)
8
+ format_rack_attack_event(name, start, finish, request_id, payload, status: 429)
9
+ end
10
+
11
+ # format a blocklist.rack_attack message from rack:attack
12
+ def format_rack_attack_blocklist(name, start, finish, request_id, payload)
13
+ format_rack_attack_event(name, start, finish, request_id, payload, status: 403)
14
+ end
15
+
16
+ # rubocop:disable Metrics/AbcSize, Metrics/MethodLength, Metrics/ParameterLists
17
+ def format_rack_attack_event(name, start, finish, request_id, payload, status:)
18
+ req = payload[:request]
19
+ matched_rule = req.env["rack.attack.matched"]
20
+
21
+ filter_parameters = Rails.application.config.filter_parameters
22
+ params = ActiveSupport::ParameterFilter.new(filter_parameters).filter(req.params)
23
+ remote_ip = IpAnonymizer.mask_ip(req.ip) if req.ip.present?
24
+
25
+ message_payload = {
26
+ method: req.request_method,
27
+ path: req.path,
28
+ format: params[:format] || "html",
29
+ controller: Rack::Attack.name,
30
+ action: "#{name}[#{matched_rule}]",
31
+ status: status,
32
+ duration: (finish - start).to_f.round(2),
33
+ params: params.except("controller", "action", "format", "id"),
34
+ host: req.host,
35
+ remote_ip: remote_ip,
36
+ request_id: request_id
37
+ }
38
+ Lograge.lograge_config.formatter.call(message_payload)
39
+ end
40
+ # rubocop:enable Metrics/AbcSize, Metrics/MethodLength, Metrics/ParameterLists
41
+ end
42
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+
5
+ class Rockstart::MonitoringGenerator < Rails::Generators::Base
6
+ include Rockstart::Generators::ClassOptionHelpers
7
+
8
+ auth0_class_option
9
+ devise_class_option
10
+ memcached_class_option
11
+ rollbar_class_option
12
+ sidekiq_class_option
13
+
14
+ def generate_lograge
15
+ generate "rockstart:monitoring:lograge"
16
+ end
17
+
18
+ def generate_rollbar
19
+ return unless rollbar?
20
+
21
+ generate "rockstart:monitoring:rollbar",
22
+ auth0_option,
23
+ sidekiq_option
24
+ end
25
+
26
+ def generate_okcomputer
27
+ generate "rockstart:monitoring:okcomputer", memcached_option, sidekiq_option
28
+ end
29
+
30
+ def generate_sidekiq_ui
31
+ return unless sidekiq?
32
+
33
+ generate "rockstart:monitoring:sidekiq_ui", devise_option
34
+ end
35
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Adds a health check using OkComputer
3
+
4
+ Example:
5
+ rails generate rockstart:monitoring:okcomputer
6
+
7
+ This will create:
8
+ A /health route for monitoring health
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+ require "rockstart/generators/template_helpers"
5
+
6
+ module Rockstart::Monitoring
7
+ class OkcomputerGenerator < Rails::Generators::Base
8
+ include Rockstart::Generators::ClassOptionHelpers
9
+ include Rockstart::Generators::TemplateHelpers
10
+
11
+ source_root File.expand_path("templates", __dir__)
12
+
13
+ memcached_class_option
14
+ sidekiq_class_option
15
+
16
+ def add_initalizer
17
+ initializer_template "okcomputer"
18
+ end
19
+
20
+ def add_translations
21
+ copy_file "okcomputer.en.yml", "config/locales/okcomputer.en.yml"
22
+ end
23
+
24
+ def add_request_spec
25
+ copy_file "okcomputer_spec.rb", "spec/requests/okcomputer_spec.rb"
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,5 @@
1
+ en:
2
+ okcomputer:
3
+ check:
4
+ passed: "%{registrant_name}: [success] %{message}"
5
+ failed: "%{registrant_name}: [failure] %{message}"
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Log output to logger
4
+ OkComputer.logger = Rails.logger
5
+
6
+ # Require authentication
7
+ username = ENV.fetch("OKCOMPUTER_USERNAME", "okcomputer")
8
+ password = ENV.fetch("OKCOMPUTER_PASSWORD") { SecureRandom.hex }
9
+ OkComputer.require_authentication(username, password, except: %w[default])
10
+
11
+ # Cache
12
+ OkComputer::Registry.register "cache", OkComputer::GenericCacheCheck.new
13
+
14
+ <%- if memcached? -%>
15
+ # Cache (Memcached)
16
+ memcached_servers = ENV.fetch("MEMCACHE_SERVERS") { ENV.fetch("MEMCACHIER_SERVERS", "") }
17
+ memcached_servers.split(",").each_with_index do |cache_server, index|
18
+ memcached_check = index.zero? ? "memcached" : "memcached_#{index}"
19
+ OkComputer::Registry.register memcached_check, OkComputer::CacheCheck.new(cache_server)
20
+ end
21
+
22
+ <%- end -%>
23
+ <%- if sidekiq? -%>
24
+ # Redis
25
+ OkComputer::Registry.register "redis", OkComputer::RedisCheck.new(url: ENV["REDIS_URL"])
26
+
27
+ # Sidekiq
28
+ OkComputer::Registry.register "sidekiq-critical", OkComputer::SidekiqLatencyCheck.new("critical")
29
+ OkComputer::Registry.register "sidekiq-default", OkComputer::SidekiqLatencyCheck.new("default")
30
+ OkComputer::Registry.register "sidekiq-low", OkComputer::SidekiqLatencyCheck.new("low")
31
+
32
+ <%- end -%>
33
+ # mount at /health
34
+ OkComputer.mount_at = "health"
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper"
4
+
5
+ RSpec.describe "OkComputer", type: :request do
6
+ let(:http_authorization) do
7
+ username = OkComputer.username
8
+ password = OkComputer.password
9
+ ActionController::HttpAuthentication::Basic.encode_credentials(username, password)
10
+ end
11
+
12
+ describe "GET /health" do
13
+ it "responds with success", :aggregate_failures do
14
+ get "/health"
15
+ expect(response.body).to have_content("success")
16
+ expect(response.body).not_to have_content("failure")
17
+ expect(response).to have_http_status(:success)
18
+ end
19
+ end
20
+
21
+ describe "GET /health/all" do
22
+ it "responds with success", :aggregate_failures do
23
+ get "/health/all", headers: { "HTTP_AUTHORIZATION" => http_authorization }
24
+ expect(response.body).to have_content("success")
25
+ expect(response.body).not_to have_content("failure")
26
+ expect(response).to have_http_status(:success)
27
+ end
28
+
29
+ it "requires http authorization" do
30
+ get "/health/all"
31
+ expect(response).to have_http_status(:unauthorized)
32
+ end
33
+ end
34
+
35
+ describe "GET /health/cache" do
36
+ it "responds with success", :aggregate_failures do
37
+ get "/health/cache", headers: { "HTTP_AUTHORIZATION" => http_authorization }
38
+ expect(response.body).to have_content("success")
39
+ expect(response.body).not_to have_content("failure")
40
+ expect(response).to have_http_status(:success)
41
+ end
42
+
43
+ it "requires http authorization" do
44
+ get "/health/cache"
45
+ expect(response).to have_http_status(:unauthorized)
46
+ end
47
+ end
48
+
49
+ describe "GET /health/database" do
50
+ it "responds with success", :aggregate_failures do
51
+ get "/health/database", headers: { "HTTP_AUTHORIZATION" => http_authorization }
52
+ expect(response.body).to have_content("success")
53
+ expect(response.body).not_to have_content("failure")
54
+ expect(response).to have_http_status(:success)
55
+ end
56
+
57
+ it "requires http authorization" do
58
+ get "/health/database"
59
+ expect(response).to have_http_status(:unauthorized)
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Adds Rollback for exception reporting
3
+
4
+ Example:
5
+ rails generate rockstart:monitoring:rollbar
6
+
7
+ This will create:
8
+ Installs rollbar gem
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+ require "rockstart/generators/template_helpers"
5
+
6
+ module Rockstart::Monitoring
7
+ class RollbarGenerator < Rails::Generators::Base
8
+ include Rockstart::Generators::ClassOptionHelpers
9
+ include Rockstart::Generators::TemplateHelpers
10
+
11
+ source_root File.expand_path("templates", __dir__)
12
+
13
+ auth0_class_option
14
+ sidekiq_class_option
15
+
16
+ def add_initializer
17
+ initializer_template "rollbar"
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,80 @@
1
+ # frozen_string_literal: true
2
+
3
+ Rollbar.configure do |config|
4
+ # Without configuration, Rollbar is enabled in all environments.
5
+ # To disable in specific environments, set config.enabled=false.
6
+
7
+ config.access_token = ENV["ROLLBAR_ACCESS_TOKEN"]
8
+
9
+ # Here we'll disable in 'test' and when not configured:
10
+ config.enabled = false if Rails.env.test? || ENV["ROLLBAR_ACCESS_TOKEN"].blank?
11
+
12
+ # By default, Rollbar will try to call the `current_user` controller method
13
+ # to fetch the logged-in user object, and then call that object's `id`
14
+ # method to fetch this property. To customize:
15
+ # config.person_method = "my_current_user"
16
+ config.person_id_method = "id"
17
+
18
+ # Additionally, you may specify the following:
19
+ config.person_username_method = "nickname"
20
+ config.person_email_method = nil # do not send email address
21
+
22
+ # If you want to attach custom data to all exception and message reports,
23
+ # provide a lambda like the following. It should return a hash.
24
+ # config.custom_data_method = lambda { {:some_key => "some_value" } }
25
+
26
+ <%- if auth0? -%>
27
+ # Scrub userinfo from the session
28
+ config.transform << proc do |options|
29
+ data = options[:payload]['data']
30
+ scrubbed_userinfo = Rollbar::Scrubbers.scrub_value(data[:request][:session][:userinfo])
31
+ data[:request][:session][:userinfo] = scrubbed_userinfo
32
+ end
33
+
34
+ <%- end -%>
35
+ # Add exception class names to the exception_level_filters hash to
36
+ # change the level that exception is reported at. Note that if an exception
37
+ # has already been reported and logged the level will need to be changed
38
+ # via the rollbar interface.
39
+ # Valid levels: 'critical', 'error', 'warning', 'info', 'debug', 'ignore'
40
+ # 'ignore' will cause the exception to not be reported at all.
41
+ # config.exception_level_filters.merge!('MyCriticalException' => 'critical')
42
+ #
43
+ # You can also specify a callable, which will be called with the exception instance.
44
+ # config.exception_level_filters.merge!('MyCriticalException' => lambda { |e| 'critical' })
45
+
46
+ <%- if sidekiq? -%>
47
+ # Enable delayed reporting (using Sidekiq)
48
+ config.use_sidekiq "queue" => "low"
49
+ config.failover_handlers = [Rollbar::Delay::Thread]
50
+ <%- else -%>
51
+ # Enable asynchronous reporting
52
+ config.use_thread
53
+ <%- end -%>
54
+
55
+ # If your application runs behind a proxy server, you can set proxy parameters here.
56
+ # If https_proxy is set in your environment, that will be used. Settings here have precedence.
57
+ # The :host key is mandatory and must include the URL scheme (e.g. 'http://'), all other fields
58
+ # are optional.
59
+ #
60
+ # config.proxy = {
61
+ # host: 'http://some.proxy.server',
62
+ # port: 80,
63
+ # user: 'username_if_auth_required',
64
+ # password: 'password_if_auth_required'
65
+ # }
66
+
67
+ # Anonymize IP Addresses
68
+ config.anonymize_user_ip = true
69
+
70
+ # Send logger messages straight to Rollbar
71
+ # require "rollbar/logger"
72
+ # Rails.logger.extend(ActiveSupport::Logger.broadcast(Rollbar::Logger.new))
73
+
74
+ # If you run your staging application instance in production environment then
75
+ # you'll want to override the environment reported by `Rails.env` with an
76
+ # environment variable like this: `ROLLBAR_ENV=staging`. This is a recommended
77
+ # setup for Heroku. See:
78
+ # https://devcenter.heroku.com/articles/deploying-to-a-custom-rails-environment
79
+ config.environment = ENV["ROLLBAR_ENV"].presence || Rails.env
80
+ end
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Installs a UI for monitoring Sidekiq
3
+
4
+ Example:
5
+ rails generate rockstart:monitoring:sidekiq_ui
6
+
7
+ This will create:
8
+ Adds Sidekiq UI to the list of known routes
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rockstart/generators/class_option_helpers"
4
+
5
+ module Rockstart::Monitoring
6
+ class SidekiqUiGenerator < Rails::Generators::Base
7
+ include Rockstart::Generators::ClassOptionHelpers
8
+
9
+ source_root File.expand_path("templates", __dir__)
10
+
11
+ devise_class_option
12
+
13
+ def add_sidekiq_web_ui_for_devise
14
+ return unless devise?
15
+
16
+ route <<~DEVISE_UI
17
+ require "sidekiq/web"
18
+ authenticate :user, lambda { |u| u.admin? } do
19
+ mount Sidekiq::Web => "/sidekiq"
20
+ end
21
+ DEVISE_UI
22
+ end
23
+
24
+ def add_sidekiq_web_ui_for_generic_authentication
25
+ return if devise?
26
+
27
+ route <<~GENERIC_UI
28
+ require "sidekiq/web"
29
+ require "admin_constraint"
30
+ mount Sidekiq::Web => "/sidekiq", constraints: AdminConstraint
31
+ GENERIC_UI
32
+ end
33
+
34
+ def add_sidekiq_specs
35
+ copy_file "sidekiq_spec.rb", "spec/requests/sidekiq_spec.rb"
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_helper"
4
+
5
+ RSpec.describe "Sidekiq", type: :request do
6
+ describe "GET /sidekiq" do
7
+ context "as an authenticated admin" do
8
+ let(:authenticated_admin) { create(:user, :admin) }
9
+
10
+ before do
11
+ sign_in(authenticated_admin)
12
+ end
13
+
14
+ it "renders the sidekiq interface" do
15
+ get "/sidekiq"
16
+ expect(response).to have_http_status(:success)
17
+ end
18
+ end
19
+
20
+ context "as an authenticated user" do
21
+ let(:authenticated_user) { create(:user) }
22
+
23
+ before do
24
+ sign_in(authenticated_user)
25
+ end
26
+
27
+ it "responds with not found" do
28
+ expect { get "/sidekiq" }.to raise_error(ActionController::RoutingError)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -1,28 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Rockstart::QualityGenerator < Rails::Generators::Base
3
+ require "rockstart/base_generator"
4
+
5
+ class Rockstart::QualityGenerator < Rockstart::BaseGenerator
4
6
  source_root File.expand_path("templates", __dir__)
5
7
 
6
8
  desc "This generator configures code quality rules"
7
9
 
8
- class_option :rebuild_todo, type: :boolean,
9
- desc: "Bundle installs rubocop and regenerates .rubocop_todo.yml",
10
- default: true
11
-
12
10
  def add_quality_rake_task
13
11
  copy_file "quality.rake", "lib/tasks/quality.rake"
14
12
  end
15
13
 
16
- def install_rubocop
17
- copy_file "rubocop.yml", ".rubocop.yml"
18
-
19
- gem "rubocop-rails", require: false
20
-
21
- copy_file "rubocop.rake", "lib/tasks/rubocop.rake"
22
-
23
- return unless options[:rebuild_todo]
24
-
25
- # Rebuild .rubocop_todo.yml, ensuring only existing code is excluded
26
- run "bundle install --quiet && bundle exec rubocop --auto-gen-config --exclude-limit 100"
14
+ def generate_rubocop
15
+ generate "rockstart:quality:rubocop"
27
16
  end
28
17
  end