fractor 0.1.4 → 0.1.7
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.
- checksums.yaml +4 -4
- data/.rubocop-https---raw-githubusercontent-com-riboseinc-oss-guides-main-ci-rubocop-yml +552 -0
- data/.rubocop.yml +14 -8
- data/.rubocop_todo.yml +284 -43
- data/README.adoc +111 -950
- data/docs/.lycheeignore +16 -0
- data/docs/Gemfile +24 -0
- data/docs/README.md +157 -0
- data/docs/_config.yml +151 -0
- data/docs/_features/error-handling.adoc +1192 -0
- data/docs/_features/index.adoc +80 -0
- data/docs/_features/monitoring.adoc +589 -0
- data/docs/_features/signal-handling.adoc +202 -0
- data/docs/_features/workflows.adoc +1235 -0
- data/docs/_guides/continuous-mode.adoc +736 -0
- data/docs/_guides/cookbook.adoc +1133 -0
- data/docs/_guides/index.adoc +55 -0
- data/docs/_guides/pipeline-mode.adoc +730 -0
- data/docs/_guides/troubleshooting.adoc +358 -0
- data/docs/_pages/architecture.adoc +1390 -0
- data/docs/_pages/core-concepts.adoc +1392 -0
- data/docs/_pages/design-principles.adoc +862 -0
- data/docs/_pages/getting-started.adoc +290 -0
- data/docs/_pages/installation.adoc +143 -0
- data/docs/_reference/api.adoc +1080 -0
- data/docs/_reference/error-reporting.adoc +670 -0
- data/docs/_reference/examples.adoc +181 -0
- data/docs/_reference/index.adoc +96 -0
- data/docs/_reference/troubleshooting.adoc +862 -0
- data/docs/_tutorials/complex-workflows.adoc +1022 -0
- data/docs/_tutorials/data-processing-pipeline.adoc +740 -0
- data/docs/_tutorials/first-application.adoc +384 -0
- data/docs/_tutorials/index.adoc +48 -0
- data/docs/_tutorials/long-running-services.adoc +931 -0
- data/docs/assets/images/favicon-16.png +0 -0
- data/docs/assets/images/favicon-32.png +0 -0
- data/docs/assets/images/favicon-48.png +0 -0
- data/docs/assets/images/favicon.ico +0 -0
- data/docs/assets/images/favicon.png +0 -0
- data/docs/assets/images/favicon.svg +45 -0
- data/docs/assets/images/fractor-icon.svg +49 -0
- data/docs/assets/images/fractor-logo.svg +61 -0
- data/docs/index.adoc +131 -0
- data/docs/lychee.toml +39 -0
- data/examples/api_aggregator/README.adoc +627 -0
- data/examples/api_aggregator/api_aggregator.rb +376 -0
- data/examples/auto_detection/README.adoc +407 -29
- data/examples/auto_detection/auto_detection.rb +9 -9
- data/examples/continuous_chat_common/message_protocol.rb +53 -0
- data/examples/continuous_chat_fractor/README.adoc +217 -0
- data/examples/continuous_chat_fractor/chat_client.rb +303 -0
- data/examples/continuous_chat_fractor/chat_common.rb +83 -0
- data/examples/continuous_chat_fractor/chat_server.rb +167 -0
- data/examples/continuous_chat_fractor/simulate.rb +345 -0
- data/examples/continuous_chat_server/README.adoc +135 -0
- data/examples/continuous_chat_server/chat_client.rb +303 -0
- data/examples/continuous_chat_server/chat_server.rb +359 -0
- data/examples/continuous_chat_server/simulate.rb +343 -0
- data/examples/error_reporting.rb +207 -0
- data/examples/file_processor/README.adoc +170 -0
- data/examples/file_processor/file_processor.rb +615 -0
- data/examples/file_processor/sample_files/invalid.csv +1 -0
- data/examples/file_processor/sample_files/orders.xml +24 -0
- data/examples/file_processor/sample_files/products.json +23 -0
- data/examples/file_processor/sample_files/users.csv +6 -0
- data/examples/hierarchical_hasher/README.adoc +629 -41
- data/examples/hierarchical_hasher/hierarchical_hasher.rb +12 -8
- data/examples/image_processor/README.adoc +610 -0
- data/examples/image_processor/image_processor.rb +349 -0
- data/examples/image_processor/processed_images/sample_10_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_1_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_2_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_3_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_4_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_5_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_6_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_7_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_8_processed.jpg.json +12 -0
- data/examples/image_processor/processed_images/sample_9_processed.jpg.json +12 -0
- data/examples/image_processor/test_images/sample_1.png +1 -0
- data/examples/image_processor/test_images/sample_10.png +1 -0
- data/examples/image_processor/test_images/sample_2.png +1 -0
- data/examples/image_processor/test_images/sample_3.png +1 -0
- data/examples/image_processor/test_images/sample_4.png +1 -0
- data/examples/image_processor/test_images/sample_5.png +1 -0
- data/examples/image_processor/test_images/sample_6.png +1 -0
- data/examples/image_processor/test_images/sample_7.png +1 -0
- data/examples/image_processor/test_images/sample_8.png +1 -0
- data/examples/image_processor/test_images/sample_9.png +1 -0
- data/examples/log_analyzer/README.adoc +662 -0
- data/examples/log_analyzer/log_analyzer.rb +579 -0
- data/examples/log_analyzer/sample_logs/apache.log +20 -0
- data/examples/log_analyzer/sample_logs/json.log +15 -0
- data/examples/log_analyzer/sample_logs/nginx.log +15 -0
- data/examples/log_analyzer/sample_logs/rails.log +29 -0
- data/examples/multi_work_type/README.adoc +576 -26
- data/examples/multi_work_type/multi_work_type.rb +30 -29
- data/examples/performance_monitoring.rb +120 -0
- data/examples/pipeline_processing/README.adoc +740 -26
- data/examples/pipeline_processing/pipeline_processing.rb +16 -16
- data/examples/priority_work_example.rb +155 -0
- data/examples/producer_subscriber/README.adoc +889 -46
- data/examples/producer_subscriber/producer_subscriber.rb +20 -16
- data/examples/scatter_gather/README.adoc +829 -27
- data/examples/scatter_gather/scatter_gather.rb +29 -28
- data/examples/simple/README.adoc +347 -0
- data/examples/simple/sample.rb +5 -5
- data/examples/specialized_workers/README.adoc +622 -26
- data/examples/specialized_workers/specialized_workers.rb +88 -45
- data/examples/stream_processor/README.adoc +206 -0
- data/examples/stream_processor/stream_processor.rb +284 -0
- data/examples/web_scraper/README.adoc +625 -0
- data/examples/web_scraper/web_scraper.rb +285 -0
- data/examples/workflow/README.adoc +406 -0
- data/examples/workflow/circuit_breaker/README.adoc +360 -0
- data/examples/workflow/circuit_breaker/circuit_breaker_workflow.rb +225 -0
- data/examples/workflow/conditional/README.adoc +483 -0
- data/examples/workflow/conditional/conditional_workflow.rb +215 -0
- data/examples/workflow/dead_letter_queue/README.adoc +374 -0
- data/examples/workflow/dead_letter_queue/dead_letter_queue_workflow.rb +217 -0
- data/examples/workflow/fan_out/README.adoc +381 -0
- data/examples/workflow/fan_out/fan_out_workflow.rb +202 -0
- data/examples/workflow/retry/README.adoc +248 -0
- data/examples/workflow/retry/retry_workflow.rb +195 -0
- data/examples/workflow/simple_linear/README.adoc +267 -0
- data/examples/workflow/simple_linear/simple_linear_workflow.rb +175 -0
- data/examples/workflow/simplified/README.adoc +329 -0
- data/examples/workflow/simplified/simplified_workflow.rb +222 -0
- data/exe/fractor +10 -0
- data/lib/fractor/cli.rb +288 -0
- data/lib/fractor/configuration.rb +307 -0
- data/lib/fractor/continuous_server.rb +183 -0
- data/lib/fractor/error_formatter.rb +72 -0
- data/lib/fractor/error_report_generator.rb +152 -0
- data/lib/fractor/error_reporter.rb +244 -0
- data/lib/fractor/error_statistics.rb +147 -0
- data/lib/fractor/execution_tracer.rb +162 -0
- data/lib/fractor/logger.rb +230 -0
- data/lib/fractor/main_loop_handler.rb +406 -0
- data/lib/fractor/main_loop_handler3.rb +135 -0
- data/lib/fractor/main_loop_handler4.rb +299 -0
- data/lib/fractor/performance_metrics_collector.rb +181 -0
- data/lib/fractor/performance_monitor.rb +215 -0
- data/lib/fractor/performance_report_generator.rb +202 -0
- data/lib/fractor/priority_work.rb +93 -0
- data/lib/fractor/priority_work_queue.rb +189 -0
- data/lib/fractor/result_aggregator.rb +33 -1
- data/lib/fractor/shutdown_handler.rb +168 -0
- data/lib/fractor/signal_handler.rb +80 -0
- data/lib/fractor/supervisor.rb +430 -144
- data/lib/fractor/supervisor_logger.rb +88 -0
- data/lib/fractor/version.rb +1 -1
- data/lib/fractor/work.rb +12 -0
- data/lib/fractor/work_distribution_manager.rb +151 -0
- data/lib/fractor/work_queue.rb +88 -0
- data/lib/fractor/work_result.rb +181 -9
- data/lib/fractor/worker.rb +75 -1
- data/lib/fractor/workflow/builder.rb +210 -0
- data/lib/fractor/workflow/chain_builder.rb +169 -0
- data/lib/fractor/workflow/circuit_breaker.rb +183 -0
- data/lib/fractor/workflow/circuit_breaker_orchestrator.rb +208 -0
- data/lib/fractor/workflow/circuit_breaker_registry.rb +112 -0
- data/lib/fractor/workflow/dead_letter_queue.rb +334 -0
- data/lib/fractor/workflow/execution_hooks.rb +39 -0
- data/lib/fractor/workflow/execution_strategy.rb +225 -0
- data/lib/fractor/workflow/execution_trace.rb +134 -0
- data/lib/fractor/workflow/helpers.rb +191 -0
- data/lib/fractor/workflow/job.rb +290 -0
- data/lib/fractor/workflow/job_dependency_validator.rb +120 -0
- data/lib/fractor/workflow/logger.rb +110 -0
- data/lib/fractor/workflow/pre_execution_context.rb +193 -0
- data/lib/fractor/workflow/retry_config.rb +156 -0
- data/lib/fractor/workflow/retry_orchestrator.rb +184 -0
- data/lib/fractor/workflow/retry_strategy.rb +93 -0
- data/lib/fractor/workflow/structured_logger.rb +30 -0
- data/lib/fractor/workflow/type_compatibility_validator.rb +222 -0
- data/lib/fractor/workflow/visualizer.rb +211 -0
- data/lib/fractor/workflow/workflow_context.rb +132 -0
- data/lib/fractor/workflow/workflow_executor.rb +669 -0
- data/lib/fractor/workflow/workflow_result.rb +55 -0
- data/lib/fractor/workflow/workflow_validator.rb +295 -0
- data/lib/fractor/workflow.rb +333 -0
- data/lib/fractor/wrapped_ractor.rb +66 -91
- data/lib/fractor/wrapped_ractor3.rb +161 -0
- data/lib/fractor/wrapped_ractor4.rb +242 -0
- data/lib/fractor.rb +93 -3
- metadata +192 -6
- data/tests/sample.rb.bak +0 -309
- data/tests/sample_working.rb.bak +0 -209
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48" width="48" height="48">
|
|
2
|
+
<!-- Simplified icon for favicon -->
|
|
3
|
+
<rect width="48" height="48" fill="white"/>
|
|
4
|
+
|
|
5
|
+
<!-- Define gradients -->
|
|
6
|
+
<defs>
|
|
7
|
+
<linearGradient id="g1" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
8
|
+
<stop offset="0%" style="stop-color:#CC342D;stop-opacity:1" />
|
|
9
|
+
<stop offset="100%" style="stop-color:#E74C3C;stop-opacity:1" />
|
|
10
|
+
</linearGradient>
|
|
11
|
+
<linearGradient id="g2" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
12
|
+
<stop offset="0%" style="stop-color:#E67E22;stop-opacity:1" />
|
|
13
|
+
<stop offset="100%" style="stop-color:#F39C12;stop-opacity:1" />
|
|
14
|
+
</linearGradient>
|
|
15
|
+
<linearGradient id="g3" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
16
|
+
<stop offset="0%" style="stop-color:#C0392B;stop-opacity:1" />
|
|
17
|
+
<stop offset="100%" style="stop-color:#E74C3C;stop-opacity:1" />
|
|
18
|
+
</linearGradient>
|
|
19
|
+
</defs>
|
|
20
|
+
|
|
21
|
+
<!-- Simplified parallel paths -->
|
|
22
|
+
<path d="M 8 12 L 16 12 L 18 14 L 28 14 L 30 12 L 40 12"
|
|
23
|
+
stroke="url(#g1)" stroke-width="2.5" fill="none" stroke-linecap="round"/>
|
|
24
|
+
<circle cx="8" cy="12" r="2" fill="#CC342D"/>
|
|
25
|
+
<circle cx="40" cy="12" r="2" fill="#E74C3C"/>
|
|
26
|
+
|
|
27
|
+
<path d="M 8 24 L 15 24 L 17 22 L 29 22 L 31 24 L 40 24"
|
|
28
|
+
stroke="url(#g2)" stroke-width="2.5" fill="none" stroke-linecap="round"/>
|
|
29
|
+
<circle cx="8" cy="24" r="2" fill="#E67E22"/>
|
|
30
|
+
<circle cx="40" cy="24" r="2" fill="#F39C12"/>
|
|
31
|
+
|
|
32
|
+
<path d="M 8 36 L 16 36 L 18 34 L 28 34 L 30 36 L 40 36"
|
|
33
|
+
stroke="url(#g3)" stroke-width="2.5" fill="none" stroke-linecap="round"/>
|
|
34
|
+
<circle cx="8" cy="36" r="2" fill="#C0392B"/>
|
|
35
|
+
<circle cx="40" cy="36" r="2" fill="#E74C3C"/>
|
|
36
|
+
|
|
37
|
+
<!-- Connection points -->
|
|
38
|
+
<line x1="24" y1="14" x2="24" y2="22" stroke="#CC342D" stroke-width="1.5" opacity="0.5"/>
|
|
39
|
+
<line x1="24" y1="24" x2="24" y2="34" stroke="#E67E22" stroke-width="1.5" opacity="0.5"/>
|
|
40
|
+
|
|
41
|
+
<!-- Arrows -->
|
|
42
|
+
<polygon points="38,11 40,12 38,13" fill="#E74C3C"/>
|
|
43
|
+
<polygon points="38,23 40,24 38,25" fill="#F39C12"/>
|
|
44
|
+
<polygon points="38,35 40,36 38,37" fill="#E74C3C"/>
|
|
45
|
+
</svg>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" width="80" height="80">
|
|
2
|
+
<!-- Define gradients -->
|
|
3
|
+
<defs>
|
|
4
|
+
<linearGradient id="gradient1" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
5
|
+
<stop offset="0%" style="stop-color:#CC342D;stop-opacity:1" />
|
|
6
|
+
<stop offset="100%" style="stop-color:#E74C3C;stop-opacity:1" />
|
|
7
|
+
</linearGradient>
|
|
8
|
+
<linearGradient id="gradient2" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
9
|
+
<stop offset="0%" style="stop-color:#E67E22;stop-opacity:1" />
|
|
10
|
+
<stop offset="100%" style="stop-color:#F39C12;stop-opacity:1" />
|
|
11
|
+
</linearGradient>
|
|
12
|
+
<linearGradient id="gradient3" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
13
|
+
<stop offset="0%" style="stop-color:#C0392B;stop-opacity:1" />
|
|
14
|
+
<stop offset="100%" style="stop-color:#E74C3C;stop-opacity:1" />
|
|
15
|
+
</linearGradient>
|
|
16
|
+
</defs>
|
|
17
|
+
|
|
18
|
+
<!-- Icon - Parallel flow paths representing Ractors -->
|
|
19
|
+
<g id="icon">
|
|
20
|
+
<!-- Top path -->
|
|
21
|
+
<path d="M 10 15 L 30 15 L 35 20 L 50 20 L 55 15 L 70 15"
|
|
22
|
+
stroke="url(#gradient1)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
23
|
+
<circle cx="10" cy="15" r="3" fill="#CC342D"/>
|
|
24
|
+
<circle cx="70" cy="15" r="3" fill="#E74C3C"/>
|
|
25
|
+
|
|
26
|
+
<!-- Middle path -->
|
|
27
|
+
<path d="M 10 40 L 25 40 L 30 35 L 45 35 L 50 40 L 70 40"
|
|
28
|
+
stroke="url(#gradient2)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
29
|
+
<circle cx="10" cy="40" r="3" fill="#E67E22"/>
|
|
30
|
+
<circle cx="70" cy="40" r="3" fill="#F39C12"/>
|
|
31
|
+
|
|
32
|
+
<!-- Bottom path -->
|
|
33
|
+
<path d="M 10 65 L 30 65 L 35 60 L 50 60 L 55 65 L 70 65"
|
|
34
|
+
stroke="url(#gradient3)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
35
|
+
<circle cx="10" cy="65" r="3" fill="#C0392B"/>
|
|
36
|
+
<circle cx="70" cy="65" r="3" fill="#E74C3C"/>
|
|
37
|
+
|
|
38
|
+
<!-- Connection points (representing Ractor communication) -->
|
|
39
|
+
<line x1="40" y1="20" x2="40" y2="35" stroke="#CC342D" stroke-width="1.5" opacity="0.6"/>
|
|
40
|
+
<line x1="40" y1="40" x2="40" y2="60" stroke="#E67E22" stroke-width="1.5" opacity="0.6"/>
|
|
41
|
+
<circle cx="40" cy="27.5" r="2" fill="#CC342D" opacity="0.7"/>
|
|
42
|
+
<circle cx="40" cy="50" r="2" fill="#E67E22" opacity="0.7"/>
|
|
43
|
+
|
|
44
|
+
<!-- Arrow indicators -->
|
|
45
|
+
<polygon points="67,13 70,15 67,17" fill="#E74C3C"/>
|
|
46
|
+
<polygon points="67,38 70,40 67,42" fill="#F39C12"/>
|
|
47
|
+
<polygon points="67,63 70,65 67,67" fill="#E74C3C"/>
|
|
48
|
+
</g>
|
|
49
|
+
</svg>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 80" width="300" height="80">
|
|
2
|
+
<!-- Background (optional, can be removed for transparency) -->
|
|
3
|
+
|
|
4
|
+
<!-- Define gradients -->
|
|
5
|
+
<defs>
|
|
6
|
+
<linearGradient id="gradient1" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
7
|
+
<stop offset="0%" style="stop-color:#CC342D;stop-opacity:1" />
|
|
8
|
+
<stop offset="100%" style="stop-color:#E74C3C;stop-opacity:1" />
|
|
9
|
+
</linearGradient>
|
|
10
|
+
<linearGradient id="gradient2" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
11
|
+
<stop offset="0%" style="stop-color:#E67E22;stop-opacity:1" />
|
|
12
|
+
<stop offset="100%" style="stop-color:#F39C12;stop-opacity:1" />
|
|
13
|
+
</linearGradient>
|
|
14
|
+
<linearGradient id="gradient3" x1="0%" y1="0%" x2="100%" y2="0%">
|
|
15
|
+
<stop offset="0%" style="stop-color:#C0392B;stop-opacity:1" />
|
|
16
|
+
<stop offset="100%" style="stop-color:#E74C3C;stop-opacity:1" />
|
|
17
|
+
</linearGradient>
|
|
18
|
+
</defs>
|
|
19
|
+
|
|
20
|
+
<!-- Icon part (left side) - Parallel flow paths representing Ractors -->
|
|
21
|
+
<g id="icon">
|
|
22
|
+
<!-- Top path -->
|
|
23
|
+
<path d="M 10 15 L 30 15 L 35 20 L 50 20 L 55 15 L 70 15"
|
|
24
|
+
stroke="url(#gradient1)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
25
|
+
<circle cx="10" cy="15" r="3" fill="#CC342D"/>
|
|
26
|
+
<circle cx="70" cy="15" r="3" fill="#E74C3C"/>
|
|
27
|
+
|
|
28
|
+
<!-- Middle path -->
|
|
29
|
+
<path d="M 10 40 L 25 40 L 30 35 L 45 35 L 50 40 L 70 40"
|
|
30
|
+
stroke="url(#gradient2)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
31
|
+
<circle cx="10" cy="40" r="3" fill="#E67E22"/>
|
|
32
|
+
<circle cx="70" cy="40" r="3" fill="#F39C12"/>
|
|
33
|
+
|
|
34
|
+
<!-- Bottom path -->
|
|
35
|
+
<path d="M 10 65 L 30 65 L 35 60 L 50 60 L 55 65 L 70 65"
|
|
36
|
+
stroke="url(#gradient3)" stroke-width="3" fill="none" stroke-linecap="round"/>
|
|
37
|
+
<circle cx="10" cy="65" r="3" fill="#C0392B"/>
|
|
38
|
+
<circle cx="70" cy="65" r="3" fill="#E74C3C"/>
|
|
39
|
+
|
|
40
|
+
<!-- Connection points (representing Ractor communication) -->
|
|
41
|
+
<line x1="40" y1="20" x2="40" y2="35" stroke="#CC342D" stroke-width="1.5" opacity="0.6"/>
|
|
42
|
+
<line x1="40" y1="40" x2="40" y2="60" stroke="#E67E22" stroke-width="1.5" opacity="0.6"/>
|
|
43
|
+
<circle cx="40" cy="27.5" r="2" fill="#CC342D" opacity="0.7"/>
|
|
44
|
+
<circle cx="40" cy="50" r="2" fill="#E67E22" opacity="0.7"/>
|
|
45
|
+
|
|
46
|
+
<!-- Arrow indicators -->
|
|
47
|
+
<polygon points="67,13 70,15 67,17" fill="#E74C3C"/>
|
|
48
|
+
<polygon points="67,38 70,40 67,42" fill="#F39C12"/>
|
|
49
|
+
<polygon points="67,63 70,65 67,67" fill="#E74C3C"/>
|
|
50
|
+
</g>
|
|
51
|
+
|
|
52
|
+
<!-- Text part (right side) -->
|
|
53
|
+
<g id="text">
|
|
54
|
+
<text x="85" y="48" font-family="Arial, Helvetica, sans-serif" font-size="32" font-weight="bold" fill="#2C3E50">
|
|
55
|
+
Fractor
|
|
56
|
+
</text>
|
|
57
|
+
<text x="85" y="63" font-family="Arial, Helvetica, sans-serif" font-size="9" fill="#7F8C8D" letter-spacing="1">
|
|
58
|
+
PARALLEL WORKFLOW ENGINE
|
|
59
|
+
</text>
|
|
60
|
+
</g>
|
|
61
|
+
</svg>
|
data/docs/index.adoc
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: home
|
|
3
|
+
title: Home
|
|
4
|
+
nav_order: 1
|
|
5
|
+
description: "Fractor - Parallel processing framework for Ruby using Ractors"
|
|
6
|
+
permalink: /
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
++++
|
|
10
|
+
<div style="text-align: center; margin: 2em 0;">
|
|
11
|
+
<img src="/fractor/assets/images/fractor-logo.svg" alt="Fractor Logo" style="max-width: 400px; width: 100%;">
|
|
12
|
+
</div>
|
|
13
|
+
++++
|
|
14
|
+
|
|
15
|
+
== Fractor Documentation
|
|
16
|
+
|
|
17
|
+
Fractor is a powerful parallel processing framework for Ruby that leverages Ractors to provide true concurrent execution without the Global Interpreter Lock (GIL) limitations.
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
== What's New
|
|
22
|
+
|
|
23
|
+
=== Recent Updates
|
|
24
|
+
|
|
25
|
+
* ✨ **Enhanced Workflow System**: Added support for circuit breakers, retry strategies, and dead letter queues
|
|
26
|
+
* 📊 **Performance Monitoring**: New performance monitoring capabilities with Prometheus and JSON export support
|
|
27
|
+
* 🔄 **Improved Error Handling**: Rich error categorization with automatic retry logic for transient failures
|
|
28
|
+
* 📚 **Comprehensive Documentation**: Complete tutorials, guides, and reference documentation with 18+ real-world examples
|
|
29
|
+
* 🛠️ **Production Ready**: Battle-tested patterns for continuous mode, signal handling, and graceful shutdown
|
|
30
|
+
* 🎯 **Workflow Visualizer**: Built-in tools for visualizing complex workflow graphs and execution traces
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
== Quick Start
|
|
35
|
+
|
|
36
|
+
Get started with Fractor in minutes:
|
|
37
|
+
|
|
38
|
+
[source,ruby]
|
|
39
|
+
----
|
|
40
|
+
require 'fractor'
|
|
41
|
+
|
|
42
|
+
class MyWork < Fractor::Work
|
|
43
|
+
def initialize(value)
|
|
44
|
+
super({ value: value })
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class MyWorker < Fractor::Worker
|
|
49
|
+
def process(work)
|
|
50
|
+
result = work.input[:value] * 2
|
|
51
|
+
Fractor::WorkResult.new(result: result, work: work)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
supervisor = Fractor::Supervisor.new(
|
|
56
|
+
worker_pools: [{ worker_class: MyWorker }]
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
supervisor.add_work_items([MyWork.new(1), MyWork.new(2), MyWork.new(3)])
|
|
60
|
+
supervisor.run
|
|
61
|
+
|
|
62
|
+
puts supervisor.results.results.map(&:result)
|
|
63
|
+
# => [2, 4, 6]
|
|
64
|
+
----
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
== Learning Path
|
|
69
|
+
|
|
70
|
+
=== 🎯 Beginner - Get Started
|
|
71
|
+
|
|
72
|
+
New to Fractor? Start here to learn the fundamentals.
|
|
73
|
+
|
|
74
|
+
* link:tutorials/installation/[Installation] - Set up Fractor in your environment
|
|
75
|
+
* link:tutorials/first-application/[Your First Application] - Build your first parallel processor
|
|
76
|
+
* link:tutorials/getting-started/[Getting Started Guide] - Understand modes and basic patterns
|
|
77
|
+
|
|
78
|
+
=== 📚 Intermediate - Core Concepts
|
|
79
|
+
|
|
80
|
+
Ready to build real applications? Dive into core features.
|
|
81
|
+
|
|
82
|
+
* link:core-concepts/[Core Concepts] - Components, data flow, and concurrency model
|
|
83
|
+
* link:architecture/[Architecture Guide] - System design and implementation details
|
|
84
|
+
* link:design-principles/[Design Principles] - Philosophy and design decisions
|
|
85
|
+
* link:guides/pipeline-mode/[Pipeline Mode] - Batch processing patterns
|
|
86
|
+
* link:guides/continuous-mode/[Continuous Mode] - Long-running server applications
|
|
87
|
+
* link:features/workflows/[Workflows] - Complex processing graphs
|
|
88
|
+
* link:features/error-handling/[Error Handling] - Robust error management
|
|
89
|
+
* link:features/signal-handling/[Signal Handling] - Graceful shutdown patterns
|
|
90
|
+
|
|
91
|
+
=== 🚀 Advanced - Deep Dive
|
|
92
|
+
|
|
93
|
+
Master advanced patterns and optimization techniques.
|
|
94
|
+
|
|
95
|
+
* link:reference/api/[API Reference] - Complete API documentation
|
|
96
|
+
* link:reference/patterns/[Design Patterns] - Real-world examples and patterns
|
|
97
|
+
* link:reference/performance/[Performance Tuning] - Optimization strategies
|
|
98
|
+
* link:reference/best-practices/[Best Practices] - Production deployment guide
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
== Key Features
|
|
103
|
+
|
|
104
|
+
* *True Parallelism*: Leverages Ruby 3.0+ Ractors for concurrent execution without GIL
|
|
105
|
+
* *Two Modes*: Pipeline mode for batch jobs, Continuous mode for servers
|
|
106
|
+
* *Worker Pools*: Multiple specialized worker types with automatic scaling
|
|
107
|
+
* *Rich Error Handling*: Categorized errors with retry logic and context
|
|
108
|
+
* *Workflow Engine*: Build complex processing graphs with retry, circuit breakers, and more
|
|
109
|
+
* *Signal Handling*: Graceful shutdown with SIGINT, SIGTERM support
|
|
110
|
+
* *Production Ready*: Performance monitoring, error reporting, and dead letter queues
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
== System Requirements
|
|
115
|
+
|
|
116
|
+
* Ruby 3.0 or later (Ractor support required)
|
|
117
|
+
* Multi-core CPU (for true parallel execution)
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
== Community
|
|
122
|
+
|
|
123
|
+
* https://github.com/metanorma/fractor[GitHub Repository]
|
|
124
|
+
* https://github.com/metanorma/fractor/issues[Issue Tracker]
|
|
125
|
+
* https://github.com/metanorma/fractor/discussions[Discussions]
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
== License
|
|
130
|
+
|
|
131
|
+
Fractor is distributed under the link:../LICENSE[MIT License].
|
data/docs/lychee.toml
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Lychee link checker configuration
|
|
2
|
+
|
|
3
|
+
# Cache results to avoid re-checking
|
|
4
|
+
cache = true
|
|
5
|
+
|
|
6
|
+
# Maximum number of concurrent requests
|
|
7
|
+
max_concurrency = 10
|
|
8
|
+
|
|
9
|
+
# Accept 200-299 status codes
|
|
10
|
+
accept = [200, 201, 202, 203, 204, 205, 206, 207, 208, 226]
|
|
11
|
+
|
|
12
|
+
# Timeout for requests (seconds)
|
|
13
|
+
timeout = 30
|
|
14
|
+
|
|
15
|
+
# Retry failed links
|
|
16
|
+
max_retries = 3
|
|
17
|
+
|
|
18
|
+
# User agent string
|
|
19
|
+
user_agent = "Mozilla/5.0 (compatible; Lychee/0.x; +https://github.com/lycheeverse/lychee)"
|
|
20
|
+
|
|
21
|
+
# Exclude path patterns (file/directory paths to skip)
|
|
22
|
+
exclude_path = [
|
|
23
|
+
"vendor",
|
|
24
|
+
"node_modules",
|
|
25
|
+
".jekyll-cache",
|
|
26
|
+
"_site"
|
|
27
|
+
]
|
|
28
|
+
|
|
29
|
+
# Check external links
|
|
30
|
+
include_external = true
|
|
31
|
+
|
|
32
|
+
# Follow redirects
|
|
33
|
+
max_redirects = 10
|
|
34
|
+
|
|
35
|
+
# Check fragments (anchors)
|
|
36
|
+
check_fragments = true
|
|
37
|
+
|
|
38
|
+
# Base URL for checking local links
|
|
39
|
+
base_url = "https://metanorma.github.io/fractor"
|