dynflow 1.8.1 → 1.8.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (233) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +1 -1
  3. data/.rubocop.yml +11 -5
  4. data/.rubocop_todo.yml +777 -345
  5. data/Gemfile +4 -3
  6. data/Rakefile +1 -0
  7. data/doc/pages/Gemfile +4 -3
  8. data/doc/pages/Rakefile +1 -0
  9. data/doc/pages/plugins/alert_block.rb +1 -0
  10. data/doc/pages/plugins/div_tag.rb +1 -0
  11. data/doc/pages/plugins/graphviz.rb +6 -6
  12. data/doc/pages/plugins/plantuml.rb +2 -3
  13. data/doc/pages/plugins/play.rb +1 -2
  14. data/doc/pages/plugins/tags.rb +2 -8
  15. data/doc/pages/plugins/toc.rb +1 -1
  16. data/dynflow.gemspec +11 -10
  17. data/examples/clock_benchmark.rb +1 -0
  18. data/examples/example_helper.rb +4 -3
  19. data/examples/future_execution.rb +0 -2
  20. data/examples/memory_limit_watcher.rb +8 -8
  21. data/examples/orchestrate.rb +9 -21
  22. data/examples/orchestrate_evented.rb +18 -33
  23. data/examples/remote_executor.rb +13 -14
  24. data/examples/singletons.rb +1 -0
  25. data/examples/sub_plan_concurrency_control.rb +0 -1
  26. data/examples/sub_plans.rb +1 -0
  27. data/examples/sub_plans_v2.rb +1 -0
  28. data/lib/dynflow/action/cancellable.rb +1 -0
  29. data/lib/dynflow/action/format.rb +1 -4
  30. data/lib/dynflow/action/missing.rb +4 -4
  31. data/lib/dynflow/action/polling.rb +2 -3
  32. data/lib/dynflow/action/progress.rb +1 -4
  33. data/lib/dynflow/action/rescue.rb +1 -2
  34. data/lib/dynflow/action/singleton.rb +1 -0
  35. data/lib/dynflow/action/suspended.rb +1 -0
  36. data/lib/dynflow/action/timeouts.rb +2 -1
  37. data/lib/dynflow/action/with_bulk_sub_plans.rb +1 -0
  38. data/lib/dynflow/action/with_polling_sub_plans.rb +1 -1
  39. data/lib/dynflow/action/with_sub_plans.rb +20 -19
  40. data/lib/dynflow/action.rb +37 -37
  41. data/lib/dynflow/active_job/queue_adapter.rb +2 -1
  42. data/lib/dynflow/actor.rb +2 -2
  43. data/lib/dynflow/actors/execution_plan_cleaner.rb +1 -0
  44. data/lib/dynflow/actors.rb +1 -0
  45. data/lib/dynflow/clock.rb +3 -4
  46. data/lib/dynflow/config.rb +6 -5
  47. data/lib/dynflow/connectors/abstract.rb +11 -10
  48. data/lib/dynflow/connectors/database.rb +2 -2
  49. data/lib/dynflow/connectors/direct.rb +2 -3
  50. data/lib/dynflow/connectors.rb +1 -0
  51. data/lib/dynflow/coordinator.rb +2 -6
  52. data/lib/dynflow/coordinator_adapters/abstract.rb +1 -0
  53. data/lib/dynflow/coordinator_adapters/sequel.rb +1 -0
  54. data/lib/dynflow/coordinator_adapters.rb +1 -2
  55. data/lib/dynflow/dead_letter_silencer.rb +1 -0
  56. data/lib/dynflow/debug/telemetry/persistence.rb +3 -2
  57. data/lib/dynflow/delayed_executors/abstract.rb +1 -2
  58. data/lib/dynflow/delayed_executors/abstract_core.rb +1 -1
  59. data/lib/dynflow/delayed_executors/polling.rb +1 -2
  60. data/lib/dynflow/delayed_executors.rb +1 -2
  61. data/lib/dynflow/delayed_plan.rb +6 -6
  62. data/lib/dynflow/director/execution_plan_manager.rb +1 -1
  63. data/lib/dynflow/director/flow_manager.rb +1 -0
  64. data/lib/dynflow/director/queue_hash.rb +2 -1
  65. data/lib/dynflow/director/running_steps_manager.rb +3 -2
  66. data/lib/dynflow/director/sequence_cursor.rb +1 -2
  67. data/lib/dynflow/director/sequential_manager.rb +1 -0
  68. data/lib/dynflow/director.rb +12 -11
  69. data/lib/dynflow/dispatcher/abstract.rb +1 -0
  70. data/lib/dynflow/dispatcher/client_dispatcher.rb +33 -33
  71. data/lib/dynflow/dispatcher/executor_dispatcher.rb +7 -6
  72. data/lib/dynflow/dispatcher.rb +8 -7
  73. data/lib/dynflow/errors.rb +1 -0
  74. data/lib/dynflow/execution_history.rb +2 -1
  75. data/lib/dynflow/execution_plan/dependency_graph.rb +1 -2
  76. data/lib/dynflow/execution_plan/hooks.rb +1 -1
  77. data/lib/dynflow/execution_plan/output_reference.rb +4 -4
  78. data/lib/dynflow/execution_plan/steps/abstract.rb +21 -20
  79. data/lib/dynflow/execution_plan/steps/abstract_flow_step.rb +1 -1
  80. data/lib/dynflow/execution_plan/steps/error.rb +10 -9
  81. data/lib/dynflow/execution_plan/steps/finalize_step.rb +1 -2
  82. data/lib/dynflow/execution_plan/steps/plan_step.rb +12 -11
  83. data/lib/dynflow/execution_plan/steps/run_step.rb +1 -1
  84. data/lib/dynflow/execution_plan/steps.rb +1 -2
  85. data/lib/dynflow/execution_plan.rb +46 -46
  86. data/lib/dynflow/executors/abstract/core.rb +4 -3
  87. data/lib/dynflow/executors/parallel/core.rb +3 -2
  88. data/lib/dynflow/executors/parallel/pool.rb +1 -4
  89. data/lib/dynflow/executors/parallel/worker.rb +1 -0
  90. data/lib/dynflow/executors/parallel.rb +3 -2
  91. data/lib/dynflow/executors/sidekiq/core.rb +3 -1
  92. data/lib/dynflow/executors/sidekiq/internal_job_base.rb +1 -0
  93. data/lib/dynflow/executors/sidekiq/orchestrator_jobs.rb +1 -0
  94. data/lib/dynflow/executors/sidekiq/redis_locking.rb +1 -0
  95. data/lib/dynflow/executors/sidekiq/serialization.rb +1 -0
  96. data/lib/dynflow/executors/sidekiq/worker_jobs.rb +1 -0
  97. data/lib/dynflow/executors.rb +1 -1
  98. data/lib/dynflow/extensions/msgpack.rb +5 -4
  99. data/lib/dynflow/extensions.rb +1 -0
  100. data/lib/dynflow/flows/abstract.rb +1 -1
  101. data/lib/dynflow/flows/abstract_composed.rb +1 -2
  102. data/lib/dynflow/flows/atom.rb +1 -2
  103. data/lib/dynflow/flows/concurrence.rb +1 -1
  104. data/lib/dynflow/flows/registry.rb +1 -0
  105. data/lib/dynflow/flows/sequence.rb +1 -1
  106. data/lib/dynflow/flows.rb +1 -2
  107. data/lib/dynflow/logger_adapters/abstract.rb +1 -1
  108. data/lib/dynflow/logger_adapters/delegator.rb +1 -1
  109. data/lib/dynflow/logger_adapters/formatters/abstract.rb +1 -0
  110. data/lib/dynflow/logger_adapters/formatters/exception.rb +1 -0
  111. data/lib/dynflow/logger_adapters/formatters.rb +1 -0
  112. data/lib/dynflow/logger_adapters/simple.rb +6 -5
  113. data/lib/dynflow/logger_adapters.rb +1 -0
  114. data/lib/dynflow/middleware/common/singleton.rb +1 -0
  115. data/lib/dynflow/middleware/common/transaction.rb +1 -0
  116. data/lib/dynflow/middleware/register.rb +1 -0
  117. data/lib/dynflow/middleware/resolver.rb +2 -3
  118. data/lib/dynflow/middleware/stack.rb +1 -0
  119. data/lib/dynflow/middleware/world.rb +1 -2
  120. data/lib/dynflow/middleware.rb +1 -0
  121. data/lib/dynflow/persistence.rb +4 -5
  122. data/lib/dynflow/persistence_adapters/abstract.rb +1 -1
  123. data/lib/dynflow/persistence_adapters/sequel.rb +14 -14
  124. data/lib/dynflow/persistence_adapters/sequel_migrations/001_initial.rb +2 -1
  125. data/lib/dynflow/persistence_adapters/sequel_migrations/002_incremental_progress.rb +1 -0
  126. data/lib/dynflow/persistence_adapters/sequel_migrations/003_parent_action.rb +1 -0
  127. data/lib/dynflow/persistence_adapters/sequel_migrations/004_coordinator_records.rb +1 -1
  128. data/lib/dynflow/persistence_adapters/sequel_migrations/005_envelopes.rb +1 -0
  129. data/lib/dynflow/persistence_adapters/sequel_migrations/006_fix_data_length.rb +1 -0
  130. data/lib/dynflow/persistence_adapters/sequel_migrations/007_future_execution.rb +1 -0
  131. data/lib/dynflow/persistence_adapters/sequel_migrations/008_rename_scheduled_plans_to_delayed_plans.rb +1 -0
  132. data/lib/dynflow/persistence_adapters/sequel_migrations/009_fix_mysql_data_length.rb +1 -1
  133. data/lib/dynflow/persistence_adapters/sequel_migrations/010_add_execution_plans_label.rb +1 -0
  134. data/lib/dynflow/persistence_adapters/sequel_migrations/011_placeholder.rb +1 -0
  135. data/lib/dynflow/persistence_adapters/sequel_migrations/012_add_delayed_plans_serialized_args.rb +1 -0
  136. data/lib/dynflow/persistence_adapters/sequel_migrations/013_add_action_columns.rb +1 -0
  137. data/lib/dynflow/persistence_adapters/sequel_migrations/014_add_step_columns.rb +1 -0
  138. data/lib/dynflow/persistence_adapters/sequel_migrations/015_add_execution_plan_columns.rb +1 -0
  139. data/lib/dynflow/persistence_adapters/sequel_migrations/016_add_step_queue.rb +1 -0
  140. data/lib/dynflow/persistence_adapters/sequel_migrations/017_add_delayed_plan_frozen.rb +1 -0
  141. data/lib/dynflow/persistence_adapters/sequel_migrations/018_add_uuid_column.rb +37 -30
  142. data/lib/dynflow/persistence_adapters/sequel_migrations/019_update_mysql_time_precision.rb +1 -0
  143. data/lib/dynflow/persistence_adapters/sequel_migrations/020_drop_duplicate_indices.rb +1 -0
  144. data/lib/dynflow/persistence_adapters/sequel_migrations/021_create_output_chunks.rb +4 -3
  145. data/lib/dynflow/persistence_adapters/sequel_migrations/023_sqlite_workarounds.rb +1 -0
  146. data/lib/dynflow/persistence_adapters.rb +1 -0
  147. data/lib/dynflow/rails/configuration.rb +5 -4
  148. data/lib/dynflow/rails/daemon.rb +1 -1
  149. data/lib/dynflow/rails.rb +3 -2
  150. data/lib/dynflow/round_robin.rb +2 -2
  151. data/lib/dynflow/semaphores/abstract.rb +1 -1
  152. data/lib/dynflow/semaphores/aggregating.rb +1 -2
  153. data/lib/dynflow/semaphores/dummy.rb +1 -1
  154. data/lib/dynflow/semaphores/stateful.rb +1 -1
  155. data/lib/dynflow/semaphores.rb +1 -0
  156. data/lib/dynflow/serializable.rb +1 -0
  157. data/lib/dynflow/serializer.rb +2 -2
  158. data/lib/dynflow/serializers/abstract.rb +1 -2
  159. data/lib/dynflow/serializers/noop.rb +1 -2
  160. data/lib/dynflow/serializers.rb +1 -2
  161. data/lib/dynflow/stateful.rb +1 -0
  162. data/lib/dynflow/telemetry.rb +11 -10
  163. data/lib/dynflow/telemetry_adapters/abstract.rb +1 -0
  164. data/lib/dynflow/telemetry_adapters/dummy.rb +1 -0
  165. data/lib/dynflow/telemetry_adapters/statsd.rb +2 -1
  166. data/lib/dynflow/testing/assertions.rb +7 -7
  167. data/lib/dynflow/testing/dummy_coordinator.rb +1 -0
  168. data/lib/dynflow/testing/dummy_execution_plan.rb +1 -0
  169. data/lib/dynflow/testing/dummy_executor.rb +1 -0
  170. data/lib/dynflow/testing/dummy_planned_action.rb +3 -1
  171. data/lib/dynflow/testing/dummy_step.rb +1 -0
  172. data/lib/dynflow/testing/dummy_world.rb +1 -0
  173. data/lib/dynflow/testing/factories.rb +42 -37
  174. data/lib/dynflow/testing/in_thread_executor.rb +1 -0
  175. data/lib/dynflow/testing/in_thread_world.rb +1 -0
  176. data/lib/dynflow/testing/managed_clock.rb +1 -1
  177. data/lib/dynflow/testing/mimic.rb +4 -4
  178. data/lib/dynflow/testing.rb +1 -0
  179. data/lib/dynflow/throttle_limiter.rb +1 -1
  180. data/lib/dynflow/transaction_adapters/abstract.rb +1 -0
  181. data/lib/dynflow/transaction_adapters/active_record.rb +1 -0
  182. data/lib/dynflow/transaction_adapters/none.rb +1 -0
  183. data/lib/dynflow/transaction_adapters.rb +1 -2
  184. data/lib/dynflow/utils/indifferent_hash.rb +7 -1
  185. data/lib/dynflow/utils/priority_queue.rb +1 -0
  186. data/lib/dynflow/utils.rb +1 -1
  187. data/lib/dynflow/version.rb +2 -1
  188. data/lib/dynflow/watchers/memory_consumption_watcher.rb +1 -1
  189. data/lib/dynflow/web/console.rb +1 -3
  190. data/lib/dynflow/web/console_helpers.rb +5 -4
  191. data/lib/dynflow/web/filtering_helpers.rb +1 -0
  192. data/lib/dynflow/web/world_helpers.rb +1 -0
  193. data/lib/dynflow/web.rb +3 -3
  194. data/lib/dynflow/web_console.rb +1 -0
  195. data/lib/dynflow/world/invalidation.rb +1 -0
  196. data/lib/dynflow/world.rb +19 -19
  197. data/lib/dynflow.rb +3 -6
  198. data/test/abnormal_states_recovery_test.rb +4 -8
  199. data/test/action_test.rb +10 -18
  200. data/test/activejob_adapter_test.rb +2 -2
  201. data/test/batch_sub_tasks_test.rb +1 -1
  202. data/test/clock_test.rb +2 -3
  203. data/test/concurrency_control_test.rb +6 -7
  204. data/test/coordinator_test.rb +1 -0
  205. data/test/daemon_test.rb +3 -2
  206. data/test/dead_letter_silencer_test.rb +2 -1
  207. data/test/dispatcher_test.rb +4 -5
  208. data/test/execution_plan_cleaner_test.rb +1 -0
  209. data/test/execution_plan_hooks_test.rb +1 -0
  210. data/test/execution_plan_test.rb +10 -32
  211. data/test/executor_test.rb +20 -37
  212. data/test/extensions_test.rb +1 -0
  213. data/test/flows_test.rb +2 -2
  214. data/test/future_execution_test.rb +2 -3
  215. data/test/memory_cosumption_watcher_test.rb +1 -0
  216. data/test/middleware_test.rb +4 -6
  217. data/test/persistence_test.rb +26 -26
  218. data/test/redis_locking_test.rb +1 -0
  219. data/test/rescue_test.rb +3 -11
  220. data/test/round_robin_test.rb +1 -0
  221. data/test/semaphores_test.rb +5 -7
  222. data/test/support/code_workflow_example.rb +11 -28
  223. data/test/support/dummy_example.rb +20 -19
  224. data/test/support/middleware_example.rb +2 -8
  225. data/test/support/rescue_example.rb +1 -14
  226. data/test/support/test_execution_log.rb +1 -2
  227. data/test/test_helper.rb +3 -7
  228. data/test/testing_test.rb +6 -8
  229. data/test/utils_test.rb +1 -0
  230. data/test/v2_sub_plans_test.rb +1 -0
  231. data/test/web_console_test.rb +4 -4
  232. data/test/world_test.rb +4 -3
  233. metadata +43 -43
data/Gemfile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  source 'https://rubygems.org'
3
4
 
4
5
  gemspec
@@ -13,8 +14,8 @@ group :pry do
13
14
  end
14
15
 
15
16
  group :sidekiq do
16
- gem 'sidekiq'
17
17
  gem 'gitlab-sidekiq-fetcher', :require => 'sidekiq-reliable-fetch'
18
+ gem 'sidekiq'
18
19
  end
19
20
 
20
21
  group :postgresql do
@@ -26,7 +27,7 @@ group :mysql do
26
27
  end
27
28
 
28
29
  group :lint do
29
- gem 'rubocop', '0.39.0'
30
+ gem 'theforeman-rubocop', '~> 0.0.4'
30
31
  end
31
32
 
32
33
  group :memory_watcher do
@@ -35,8 +36,8 @@ end
35
36
 
36
37
  group :rails do
37
38
  gem 'daemons'
38
- gem 'rails', '>= 4.2.9', '< 7'
39
39
  gem 'logging'
40
+ gem 'rails', '>= 4.2.9', '< 7'
40
41
  end
41
42
 
42
43
  group :telemetry do
data/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'rake/testtask'
3
4
  require 'fileutils'
4
5
 
data/doc/pages/Gemfile CHANGED
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  source 'https://rubygems.org'
3
4
 
4
- gem 'rake'
5
5
  gem 'jekyll'
6
6
  gem 'pry'
7
+ gem 'pygments.rb'
8
+ gem 'rake'
9
+ gem 'redcarpet'
7
10
  gem 'ruby-nuggets' # require by tags plugin
8
11
  gem 'therubyracer'
9
- gem 'redcarpet'
10
- gem 'pygments.rb'
data/doc/pages/Rakefile CHANGED
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'rubygems'
3
4
  require 'rake'
4
5
 
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require_relative 'div_tag'
3
4
 
4
5
  module Jekyll
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Jekyll
3
4
  class DivTag < Liquid::Block
4
5
  def render(context)
@@ -1,11 +1,11 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # taken from https://raw.githubusercontent.com/kui/octopress-graphviz/master/graphviz_block.rb
3
4
 
4
5
  require 'open3'
5
6
 
6
7
  module Jekyll
7
8
  class GraphvizBlock < Liquid::Block
8
-
9
9
  DIV_CLASS_ATTR = 'graphviz-wrapper'
10
10
  DEFAULT_GRAPH_NAME = 'Graphviz'
11
11
  DOT_OPTS = '-Tsvg'
@@ -13,9 +13,9 @@ module Jekyll
13
13
  DOT_EXTS = (ENV['PATHEXT'] || '.exe;.bat;.com').split(";")
14
14
  DOT_EXTS.unshift ''
15
15
  DOT_PATH = ENV['PATH'].split(File::PATH_SEPARATOR)
16
- .map { |a| File.join a, DOT_EXEC }
17
- .map { |a| DOT_EXTS.map { |ex| a+ex } }.flatten
18
- .find { |c| File.executable_real? c }
16
+ .map { |a| File.join a, DOT_EXEC }
17
+ .map { |a| DOT_EXTS.map { |ex| a + ex } }.flatten
18
+ .find { |c| File.executable_real? c }
19
19
  raise "not found a executable file: #{DOT_EXEC}" if DOT_PATH.nil?
20
20
  DOT_CMD = "#{DOT_PATH} #{DOT_OPTS}"
21
21
 
@@ -61,7 +61,7 @@ module Jekyll
61
61
  code = add_desc_attrs code
62
62
  code = insert_desc_elements code
63
63
  code = wrap_with_div code
64
- code = code.gsub /<polygon fill="white" stroke="none"/, '<polygon fill="transparent" stroke="none"'
64
+ code = code.gsub(/<polygon fill="white" stroke="none"/, '<polygon fill="transparent" stroke="none"')
65
65
  code
66
66
  end
67
67
 
@@ -89,7 +89,7 @@ module Jekyll
89
89
 
90
90
  def remove_xmlns_attrs(svg)
91
91
  svg.sub(%[xmlns="http://www.w3.org/2000/svg"], '')
92
- .sub(%[xmlns:xlink="http://www.w3.org/1999/xlink"], '')
92
+ .sub(%[xmlns:xlink="http://www.w3.org/1999/xlink"], '')
93
93
  end
94
94
 
95
95
  def add_desc_attrs(svg)
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  # Title: PlantUML Code Blocks for Jekyll
3
4
  # Author: YJ Park (yjpark@gmail.com)
4
5
  # https://github.com/yjpark/jekyll-plantuml
@@ -13,7 +14,6 @@ require 'open3'
13
14
  require 'fileutils'
14
15
 
15
16
  module Jekyll
16
-
17
17
  class PlantUMLBlock < Liquid::Block
18
18
  attr_reader :config
19
19
 
@@ -31,7 +31,7 @@ module Jekyll
31
31
  if !File.exist?(filepath)
32
32
  plantuml_jar = File.expand_path(plantuml_jar_path)
33
33
  cmd = "java -Djava.awt.headless=true -jar " + plantuml_jar + dot_cmd + " -pipe > " + filepath
34
- result, status = Open3.capture2e(cmd, :stdin_data=>code)
34
+ result, status = Open3.capture2e(cmd, :stdin_data => code)
35
35
  Jekyll.logger.debug(filepath + " -->\t" + status.inspect() + "\t" + result)
36
36
  end
37
37
 
@@ -79,7 +79,6 @@ module Jekyll
79
79
  Jekyll.logger.info("Create PlantUML image folder: " + folderpath)
80
80
  end
81
81
  end
82
-
83
82
  end # PlantUMLBlock
84
83
  end
85
84
 
@@ -1,14 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'pp'
3
4
  require 'pry'
4
5
 
5
6
  module Jekyll
6
-
7
7
  class Play < Generator
8
8
  def generate(site)
9
9
  # pp site
10
10
  # binding.pry
11
11
  end
12
-
13
12
  end
14
13
  end
@@ -1,11 +1,10 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'nuggets/range/quantile'
3
4
  require 'erb'
4
5
 
5
6
  module Jekyll
6
-
7
7
  class Tagger < Generator
8
-
9
8
  safe true
10
9
 
11
10
  attr_accessor :site
@@ -44,7 +43,7 @@ module Jekyll
44
43
  page_name = "#{pretty? ? 'index' : name}#{site.layouts[data['layout']].ext}"
45
44
 
46
45
  site.pages << TagPage.new(
47
- site, site.source, tag_dir, page_name, data
46
+ site, site.source, tag_dir, page_name, data
48
47
  )
49
48
  end
50
49
  }
@@ -79,11 +78,9 @@ module Jekyll
79
78
  def pretty?
80
79
  @pretty ||= (site.permalink_style == :pretty || site.config['tag_permalink_style'] == 'pretty')
81
80
  end
82
-
83
81
  end
84
82
 
85
83
  class TagPage < Page
86
-
87
84
  def initialize(site, base, dir, name, data = {})
88
85
  self.content = data.delete('content') || ''
89
86
  self.data = data
@@ -94,11 +91,9 @@ module Jekyll
94
91
  def read_yaml(*)
95
92
  # Do nothing
96
93
  end
97
-
98
94
  end
99
95
 
100
96
  module Filters
101
-
102
97
  def tag_cloud(site)
103
98
  active_tag_data.map { |tag, set|
104
99
  tag_link(tag, tag_url(tag), :class => "set-#{set} label label-default")
@@ -134,5 +129,4 @@ module Jekyll
134
129
  site.config["tag_data"].reject { |tag, set| site.config["ignored_tags"].include? tag }
135
130
  end
136
131
  end
137
-
138
132
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Jekyll
3
4
  module FancyToCFilter
4
5
  def fancytoc(input)
5
-
6
6
  converter = @context.registers[:site].converters.find { |c| c.is_a? Jekyll::Converters::Markdown }
7
7
  extensions = converter.instance_variable_get(:@parser).instance_variable_get(:@redcarpet_extensions)
8
8
  toc_generator = Redcarpet::Markdown.new(Redcarpet::Render::HTML_TOC, extensions)
data/dynflow.gemspec CHANGED
@@ -1,5 +1,6 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  # frozen_string_literal: true
3
+
3
4
  $:.push File.expand_path("../lib", __FILE__)
4
5
  require "dynflow/version"
5
6
 
@@ -17,24 +18,24 @@ Gem::Specification.new do |s|
17
18
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
19
  s.require_paths = ["lib"]
19
20
 
20
- s.required_ruby_version = '>= 2.3.0'
21
+ s.required_ruby_version = '>= 2.7.0'
21
22
 
22
- s.add_dependency "multi_json"
23
- s.add_dependency "msgpack", '~> 1.3', '>= 1.3.3'
24
- s.add_dependency "apipie-params"
25
23
  s.add_dependency "algebrick", '~> 0.7.0'
24
+ s.add_dependency "apipie-params"
26
25
  s.add_dependency "concurrent-ruby", '~> 1.1.3'
27
26
  s.add_dependency "concurrent-ruby-edge", '~> 0.6.0'
27
+ s.add_dependency "msgpack", '~> 1.3', '>= 1.3.3'
28
+ s.add_dependency "multi_json"
28
29
  s.add_dependency "sequel", '>= 4.0.0'
29
30
 
30
- s.add_development_dependency "rake"
31
- s.add_development_dependency "rack-test"
31
+ s.add_development_dependency 'activejob'
32
+ s.add_development_dependency "activerecord"
32
33
  s.add_development_dependency "minitest", "< 5.19"
33
34
  s.add_development_dependency "minitest-reporters"
34
35
  s.add_development_dependency "minitest-stub-const"
35
- s.add_development_dependency "activerecord"
36
- s.add_development_dependency 'activejob'
37
- s.add_development_dependency "sqlite3"
38
- s.add_development_dependency "sinatra"
39
36
  s.add_development_dependency 'mocha'
37
+ s.add_development_dependency "rack-test"
38
+ s.add_development_dependency "rake"
39
+ s.add_development_dependency "sinatra"
40
+ s.add_development_dependency "sqlite3"
40
41
  end
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  require 'dynflow'
3
4
  require 'benchmark'
4
5
 
@@ -1,12 +1,13 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  $:.unshift(File.expand_path('../../lib', __FILE__))
3
4
 
4
5
  require 'dynflow'
5
6
 
6
7
  class ExampleHelper
7
- CONSOLE_URL='http://localhost:4567'
8
- DYNFLOW_URL="#{CONSOLE_URL}/dynflow"
9
- SIDEKIQ_URL="#{CONSOLE_URL}/sidekiq"
8
+ CONSOLE_URL = 'http://localhost:4567'
9
+ DYNFLOW_URL = "#{CONSOLE_URL}/dynflow"
10
+ SIDEKIQ_URL = "#{CONSOLE_URL}/sidekiq"
10
11
 
11
12
  class << self
12
13
  def world
@@ -25,7 +25,6 @@ class CustomPassedObjectSerializer < ::Dynflow::Serializers::Abstract
25
25
  end
26
26
 
27
27
  class DelayedAction < Dynflow::Action
28
-
29
28
  def delay(delay_options, *args)
30
29
  CustomPassedObjectSerializer.new(args)
31
30
  end
@@ -36,7 +35,6 @@ class DelayedAction < Dynflow::Action
36
35
 
37
36
  def run
38
37
  end
39
-
40
38
  end
41
39
 
42
40
  if $0 == __FILE__
@@ -3,14 +3,14 @@
3
3
 
4
4
  require_relative 'example_helper'
5
5
 
6
- example_description = <<DESC
7
- Memory limit watcher Example
8
- ===========================
9
-
10
- In this example we are setting a watcher that will terminate our world object
11
- when process memory consumption exceeds a limit that will be set.
12
-
13
-
6
+ example_description = <<~DESC
7
+ Memory limit watcher Example
8
+ ===========================
9
+
10
+ In this example we are setting a watcher that will terminate our world object
11
+ when process memory consumption exceeds a limit that will be set.
12
+
13
+
14
14
  DESC
15
15
 
16
16
  module MemorylimiterExample
@@ -24,9 +24,7 @@ DESC
24
24
  require_relative 'example_helper'
25
25
 
26
26
  module Orchestrate
27
-
28
27
  class CreateInfrastructure < Dynflow::Action
29
-
30
28
  def plan
31
29
  sequence do
32
30
  concurrence do
@@ -34,26 +32,25 @@ module Orchestrate
34
32
  plan_action(CreateMachine, 'host2', 'storage')
35
33
  end
36
34
  plan_action(CreateMachine,
37
- 'host3',
38
- 'web_server',
39
- :db_machine => 'host1',
40
- :storage_machine => 'host2')
35
+ 'host3',
36
+ 'web_server',
37
+ :db_machine => 'host1',
38
+ :storage_machine => 'host2')
41
39
  end
42
40
  end
43
41
  end
44
42
 
45
43
  class CreateMachine < Dynflow::Action
46
-
47
44
  def plan(name, profile, config_options = {})
48
45
  prepare_disk = plan_action(PrepareDisk, 'name' => name)
49
46
  create_vm = plan_action(CreateVM,
50
- :name => name,
51
- :disk => prepare_disk.output['path'])
47
+ :name => name,
48
+ :disk => prepare_disk.output['path'])
52
49
  plan_action(AddIPtoHosts, :name => name, :ip => create_vm.output[:ip])
53
50
  plan_action(ConfigureMachine,
54
- :ip => create_vm.output[:ip],
55
- :profile => profile,
56
- :config_options => config_options)
51
+ :ip => create_vm.output[:ip],
52
+ :profile => profile,
53
+ :config_options => config_options)
57
54
  plan_self(:name => name)
58
55
  end
59
56
 
@@ -61,7 +58,6 @@ module Orchestrate
61
58
  # this is called after run methods of the actions in the
62
59
  # execution plan were finished
63
60
  end
64
-
65
61
  end
66
62
 
67
63
  class Base < Dynflow::Action
@@ -71,7 +67,6 @@ module Orchestrate
71
67
  end
72
68
 
73
69
  class PrepareDisk < Base
74
-
75
70
  def queue
76
71
  :slow
77
72
  end
@@ -88,11 +83,9 @@ module Orchestrate
88
83
  sleep!
89
84
  output[:path] = "/var/images/#{input[:name]}.img"
90
85
  end
91
-
92
86
  end
93
87
 
94
88
  class CreateVM < Base
95
-
96
89
  input_format do
97
90
  param :name
98
91
  param :disk
@@ -106,11 +99,9 @@ module Orchestrate
106
99
  sleep!
107
100
  output[:ip] = "192.168.100.#{rand(256)}"
108
101
  end
109
-
110
102
  end
111
103
 
112
104
  class AddIPtoHosts < Base
113
-
114
105
  input_format do
115
106
  param :ip
116
107
  end
@@ -118,11 +109,9 @@ module Orchestrate
118
109
  def run
119
110
  sleep!
120
111
  end
121
-
122
112
  end
123
113
 
124
114
  class ConfigureMachine < Base
125
-
126
115
  input_format do
127
116
  param :ip
128
117
  param :profile
@@ -144,7 +133,6 @@ module Orchestrate
144
133
 
145
134
  sleep!
146
135
  end
147
-
148
136
  end
149
137
  end
150
138
 
@@ -24,9 +24,7 @@ example_description = <<DESC
24
24
  DESC
25
25
 
26
26
  module OrchestrateEvented
27
-
28
27
  class CreateInfrastructure < Dynflow::Action
29
-
30
28
  def plan(get_stuck = false)
31
29
  sequence do
32
30
  concurrence do
@@ -34,59 +32,54 @@ module OrchestrateEvented
34
32
  plan_action(CreateMachine, 'host2', 'storage')
35
33
  end
36
34
  plan_action(CreateMachine,
37
- 'host3',
38
- 'web_server',
39
- :db_machine => 'host1',
40
- :storage_machine => 'host2')
35
+ 'host3',
36
+ 'web_server',
37
+ :db_machine => 'host1',
38
+ :storage_machine => 'host2')
41
39
  end
42
40
  end
43
41
  end
44
42
 
45
43
  class CreateMachine < Dynflow::Action
46
-
47
44
  def plan(name, profile, config_options = {})
48
45
  prepare_disk = plan_action(PrepareDisk, 'name' => name)
49
46
  create_vm = plan_action(CreateVM,
50
- :name => name,
51
- :disk => prepare_disk.output['path'])
47
+ :name => name,
48
+ :disk => prepare_disk.output['path'])
52
49
  plan_action(AddIPtoHosts, :name => name, :ip => create_vm.output[:ip])
53
50
  plan_action(ConfigureMachine,
54
- :ip => create_vm.output[:ip],
55
- :profile => profile,
56
- :config_options => config_options)
51
+ :ip => create_vm.output[:ip],
52
+ :profile => profile,
53
+ :config_options => config_options)
57
54
  plan_self(:name => name)
58
55
  end
59
56
 
60
57
  def finalize
61
58
  end
62
-
63
59
  end
64
60
 
65
61
  class Base < Dynflow::Action
66
-
67
62
  Finished = Algebrick.atom
68
63
 
69
64
  def run(event = nil)
70
65
  match(event,
71
- (on Finished do
72
- on_finish
73
- end),
74
- (on Dynflow::Action::Skip do
75
- # do nothing
76
- end),
77
- (on nil do
78
- suspend { |suspended_action| world.clock.ping suspended_action, rand(1), Finished }
79
- end))
66
+ (on Finished do
67
+ on_finish
68
+ end),
69
+ (on Dynflow::Action::Skip do
70
+ # do nothing
71
+ end),
72
+ (on nil do
73
+ suspend { |suspended_action| world.clock.ping suspended_action, rand(1), Finished }
74
+ end))
80
75
  end
81
76
 
82
77
  def on_finish
83
78
  raise NotImplementedError
84
79
  end
85
-
86
80
  end
87
81
 
88
82
  class PrepareDisk < Base
89
-
90
83
  input_format do
91
84
  param :name
92
85
  end
@@ -98,11 +91,9 @@ module OrchestrateEvented
98
91
  def on_finish
99
92
  output[:path] = "/var/images/#{input[:name]}.img"
100
93
  end
101
-
102
94
  end
103
95
 
104
96
  class CreateVM < Base
105
-
106
97
  input_format do
107
98
  param :name
108
99
  param :disk
@@ -115,22 +106,18 @@ module OrchestrateEvented
115
106
  def on_finish
116
107
  output[:ip] = "192.168.100.#{rand(256)}"
117
108
  end
118
-
119
109
  end
120
110
 
121
111
  class AddIPtoHosts < Base
122
-
123
112
  input_format do
124
113
  param :ip
125
114
  end
126
115
 
127
116
  def on_finish
128
117
  end
129
-
130
118
  end
131
119
 
132
120
  class ConfigureMachine < Base
133
-
134
121
  # thanks to this Dynflow knows this action can be politely
135
122
  # asked to get canceled
136
123
  include ::Dynflow::Action::Cancellable
@@ -163,9 +150,7 @@ module OrchestrateEvented
163
150
  suspend
164
151
  end
165
152
  end
166
-
167
153
  end
168
-
169
154
  end
170
155
 
171
156
  if $0 == __FILE__
@@ -45,7 +45,6 @@ end
45
45
 
46
46
  class RemoteExecutorExample
47
47
  class << self
48
-
49
48
  def run_observer
50
49
  world = ExampleHelper.create_world do |config|
51
50
  config.persistence_adapter = persistence_adapter
@@ -136,7 +135,6 @@ class RemoteExecutorExample
136
135
  sleep 0.5
137
136
  end
138
137
  end
139
-
140
138
  end
141
139
  end
142
140
 
@@ -145,17 +143,17 @@ command = ARGV.first || 'server'
145
143
  if $0 == __FILE__
146
144
  case command
147
145
  when 'observer'
148
- puts <<MSG
149
- The observer starting…. You can see what's going on there
150
- MSG
146
+ puts <<~MSG
147
+ The observer starting…. You can see what's going on there
148
+ MSG
151
149
  RemoteExecutorExample.run_observer
152
150
  when 'server'
153
- puts <<MSG
154
- The server is starting…. You can send the work to it by running:
155
-
156
- #{$0} client
157
-
158
- MSG
151
+ puts <<~MSG
152
+ The server is starting…. You can send the work to it by running:
153
+
154
+ #{$0} client
155
+
156
+ MSG
159
157
  RemoteExecutorExample.run_server
160
158
  when 'client'
161
159
  RemoteExecutorExample.run_client
@@ -168,10 +166,11 @@ elsif defined?(Sidekiq)
168
166
  Sidekiq.default_worker_options = { :retry => 0, 'backtrace' => true }
169
167
  # assuming the remote executor was required as part of initialization
170
168
  # of the ActiveJob worker
171
- world = if Sidekiq.options[:queues].include?("dynflow_orchestrator")
169
+ queues = Sidekiq.configure_server { |c| c.options[:queues] }
170
+ world = if queues.include?("dynflow_orchestrator")
172
171
  RemoteExecutorExample.initialize_sidekiq_orchestrator
173
- elsif (Sidekiq.options[:queues] - ['dynflow_orchestrator']).any?
172
+ elsif (queues - ['dynflow_orchestrator']).any?
174
173
  RemoteExecutorExample.initialize_sidekiq_worker
175
174
  end
176
- Sidekiq.options[:dynflow_world] = world
175
+ Sidekiq.configure_server { |c| c.options[:dynflow_world] = world }
177
176
  end
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
+
3
4
  example_description = <<DESC
4
5
 
5
6
  Sub Plans Example
@@ -16,7 +16,6 @@ DESC
16
16
  require_relative 'example_helper'
17
17
 
18
18
  class CostyAction < Dynflow::Action
19
-
20
19
  SleepTime = 10
21
20
 
22
21
  def plan(number)
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
+
3
4
  example_description = <<DESC
4
5
  Sub Plans Example
5
6
  ===================
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
  # frozen_string_literal: true
3
+
3
4
  example_description = <<DESC
4
5
  Sub Plans Example
5
6
  ===================
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+
2
3
  module Dynflow
3
4
  module Action::Cancellable
4
5
  Cancel = Algebrick.atom