stoplight 5.8.3 → 6.0.0.rc2

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 (323) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +1 -1
  3. data/LICENSE.md +1 -0
  4. data/README.md +132 -79
  5. data/UPGRADING.md +265 -6
  6. data/lib/stoplight/admin/actions/action.rb +4 -12
  7. data/lib/stoplight/admin/actions/lock.rb +12 -9
  8. data/lib/stoplight/admin/actions/lock_all.rb +27 -0
  9. data/lib/stoplight/admin/actions/remove.rb +12 -9
  10. data/lib/stoplight/admin/actions/stats.rb +15 -12
  11. data/lib/stoplight/admin/actions/unlock.rb +10 -9
  12. data/lib/stoplight/admin/assets/apple-touch-icon.png +0 -0
  13. data/lib/stoplight/admin/assets/favicon.ico +0 -0
  14. data/lib/stoplight/admin/assets/flowbite.min.css +2 -0
  15. data/lib/stoplight/admin/assets/flowbite.min.js +1 -0
  16. data/lib/stoplight/admin/assets/icon.svg +7 -0
  17. data/lib/stoplight/admin/assets/turbo.es2017-esm.min.js +34 -0
  18. data/lib/stoplight/admin/config_registry.rb +40 -0
  19. data/lib/stoplight/admin/dependencies.rb +29 -28
  20. data/lib/stoplight/admin/helpers.rb +50 -17
  21. data/lib/stoplight/admin/light_view.rb +184 -0
  22. data/lib/stoplight/admin/lights_stats.rb +7 -9
  23. data/lib/stoplight/admin/views/_card.erb +19 -21
  24. data/lib/stoplight/admin/views/index.erb +9 -3
  25. data/lib/stoplight/admin/views/layout.erb +45 -13
  26. data/lib/stoplight/admin.rb +110 -21
  27. data/lib/stoplight/data_store.rb +18 -8
  28. data/lib/stoplight/domain/config.rb +4 -1
  29. data/lib/stoplight/domain/error_tracking_policy.rb +9 -0
  30. data/lib/stoplight/domain/failure.rb +4 -0
  31. data/lib/stoplight/domain/id.rb +13 -0
  32. data/lib/stoplight/domain/light.rb +35 -77
  33. data/lib/stoplight/domain/lock_control.rb +55 -0
  34. data/lib/stoplight/domain/matcher_validator.rb +24 -0
  35. data/lib/stoplight/domain/state_snapshot.rb +2 -6
  36. data/lib/stoplight/domain/strategies/green_run_strategy.rb +33 -19
  37. data/lib/stoplight/domain/strategies/red_run_strategy.rb +8 -2
  38. data/lib/stoplight/domain/strategies/yellow_run_strategy.rb +56 -32
  39. data/lib/stoplight/domain/telemetry/bus.rb +90 -0
  40. data/lib/stoplight/domain/telemetry/consumer.rb +18 -0
  41. data/lib/stoplight/domain/telemetry/emitter.rb +45 -0
  42. data/lib/stoplight/domain/telemetry/envelope.rb +15 -0
  43. data/lib/stoplight/domain/telemetry/failure.rb +13 -0
  44. data/lib/stoplight/domain/telemetry/light_registered.rb +12 -0
  45. data/lib/stoplight/domain/telemetry/lock_changed.rb +19 -0
  46. data/lib/stoplight/domain/telemetry/metrics.rb +15 -0
  47. data/lib/stoplight/domain/telemetry/recovery_failed.rb +20 -0
  48. data/lib/stoplight/domain/telemetry/recovery_probe_completed.rb +15 -0
  49. data/lib/stoplight/domain/telemetry/recovery_started.rb +18 -0
  50. data/lib/stoplight/domain/telemetry/recovery_succeeded.rb +19 -0
  51. data/lib/stoplight/domain/telemetry/run_completed.rb +17 -0
  52. data/lib/stoplight/domain/telemetry/run_recorder.rb +58 -0
  53. data/lib/stoplight/domain/telemetry/settings.rb +21 -0
  54. data/lib/stoplight/domain/telemetry/state_transitioned.rb +11 -0
  55. data/lib/stoplight/domain/telemetry/subscription.rb +11 -0
  56. data/lib/stoplight/domain/telemetry/traffic_breached.rb +20 -0
  57. data/lib/stoplight/domain/tracker/recovery_probe.rb +61 -17
  58. data/lib/stoplight/domain/tracker/request.rb +17 -8
  59. data/lib/stoplight/domain/traffic_control/consecutive_errors.rb +13 -3
  60. data/lib/stoplight/domain/traffic_control/error_rate.rb +16 -12
  61. data/lib/stoplight/domain/traffic_recovery/consecutive_successes.rb +9 -3
  62. data/lib/stoplight/error.rb +10 -1
  63. data/lib/stoplight/infrastructure/config_serializer.rb +50 -0
  64. data/lib/stoplight/infrastructure/fail_safe/error_notifier.rb +25 -0
  65. data/lib/stoplight/infrastructure/fail_safe/storage/registry.rb +68 -0
  66. data/lib/stoplight/infrastructure/memory/storage/registry.rb +18 -0
  67. data/lib/stoplight/infrastructure/memory/storage/unbounded_metrics.rb +29 -32
  68. data/lib/stoplight/infrastructure/memory/storage/window_metrics/sliding_window.rb +74 -0
  69. data/lib/stoplight/infrastructure/memory/storage/window_metrics.rb +25 -24
  70. data/lib/stoplight/infrastructure/notifier/fail_safe.rb +3 -8
  71. data/lib/stoplight/infrastructure/notifier/generic.rb +3 -3
  72. data/lib/stoplight/infrastructure/redis/key.rb +25 -0
  73. data/lib/stoplight/infrastructure/redis/storage/now.lua +9 -0
  74. data/lib/stoplight/infrastructure/redis/storage/recovery_lock.rb +2 -4
  75. data/lib/stoplight/infrastructure/redis/storage/recovery_metrics.rb +1 -1
  76. data/lib/stoplight/infrastructure/redis/storage/registry.rb +73 -0
  77. data/lib/stoplight/infrastructure/redis/storage/scripting.rb +54 -3
  78. data/lib/stoplight/infrastructure/redis/storage/state/transition_to_green.lua +3 -1
  79. data/lib/stoplight/infrastructure/redis/storage/state/transition_to_red.lua +4 -2
  80. data/lib/stoplight/infrastructure/redis/storage/state/transition_to_yellow.lua +3 -1
  81. data/lib/stoplight/infrastructure/redis/storage/state.rb +8 -8
  82. data/lib/stoplight/infrastructure/redis/storage/unbounded_metrics/record_failure.lua +20 -21
  83. data/lib/stoplight/infrastructure/redis/storage/unbounded_metrics/record_success.lua +11 -19
  84. data/lib/stoplight/infrastructure/redis/storage/unbounded_metrics.rb +20 -16
  85. data/lib/stoplight/infrastructure/redis/storage/window_metrics/_evict.lua +44 -0
  86. data/lib/stoplight/infrastructure/redis/storage/window_metrics/metrics_snapshot.lua +14 -21
  87. data/lib/stoplight/infrastructure/redis/storage/window_metrics/record_failure.lua +38 -36
  88. data/lib/stoplight/infrastructure/redis/storage/window_metrics/record_success.lua +23 -30
  89. data/lib/stoplight/infrastructure/redis/storage/window_metrics.rb +45 -135
  90. data/lib/stoplight/infrastructure/system_clock.rb +4 -0
  91. data/lib/stoplight/telemetry.rb +19 -0
  92. data/lib/stoplight/types.rb +15 -2
  93. data/lib/stoplight/version.rb +1 -1
  94. data/lib/stoplight/wiring/config_compatibility_validator.rb +25 -2
  95. data/lib/stoplight/wiring/default.rb +1 -1
  96. data/lib/stoplight/wiring/default_config.rb +2 -1
  97. data/lib/stoplight/wiring/default_configuration.rb +3 -2
  98. data/lib/stoplight/wiring/external_caller.rb +27 -0
  99. data/lib/stoplight/wiring/fail_safe_config.rb +11 -0
  100. data/lib/stoplight/wiring/global_state.rb +93 -0
  101. data/lib/stoplight/wiring/{light_factory → light_configuration_dsl}/traffic_control_dsl.rb +3 -5
  102. data/lib/stoplight/wiring/{light_factory → light_configuration_dsl}/traffic_recovery_dsl.rb +2 -2
  103. data/lib/stoplight/wiring/light_configuration_dsl.rb +97 -0
  104. data/lib/stoplight/wiring/light_factory.rb +154 -97
  105. data/lib/stoplight/wiring/notifier_bridge.rb +33 -0
  106. data/lib/stoplight/wiring/redis/backend.rb +1 -1
  107. data/lib/stoplight/wiring/system/storage.rb +69 -0
  108. data/lib/stoplight/wiring/system.rb +125 -56
  109. data/lib/stoplight/wiring/{configuration_dsl.rb → system_configuration_dsl.rb} +13 -43
  110. data/lib/stoplight.rb +50 -194
  111. data/sig/sinatra/base.rbs +6 -0
  112. data/sig/stdlib/securerandom.rbs +4 -0
  113. data/sig/stoplight/admin/actions/action.rbs +10 -0
  114. data/sig/stoplight/admin/actions/lock.rbs +17 -0
  115. data/sig/stoplight/admin/actions/lock_all.rbs +17 -0
  116. data/sig/stoplight/admin/actions/remove.rbs +22 -0
  117. data/sig/stoplight/admin/actions/stats.rbs +28 -0
  118. data/sig/stoplight/admin/actions/unlock.rbs +17 -0
  119. data/sig/stoplight/admin/config_registry.rbs +20 -0
  120. data/sig/stoplight/admin/dependencies.rbs +16 -0
  121. data/sig/stoplight/admin/helpers.rbs +17 -0
  122. data/sig/stoplight/admin/light_view.rbs +39 -0
  123. data/sig/stoplight/admin/lights_stats.rbs +30 -0
  124. data/sig/stoplight/admin.rbs +14 -0
  125. data/sig/stoplight/color.rbs +3 -3
  126. data/sig/{_private/stoplight/data_store.rbs → stoplight/data_store/base.rbs} +1 -0
  127. data/sig/stoplight/data_store/memory.rbs +9 -0
  128. data/sig/stoplight/data_store/redis.rbs +17 -0
  129. data/sig/{_private/stoplight → stoplight}/domain/config.rbs +28 -24
  130. data/sig/{_private/stoplight → stoplight}/domain/error_tracking_policy.rbs +4 -0
  131. data/sig/{_private/stoplight → stoplight}/domain/failure.rbs +2 -0
  132. data/sig/stoplight/domain/id.rbs +7 -0
  133. data/sig/stoplight/domain/light.rbs +39 -0
  134. data/sig/{_private/stoplight → stoplight}/domain/light_info.rbs +1 -5
  135. data/sig/stoplight/domain/lock_control.rbs +16 -0
  136. data/sig/stoplight/domain/matcher_validator.rbs +11 -0
  137. data/sig/{_private/stoplight → stoplight}/domain/ports/clock.rbs +6 -0
  138. data/sig/stoplight/domain/ports/data_store.rbs +9 -0
  139. data/sig/stoplight/domain/ports/error_notifier.rbs +12 -0
  140. data/sig/stoplight/domain/ports/exception_matcher.rbs +10 -0
  141. data/sig/{_private/stoplight → stoplight}/domain/ports/metrics_store.rbs +2 -2
  142. data/sig/stoplight/domain/ports/registry.rbs +13 -0
  143. data/sig/{_private/stoplight → stoplight}/domain/ports/run_strategy.rbs +2 -1
  144. data/sig/stoplight/domain/ports/state_transition_notifier.rbs +18 -0
  145. data/sig/stoplight/domain/ports/telemetry.rbs +28 -0
  146. data/sig/stoplight/domain/ports/telemetry_publisher.rbs +14 -0
  147. data/sig/{_private/stoplight → stoplight}/domain/ports/traffic_control.rbs +7 -0
  148. data/sig/{_private/stoplight → stoplight}/domain/ports/traffic_recovery.rbs +2 -3
  149. data/sig/stoplight/domain/strategies/green_run_strategy.rbs +22 -0
  150. data/sig/stoplight/domain/strategies/red_run_strategy.rbs +19 -0
  151. data/sig/{_private/stoplight → stoplight}/domain/strategies/yellow_run_strategy.rbs +23 -12
  152. data/sig/stoplight/domain/telemetry/bus.rbs +49 -0
  153. data/sig/stoplight/domain/telemetry/consumer.rbs +13 -0
  154. data/sig/stoplight/domain/telemetry/emitter.rbs +51 -0
  155. data/sig/stoplight/domain/telemetry/envelope.rbs +30 -0
  156. data/sig/stoplight/domain/telemetry/failure.rbs +23 -0
  157. data/sig/stoplight/domain/telemetry/light_registered.rbs +23 -0
  158. data/sig/stoplight/domain/telemetry/lock_changed.rbs +31 -0
  159. data/sig/stoplight/domain/telemetry/metrics.rbs +27 -0
  160. data/sig/stoplight/domain/telemetry/recovery_failed.rbs +36 -0
  161. data/sig/stoplight/domain/telemetry/recovery_probe_completed.rbs +29 -0
  162. data/sig/stoplight/domain/telemetry/recovery_started.rbs +26 -0
  163. data/sig/stoplight/domain/telemetry/recovery_succeeded.rbs +31 -0
  164. data/sig/stoplight/domain/telemetry/run_completed.rbs +38 -0
  165. data/sig/stoplight/domain/telemetry/run_recorder.rbs +27 -0
  166. data/sig/stoplight/domain/telemetry/settings.rbs +47 -0
  167. data/sig/stoplight/domain/telemetry/state_transitioned.rbs +11 -0
  168. data/sig/stoplight/domain/telemetry/subscription.rbs +9 -0
  169. data/sig/stoplight/domain/telemetry/traffic_breached.rbs +36 -0
  170. data/sig/stoplight/domain/telemetry/types.rbs +32 -0
  171. data/sig/{_private/stoplight → stoplight}/domain/tracker/recovery_probe.rbs +10 -6
  172. data/sig/{_private/stoplight → stoplight}/domain/tracker/request.rbs +3 -3
  173. data/sig/{_private/stoplight → stoplight}/domain/traffic_control/consecutive_errors.rbs +2 -0
  174. data/sig/{_private/stoplight → stoplight}/domain/traffic_control/error_rate.rbs +3 -2
  175. data/sig/{_private/stoplight → stoplight}/domain/traffic_recovery/consecutive_successes.rbs +2 -0
  176. data/sig/stoplight/domain/types.rbs +25 -0
  177. data/sig/stoplight/error.rbs +8 -0
  178. data/sig/stoplight/generators/rails_generators_base.rbs +11 -0
  179. data/sig/stoplight/infrastructure/config_serializer.rbs +12 -0
  180. data/sig/stoplight/infrastructure/fail_safe/error_notifier.rbs +13 -0
  181. data/sig/{_private/stoplight → stoplight}/infrastructure/fail_safe/storage/metrics.rbs +2 -2
  182. data/sig/{_private/stoplight → stoplight}/infrastructure/fail_safe/storage/recovery_lock.rbs +2 -2
  183. data/sig/stoplight/infrastructure/fail_safe/storage/registry.rbs +23 -0
  184. data/sig/{_private/stoplight → stoplight}/infrastructure/fail_safe/storage/state.rbs +4 -4
  185. data/sig/stoplight/infrastructure/memory/storage/registry.rbs +13 -0
  186. data/sig/{_private/stoplight → stoplight}/infrastructure/memory/storage/state.rbs +3 -3
  187. data/sig/{_private/stoplight → stoplight}/infrastructure/memory/storage/unbounded_metrics.rbs +7 -7
  188. data/sig/stoplight/infrastructure/memory/storage/window_metrics/sliding_window.rbs +27 -0
  189. data/sig/{_private/stoplight → stoplight}/infrastructure/memory/storage/window_metrics.rbs +7 -7
  190. data/sig/stoplight/infrastructure/notifier/fail_safe.rbs +15 -0
  191. data/sig/{_private/stoplight → stoplight}/infrastructure/notifier/generic.rbs +1 -1
  192. data/sig/{_private/stoplight → stoplight}/infrastructure/notifier/io.rbs +1 -1
  193. data/sig/{_private/stoplight → stoplight}/infrastructure/notifier/logger.rbs +1 -1
  194. data/sig/stoplight/infrastructure/redis/key.rbs +10 -0
  195. data/sig/{_private/stoplight → stoplight}/infrastructure/redis/storage/recovery_lock.rbs +2 -2
  196. data/sig/stoplight/infrastructure/redis/storage/registry.rbs +27 -0
  197. data/sig/stoplight/infrastructure/redis/storage/scripting.rbs +34 -0
  198. data/sig/{_private/stoplight → stoplight}/infrastructure/redis/storage/state.rbs +4 -4
  199. data/sig/{_private/stoplight → stoplight}/infrastructure/redis/storage/unbounded_metrics.rbs +8 -1
  200. data/sig/stoplight/infrastructure/redis/storage/window_metrics.rbs +35 -0
  201. data/sig/stoplight/infrastructure/types.rbs +6 -0
  202. data/sig/stoplight/notifier.rbs +1 -1
  203. data/sig/stoplight/ports/system.rbs +16 -10
  204. data/sig/stoplight/state.rbs +3 -3
  205. data/sig/stoplight/telemetry.rbs +17 -0
  206. data/sig/stoplight/types.rbs +9 -0
  207. data/sig/{_private/stoplight → stoplight}/wiring/config_compatibility_validator.rbs +2 -0
  208. data/sig/stoplight/wiring/default.rbs +26 -0
  209. data/sig/stoplight/wiring/default_configuration.rbs +39 -0
  210. data/sig/stoplight/wiring/external_caller.rbs +13 -0
  211. data/sig/stoplight/wiring/fail_safe_config.rbs +7 -0
  212. data/sig/stoplight/wiring/global_state.rbs +36 -0
  213. data/sig/{_private/stoplight/wiring/light_factory → stoplight/wiring/light_configuration_dsl}/traffic_control_dsl.rbs +1 -1
  214. data/sig/{_private/stoplight/wiring/light_factory → stoplight/wiring/light_configuration_dsl}/traffic_recovery_dsl.rbs +1 -1
  215. data/sig/stoplight/wiring/light_configuration_dsl.rbs +38 -0
  216. data/sig/stoplight/wiring/light_factory.rbs +78 -0
  217. data/sig/stoplight/wiring/notifier_bridge.rbs +15 -0
  218. data/sig/stoplight/wiring/notifier_factory.rbs +10 -0
  219. data/sig/{_private/stoplight → stoplight}/wiring/redis/backend.rbs +6 -6
  220. data/sig/stoplight/wiring/system/storage.rbs +35 -0
  221. data/sig/stoplight/wiring/system.rbs +30 -0
  222. data/sig/stoplight/wiring/system_configuration_dsl.rbs +39 -0
  223. data/sig/stoplight/wiring/types.rbs +6 -0
  224. data/sig/stoplight.rbs +37 -54
  225. metadata +190 -143
  226. data/lib/stoplight/admin/actions/lock_all_green.rb +0 -18
  227. data/lib/stoplight/admin/actions/lock_green.rb +0 -23
  228. data/lib/stoplight/admin/actions/lock_red.rb +0 -23
  229. data/lib/stoplight/admin/lights_repository/light.rb +0 -171
  230. data/lib/stoplight/admin/lights_repository.rb +0 -87
  231. data/lib/stoplight/domain/light/configuration_builder_interface.rb +0 -236
  232. data/lib/stoplight/infrastructure/fail_safe/data_store.rb +0 -152
  233. data/lib/stoplight/infrastructure/memory/data_store/metrics.rb +0 -27
  234. data/lib/stoplight/infrastructure/memory/data_store/recovery_lock_store.rb +0 -52
  235. data/lib/stoplight/infrastructure/memory/data_store/recovery_lock_token.rb +0 -17
  236. data/lib/stoplight/infrastructure/memory/data_store/sliding_window.rb +0 -74
  237. data/lib/stoplight/infrastructure/memory/data_store/state.rb +0 -21
  238. data/lib/stoplight/infrastructure/memory/data_store.rb +0 -342
  239. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/get_metrics.lua +0 -26
  240. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/record_failure.lua +0 -36
  241. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/record_recovery_probe_failure.lua +0 -27
  242. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/record_recovery_probe_success.lua +0 -23
  243. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/record_success.lua +0 -35
  244. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/release_lock.lua +0 -6
  245. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/transition_to_green.lua +0 -10
  246. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/transition_to_red.lua +0 -10
  247. data/lib/stoplight/infrastructure/redis/data_store/lua_scripts/transition_to_yellow.lua +0 -9
  248. data/lib/stoplight/infrastructure/redis/data_store/recovery_lock_store.rb +0 -60
  249. data/lib/stoplight/infrastructure/redis/data_store/recovery_lock_token.rb +0 -28
  250. data/lib/stoplight/infrastructure/redis/data_store/scripting.rb +0 -73
  251. data/lib/stoplight/infrastructure/redis/data_store.rb +0 -516
  252. data/lib/stoplight/infrastructure/redis/storage/key_space.rb +0 -51
  253. data/lib/stoplight/infrastructure/storage/compatibility_metrics.rb +0 -41
  254. data/lib/stoplight/infrastructure/storage/compatibility_recovery_lock.rb +0 -33
  255. data/lib/stoplight/infrastructure/storage/compatibility_recovery_metrics.rb +0 -47
  256. data/lib/stoplight/infrastructure/storage/compatibility_state.rb +0 -44
  257. data/lib/stoplight/wiring/light_builder.rb +0 -198
  258. data/lib/stoplight/wiring/notifier_factory.rb +0 -26
  259. data/lib/stoplight/wiring/system/light_builder.rb +0 -47
  260. data/lib/stoplight/wiring/system/light_factory.rb +0 -64
  261. data/sig/_private/stoplight/domain/light.rbs +0 -25
  262. data/sig/_private/stoplight/domain/ports/data_store.rbs +0 -76
  263. data/sig/_private/stoplight/domain/ports/light_factory.rbs +0 -80
  264. data/sig/_private/stoplight/domain/strategies/green_run_strategy.rbs +0 -17
  265. data/sig/_private/stoplight/domain/strategies/red_run_strategy.rbs +0 -17
  266. data/sig/_private/stoplight/domain/tracker/base.rbs +0 -8
  267. data/sig/_private/stoplight/infrastructure/fail_safe/data_store.rbs +0 -26
  268. data/sig/_private/stoplight/infrastructure/memory/data_store/metrics.rbs +0 -25
  269. data/sig/_private/stoplight/infrastructure/memory/data_store/recovery_lock_store.rbs +0 -19
  270. data/sig/_private/stoplight/infrastructure/memory/data_store/recovery_lock_token.rbs +0 -17
  271. data/sig/_private/stoplight/infrastructure/memory/data_store/sliding_window.rbs +0 -27
  272. data/sig/_private/stoplight/infrastructure/memory/data_store/state.rbs +0 -17
  273. data/sig/_private/stoplight/infrastructure/memory/data_store.rbs +0 -30
  274. data/sig/_private/stoplight/infrastructure/notifier/fail_safe.rbs +0 -17
  275. data/sig/_private/stoplight/infrastructure/redis/data_store/recovery_lock_store.rbs +0 -24
  276. data/sig/_private/stoplight/infrastructure/redis/data_store/recovery_lock_token.rbs +0 -21
  277. data/sig/_private/stoplight/infrastructure/redis/data_store/scripting.rbs +0 -34
  278. data/sig/_private/stoplight/infrastructure/redis/data_store.rbs +0 -67
  279. data/sig/_private/stoplight/infrastructure/redis/storage/key_space.rbs +0 -19
  280. data/sig/_private/stoplight/infrastructure/redis/storage/scripting.rbs +0 -13
  281. data/sig/_private/stoplight/infrastructure/redis/storage/window_metrics.rbs +0 -34
  282. data/sig/_private/stoplight/infrastructure/storage/compatibility_metrics.rbs +0 -17
  283. data/sig/_private/stoplight/infrastructure/storage/compatibility_recovery_lock.rbs +0 -13
  284. data/sig/_private/stoplight/infrastructure/storage/compatibility_recovery_metrics.rbs +0 -14
  285. data/sig/_private/stoplight/infrastructure/storage/compatibility_state.rbs +0 -14
  286. data/sig/_private/stoplight/system/light_builder.rbs +0 -23
  287. data/sig/_private/stoplight/system/light_factory.rbs +0 -17
  288. data/sig/_private/stoplight/types.rbs +0 -6
  289. data/sig/_private/stoplight/wiring/configuration_dsl.rbs +0 -43
  290. data/sig/_private/stoplight/wiring/default.rbs +0 -26
  291. data/sig/_private/stoplight/wiring/default_configuration.rbs +0 -29
  292. data/sig/_private/stoplight/wiring/light_builder.rbs +0 -48
  293. data/sig/_private/stoplight/wiring/light_factory.rbs +0 -16
  294. data/sig/_private/stoplight/wiring/notifier_factory.rbs +0 -10
  295. data/sig/_private/stoplight/wiring/system.rbs +0 -15
  296. data/sig/_private/stoplight.rbs +0 -48
  297. data/sig/stoplight/data_store.rbs +0 -19
  298. data/sig/stoplight/ports/configuration.rbs +0 -19
  299. data/sig/stoplight/ports/exception_matcher.rbs +0 -8
  300. data/sig/stoplight/ports/light.rbs +0 -12
  301. data/sig/stoplight/ports/light_info.rbs +0 -5
  302. data/sig/stoplight/ports/state_transition_notifier.rbs +0 -15
  303. /data/sig/{_private/stoplight → stoplight}/common/deprecations.rbs +0 -0
  304. /data/sig/{_private/stoplight → stoplight}/domain/compatibility_result.rbs +0 -0
  305. /data/sig/{_private/stoplight → stoplight}/domain/metrics_snapshot.rbs +0 -0
  306. /data/sig/{_private/stoplight → stoplight}/domain/ports/recovery_lock_store.rbs +0 -0
  307. /data/sig/{_private/stoplight → stoplight}/domain/ports/recovery_lock_token.rbs +0 -0
  308. /data/sig/{_private/stoplight → stoplight}/domain/ports/state_store.rbs +0 -0
  309. /data/sig/{_private/stoplight → stoplight}/domain/state_snapshot.rbs +0 -0
  310. /data/sig/{_private/stoplight → stoplight}/domain/storage/recovery_lock_token.rbs +0 -0
  311. /data/sig/{_private/stoplight → stoplight}/domain/traffic_recovery.rbs +0 -0
  312. /data/sig/{_private → stoplight}/generators/stoplight/install/install_generator.rbs +0 -0
  313. /data/sig/{_private/stoplight → stoplight}/infrastructure/fail_safe/storage/recovery_lock_token.rbs +0 -0
  314. /data/sig/{_private/stoplight → stoplight}/infrastructure/memory/storage/recovery_lock.rbs +0 -0
  315. /data/sig/{_private/stoplight → stoplight}/infrastructure/memory/storage/recovery_metrics.rbs +0 -0
  316. /data/sig/{_private/stoplight → stoplight}/infrastructure/redis/storage/metrics.rbs +0 -0
  317. /data/sig/{_private/stoplight → stoplight}/infrastructure/redis/storage/recovery_metrics.rbs +0 -0
  318. /data/sig/{_private/stoplight → stoplight}/infrastructure/system_clock.rbs +0 -0
  319. /data/sig/{_private/stoplight → stoplight}/wiring/data_store_backend.rbs +0 -0
  320. /data/sig/{_private/stoplight → stoplight}/wiring/default_config.rbs +0 -0
  321. /data/sig/{_private/stoplight → stoplight}/wiring/memory/backend.rbs +0 -0
  322. /data/sig/{_private/stoplight → stoplight}/wiring/storage_set.rbs +0 -0
  323. /data/sig/{_private/stoplight → stoplight}/wiring/storage_set_builder.rbs +0 -0
@@ -0,0 +1,36 @@
1
+ module Stoplight
2
+ module Wiring
3
+ class GlobalState
4
+ DEFAULT_SYSTEM_NAME: String
5
+
6
+ @default_config: Domain::Config
7
+ @default_system: Wiring::System
8
+ @systems: Concurrent::Map[String, Wiring::System]
9
+
10
+ attr_reader default_config: Domain::Config
11
+ attr_reader default_system: Wiring::System
12
+
13
+ def initialize: (default_config: Domain::Config) -> void
14
+ def register_system: (
15
+ _ToS name,
16
+ ?cool_off_time: optional[Domain::duration_seconds],
17
+ ?threshold: optional[Domain::percentage | Integer],
18
+ ?recovery_threshold: optional[Integer],
19
+ ?window_size: optional[Domain::duration_seconds?],
20
+ ?tracked_errors: optional[Array[Module]],
21
+ ?skipped_errors: optional[Array[Module]],
22
+ ?data_store: optional[Domain::_DataStore],
23
+ ?error_notifier: optional[Domain::error_notifier],
24
+ ?notifiers: optional[Array[Domain::_StateTransitionNotifier]],
25
+ ?traffic_control: optional[Wiring::traffic_control],
26
+ ?traffic_recovery: optional[Wiring::traffic_recovery],
27
+ ) -> Wiring::System
28
+
29
+ private
30
+
31
+ def register_system_with_config: (Domain::Config) -> Wiring::System
32
+
33
+ def create_registry: (Domain::Config, Wiring::System) -> Domain::_Registry
34
+ end
35
+ end
36
+ end
@@ -1,6 +1,6 @@
1
1
  module Stoplight
2
2
  module Wiring
3
- class LightFactory
3
+ class LightConfigurationDsl
4
4
  TrafficControlDsl: ^(traffic_control | Domain::_TrafficControl) -> Domain::_TrafficControl
5
5
  end
6
6
  end
@@ -1,6 +1,6 @@
1
1
  module Stoplight
2
2
  module Wiring
3
- class LightFactory
3
+ class LightConfigurationDsl
4
4
  TrafficRecoveryDsl: ^(traffic_recovery | Domain::_TrafficRecovery) -> Domain::_TrafficRecovery
5
5
  end
6
6
  end
@@ -0,0 +1,38 @@
1
+ module Stoplight
2
+ module Wiring
3
+ class LightConfigurationDsl
4
+ @id: String
5
+
6
+ def initialize: (
7
+ name: _ToS,
8
+ ?cool_off_time: optional[Domain::duration_seconds],
9
+ ?threshold: optional[Domain::percentage | Integer],
10
+ ?recovery_threshold: optional[Integer],
11
+ ?window_size: optional[Domain::duration_seconds?],
12
+ ?tracked_errors: optional[Array[Module] | Module],
13
+ ?skipped_errors: optional[Array[Module] | Module],
14
+ ?traffic_control: optional[traffic_control],
15
+ ?traffic_recovery: optional[traffic_recovery],
16
+ ) -> void
17
+
18
+ def configure!: (Domain::Config default_config) -> Domain::Config
19
+
20
+ attr_reader digest: Integer
21
+
22
+ private
23
+
24
+ attr_reader name: String
25
+ attr_reader cool_off_time: optional[Domain::duration_seconds]
26
+ attr_reader threshold: optional[Domain::percentage | Integer]
27
+ attr_reader recovery_threshold: optional[Integer]
28
+ attr_reader window_size: optional[Domain::duration_seconds?]
29
+ attr_reader tracked_errors: optional[Array[Module]]
30
+ attr_reader skipped_errors: optional[Array[Module]]
31
+ attr_reader traffic_control: optional[Domain::_TrafficControl]
32
+ attr_reader traffic_recovery: optional[Domain::_TrafficRecovery]
33
+
34
+ def calculate_digest: -> Integer
35
+ def errors_for_digest: (optional[Array[Module]]) -> optional[Array[String]]
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,78 @@
1
+ module Stoplight
2
+ module Wiring
3
+ # Factory protocol for building +Stoplight::Light+ instances.
4
+ #
5
+ # This defines the interface that any Light factory must implement,
6
+ # regardless of the underlying implementation details.
7
+ #
8
+ # This uses the Abstract Factory pattern to decouple the domain (Light)
9
+ # from the application layer (concrete factory implementation). Light
10
+ # doesn't know HOW it's built, only that it needs something that can
11
+ # build variants of itself.
12
+ #
13
+ # By defining this interface in the domain layer:
14
+ # - Light can request reconfiguration without knowing about containers
15
+ # - Different factory implementations can be swapped (code, database-configured, etc.)
16
+ # - Dependency direction is preserved (Application → Domain, not Domain → Application)
17
+ #
18
+ class LightFactory
19
+ attr_reader data_store_config: Domain::_DataStore
20
+ attr_reader error_notifier: Domain::error_notifier
21
+ attr_reader clock: Domain::_Clock
22
+
23
+ attr_reader traffic_recovery: Domain::_TrafficRecovery
24
+ attr_reader traffic_control: Domain::_TrafficControl
25
+ attr_reader config: Domain::Config
26
+ attr_reader system_name: String
27
+
28
+ @system_id: String
29
+ @name: String
30
+ @cool_off_time: Domain::duration_seconds
31
+ @error_tracking_policy: Domain::ErrorTrackingPolicy
32
+ @emitter: Domain::Telemetry::Emitter
33
+ @failover_system: _System?
34
+ @storage_set: StorageSet
35
+ @key_space: Infrastructure::Redis::Key
36
+
37
+ def initialize: (
38
+ system_id: String,
39
+ config: Domain::Config,
40
+ system_name: String,
41
+ failover_system: _System?,
42
+ telemetry: Domain::_TelemetryPublisher
43
+ ) -> void
44
+
45
+ def lock_control: -> Domain::LockControl
46
+ def storage_set: -> StorageSet
47
+ def key_space: -> Infrastructure::Redis::Key
48
+ def state_store: -> Domain::_StateStore
49
+
50
+ def metrics_store: -> Domain::_MetricsStore
51
+ def recovery_lock_store: -> Domain::_RecoveryLockStore
52
+ def request_tracker: -> Domain::Tracker::Request
53
+ def recovery_probe_tracker: -> Domain::Tracker::RecoveryProbe
54
+ def recovery_metrics_store: -> Domain::_MetricsStore
55
+
56
+ def green_run_strategy: -> Domain::Strategies::GreenRunStrategy
57
+ def yellow_run_strategy: -> Domain::Strategies::YellowRunStrategy
58
+ def red_run_strategy: -> Domain::Strategies::RedRunStrategy
59
+ def run_recorder: (Domain::color) -> Domain::Telemetry::RunRecorder
60
+ def telemetry_settings: -> Domain::Telemetry::Settings
61
+ def redis: -> Infrastructure::redis
62
+ def storage_scripting: -> Infrastructure::Redis::Storage::Scripting
63
+ def failover_system: -> _System
64
+ def build_backend: -> DataStoreBackend
65
+
66
+ # Builds a Light instance with the current configuration.
67
+ #
68
+ # This method must construct a fully-wired Light with all required
69
+ # dependencies (strategies, data store, notifiers, etc.). The Light
70
+ # should be ready to use immediately after construction.
71
+ #
72
+ # @raise [Stoplight::Error::ConfigurationError] If configuration is invalid
73
+ def build: -> Domain::Light
74
+
75
+ def create_circuit_breaker: (String) -> Domain::Light
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,15 @@
1
+ module Stoplight
2
+ module Wiring
3
+ class NotifierBridge
4
+ @notifiers: Array[Domain::_StateTransitionNotifier]
5
+
6
+ def initialize: (notifiers: Array[Domain::_StateTransitionNotifier]) -> void
7
+
8
+ def subscribe: (Domain::_Telemetry) -> void
9
+
10
+ private
11
+
12
+ def notify: (Domain::Telemetry::Envelope[Domain::Telemetry::state_transitioned], error: StandardError?) -> void
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,10 @@
1
+ module Stoplight
2
+ module Wiring
3
+ class NotifierFactory
4
+ def self.create: (
5
+ notifier: Domain::_StateTransitionNotifier,
6
+ error_notifier: Domain::error_notifier,
7
+ ) -> Domain::_StateTransitionNotifier
8
+ end
9
+ end
10
+ end
@@ -2,11 +2,11 @@ module Stoplight
2
2
  module Wiring
3
3
  module Redis
4
4
  class Backend < DataStoreBackend
5
- @redis: redis
5
+ @redis: Infrastructure::redis
6
6
  @scripting: Infrastructure::Redis::Storage::Scripting
7
- @key_space: Infrastructure::Redis::Storage::KeySpace
7
+ @key_space: Infrastructure::Redis::Key
8
8
  @config: Domain::Config
9
- @error_notifier: error_notifier
9
+ @error_notifier: Domain::error_notifier
10
10
  @failover_light: Domain::Light
11
11
  @clock: Domain::_Clock
12
12
 
@@ -18,11 +18,11 @@ module Stoplight
18
18
  @unbounded_metrics_store: Infrastructure::FailSafe::Storage::Metrics
19
19
 
20
20
  def initialize: (
21
- redis: redis,
21
+ redis: Infrastructure::redis,
22
22
  scripting: Infrastructure::Redis::Storage::Scripting,
23
- key_space: Infrastructure::Redis::Storage::KeySpace,
23
+ key_space: Infrastructure::Redis::Key,
24
24
  config: Domain::Config,
25
- error_notifier: error_notifier,
25
+ error_notifier: Domain::error_notifier,
26
26
  failover_light: Domain::Light,
27
27
  clock: Domain::_Clock,
28
28
  ) -> void
@@ -0,0 +1,35 @@
1
+ module Stoplight
2
+ module Wiring
3
+ class System
4
+ class Storage
5
+ @system_id: String
6
+ @system_name: String
7
+ @failover_system: _System
8
+ @factories: Hash[Domain::Config, LightFactory]
9
+ @telemetry: Domain::_TelemetryPublisher
10
+
11
+ def initialize: (
12
+ system_id: String,
13
+ system_name: String,
14
+ failover_system: _System,
15
+ telemetry: Domain::_TelemetryPublisher
16
+ ) -> void
17
+
18
+ def state_snapshot: (Domain::Config) -> Domain::StateSnapshot
19
+ def recovery_metrics_snapshot: (Domain::Config) -> Domain::MetricsSnapshot
20
+ def metrics_snapshot: (Domain::Config) -> Domain::MetricsSnapshot
21
+ def delete: (Domain::Config) -> void
22
+ def lock: (Domain::Config, Domain::color) -> void
23
+ def unlock: (Domain::Config) -> void
24
+
25
+ private
26
+
27
+ def state_store: (Domain::Config) -> Domain::_StateStore
28
+ def recovery_metrics_store: (Domain::Config) -> Domain::_MetricsStore
29
+ def metrics_store: (Domain::Config) -> Domain::_MetricsStore
30
+ def lock_control: (Domain::Config) -> Domain::LockControl
31
+ def light_factory: (Domain::Config) -> LightFactory
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,30 @@
1
+ module Stoplight
2
+ module Wiring
3
+ class System
4
+ include _System
5
+
6
+ @name: String
7
+ REGISTRATION_FRAME_LIMIT: Integer
8
+
9
+ @lights: Concurrent::Map[String, [Domain::Light, Integer, Array[String]]]
10
+ @failover_system: _System?
11
+ @registry: Domain::_Registry
12
+ @telemetry: Domain::Telemetry::Bus
13
+ @config: Domain::Config
14
+
15
+ def initialize: (
16
+ config: Domain::Config,
17
+ failover_system: _System?,
18
+ registry: Domain::_Registry,
19
+ ) -> void
20
+
21
+ def persistent?: -> bool
22
+ def __stoplight__storage: -> Storage
23
+ def __stoplight__registry: -> Domain::_Registry
24
+
25
+ private
26
+
27
+ def wrapped_notifiers: -> Array[Domain::_StateTransitionNotifier]
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,39 @@
1
+ module Stoplight
2
+ module Wiring
3
+ class SystemConfigurationDsl
4
+ @id: String
5
+
6
+ def initialize: (
7
+ _ToS name,
8
+ ?cool_off_time: optional[Domain::duration_seconds],
9
+ ?threshold: optional[Domain::percentage | Integer],
10
+ ?recovery_threshold: optional[Integer],
11
+ ?window_size: optional[Domain::duration_seconds?],
12
+ ?tracked_errors: optional[Array[Module] | Module],
13
+ ?skipped_errors: optional[Array[Module] | Module],
14
+ ?data_store: optional[Domain::_DataStore],
15
+ ?error_notifier: optional[Domain::error_notifier],
16
+ ?notifiers: optional[Array[Domain::_StateTransitionNotifier]],
17
+ ?traffic_control: optional[traffic_control],
18
+ ?traffic_recovery: optional[traffic_recovery],
19
+ ) -> void
20
+
21
+ def configure!: (Domain::Config default_config) -> Domain::Config
22
+
23
+ private
24
+
25
+ attr_reader name: String
26
+ attr_reader cool_off_time: optional[Domain::duration_seconds]
27
+ attr_reader threshold: optional[Domain::percentage | Integer]
28
+ attr_reader recovery_threshold: optional[Integer]
29
+ attr_reader window_size: optional[Domain::duration_seconds?]
30
+ attr_reader data_store: optional[Domain::_DataStore]
31
+ attr_reader error_notifier: optional[Domain::error_notifier]
32
+ attr_reader notifiers: optional[Array[Domain::_StateTransitionNotifier]]
33
+ attr_reader tracked_errors: optional[Array[Module]]
34
+ attr_reader skipped_errors: optional[Array[Module]]
35
+ attr_reader traffic_control: optional[Domain::_TrafficControl]
36
+ attr_reader traffic_recovery: optional[Domain::_TrafficRecovery]
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,6 @@
1
+ module Stoplight
2
+ module Wiring
3
+ type traffic_control = :consecutive_errors | :error_rate
4
+ type traffic_recovery = :consecutive_successes
5
+ end
6
+ end
data/sig/stoplight.rbs CHANGED
@@ -1,66 +1,49 @@
1
1
  module Stoplight
2
- type optional[T] = Undefined | T
3
-
4
- type timestamp = Float | Integer
5
- type redis = ::Redis | ConnectionPool[::Redis]
6
-
7
- # Light Colors
8
- type green = "green"
9
- type yellow = "yellow"
10
- type red = "red"
11
- type color = green | yellow | red
12
-
13
- # Light States
14
- type unlocked = "unlocked"
15
- type locked_green = "locked_green"
16
- type locked_red = "locked_red"
17
- type state = unlocked | locked_green | locked_red
18
-
19
- # Duration in seconds (1, 23, 0.4, etc.)
20
- type duration = Float | Integer
21
- # Percentage as decimal (0.0 to 1.0)
22
- type percentage = Float
23
-
24
- type error_notifier = ^(StandardError) -> void
25
- type traffic_control = :consecutive_errors | :error_rate | {error_rate: {min_requests: Integer}}
26
- type traffic_recovery = :consecutive_successes
27
- type data_store = DataStore::Redis | DataStore::Memory
28
- type state_transition_notifier = _StateTransitionNotifier
29
- type notification_formatter = ^(Domain::Config light, color, color, StandardError?) -> String
2
+ extend _System
3
+
4
+ T: singleton(Types)
5
+ CONFIG_MUTEX: Mutex
6
+
7
+ self.@state: Wiring::GlobalState?
8
+ def self.warn_if_reconfiguring: (bool) { () -> void } -> void
9
+ def self.configured?: -> bool
10
+ def self.__stoplight__reset!: -> void
11
+ def self.ensure_configured: -> void
12
+ def self.register_system: (
13
+ _ToS name,
14
+ ?cool_off_time: optional[Domain::duration_seconds],
15
+ ?threshold: optional[Domain::percentage | Integer],
16
+ ?recovery_threshold: optional[Integer],
17
+ ?window_size: optional[Domain::duration_seconds?],
18
+ ?tracked_errors: optional[Array[Module]],
19
+ ?skipped_errors: optional[Array[Module]],
20
+ ?data_store: optional[Domain::_DataStore],
21
+ ?error_notifier: optional[Domain::error_notifier],
22
+ ?notifiers: optional[Array[Domain::_StateTransitionNotifier]],
23
+ ?traffic_control: optional[Wiring::traffic_control],
24
+ ?traffic_recovery: optional[Wiring::traffic_recovery],
25
+ ) -> _System
26
+ def self.__stoplight__default_configuration: -> Domain::Config
27
+ def self.__stoplight__default_system: -> Wiring::System
28
+ def self.state: -> Wiring::GlobalState
30
29
 
31
- def self.configure: (?trust_me_im_an_engineer: bool) ?{ (_Configuration) -> void } -> void
30
+ type optional[T] = Undefined | T
32
31
 
33
- def self.light: (
34
- String name,
35
- ?cool_off_time: optional[duration],
36
- ?threshold: optional[percentage | Integer],
37
- ?recovery_threshold: optional[Integer],
38
- ?window_size: optional[duration?],
39
- ?tracked_errors: optional[Array[_ExceptionMatcher] | _ExceptionMatcher],
40
- ?skipped_errors: optional[Array[_ExceptionMatcher] | _ExceptionMatcher],
41
- ?data_store: optional[data_store],
42
- ?error_notifier: optional[error_notifier],
43
- ?notifiers: optional[Array[state_transition_notifier]],
44
- ?traffic_control: optional[traffic_control],
45
- ?traffic_recovery: optional[traffic_recovery],
46
- ) -> _Light
32
+ def self.configure: (?trust_me_im_an_engineer: bool) ?{ (Wiring::DefaultConfiguration) -> void } -> void
47
33
  end
48
34
 
49
35
  module Kernel
50
36
  # For a method usable both as Kernel.Stoplight() and just Stoplight()
51
37
  def self?.Stoplight: (
52
38
  String name,
53
- ?cool_off_time: Stoplight::optional[Stoplight::duration],
54
- ?threshold: Stoplight::optional[Stoplight::percentage | Integer],
39
+ ?cool_off_time: Stoplight::optional[Stoplight::Domain::duration_seconds],
40
+ ?threshold: Stoplight::optional[Stoplight::Domain::percentage | Integer],
55
41
  ?recovery_threshold: Stoplight::optional[Integer],
56
- ?window_size: Stoplight::optional[Stoplight::duration?],
57
- ?tracked_errors: Stoplight::optional[Array[Stoplight::_ExceptionMatcher] | Stoplight::_ExceptionMatcher],
58
- ?skipped_errors: Stoplight::optional[Array[Stoplight::_ExceptionMatcher] | Stoplight::_ExceptionMatcher],
59
- ?data_store: Stoplight::optional[Stoplight::data_store],
60
- ?error_notifier: Stoplight::optional[Stoplight::error_notifier],
61
- ?notifiers: Stoplight::optional[Array[Stoplight::state_transition_notifier]],
62
- ?traffic_control: Stoplight::optional[Stoplight::traffic_control],
63
- ?traffic_recovery: Stoplight::optional[Stoplight::traffic_recovery],
64
- ) -> Stoplight::_Light
42
+ ?window_size: Stoplight::optional[Stoplight::Domain::duration_seconds?],
43
+ ?tracked_errors: Stoplight::optional[Array[Module] | Module],
44
+ ?skipped_errors: Stoplight::optional[Array[Module] | Module],
45
+ ?traffic_control: Stoplight::optional[Stoplight::Wiring::traffic_control],
46
+ ?traffic_recovery: Stoplight::optional[Stoplight::Wiring::traffic_recovery],
47
+ ) -> Stoplight::Domain::Light
65
48
  end
66
49