busybee 0.1.0 → 0.3.0

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 (55) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +71 -7
  3. data/README.md +70 -42
  4. data/docs/client/quick_start.md +279 -0
  5. data/docs/client.md +825 -0
  6. data/docs/configuration.md +550 -0
  7. data/docs/grpc.md +50 -25
  8. data/docs/testing.md +118 -28
  9. data/docs/workers.md +982 -0
  10. data/exe/busybee +6 -0
  11. data/lib/busybee/cli.rb +173 -0
  12. data/lib/busybee/client/error_handling.rb +37 -0
  13. data/lib/busybee/client/job_operations.rb +236 -0
  14. data/lib/busybee/client/message_operations.rb +84 -0
  15. data/lib/busybee/client/process_operations.rb +108 -0
  16. data/lib/busybee/client/variable_operations.rb +64 -0
  17. data/lib/busybee/client.rb +87 -0
  18. data/lib/busybee/configure.rb +290 -0
  19. data/lib/busybee/credentials/camunda_cloud.rb +58 -0
  20. data/lib/busybee/credentials/insecure.rb +24 -0
  21. data/lib/busybee/credentials/oauth.rb +157 -0
  22. data/lib/busybee/credentials/tls.rb +43 -0
  23. data/lib/busybee/credentials.rb +200 -0
  24. data/lib/busybee/defaults.rb +20 -0
  25. data/lib/busybee/error.rb +50 -0
  26. data/lib/busybee/grpc/error.rb +60 -0
  27. data/lib/busybee/grpc.rb +2 -2
  28. data/lib/busybee/job.rb +219 -0
  29. data/lib/busybee/job_stream.rb +85 -0
  30. data/lib/busybee/logging.rb +61 -0
  31. data/lib/busybee/railtie.rb +113 -0
  32. data/lib/busybee/runner/hybrid.rb +64 -0
  33. data/lib/busybee/runner/multi.rb +101 -0
  34. data/lib/busybee/runner/polling.rb +54 -0
  35. data/lib/busybee/runner/streaming.rb +159 -0
  36. data/lib/busybee/runner.rb +97 -0
  37. data/lib/busybee/runtime_config.rb +184 -0
  38. data/lib/busybee/serialization.rb +100 -0
  39. data/lib/busybee/testing/activated_job.rb +33 -8
  40. data/lib/busybee/testing/helpers/execution.rb +139 -0
  41. data/lib/busybee/testing/helpers/support.rb +78 -0
  42. data/lib/busybee/testing/helpers.rb +56 -66
  43. data/lib/busybee/testing/matchers/complete_job.rb +55 -0
  44. data/lib/busybee/testing/matchers/fail_job.rb +75 -0
  45. data/lib/busybee/testing/matchers/have_activated.rb +1 -1
  46. data/lib/busybee/testing/matchers/have_available_jobs.rb +44 -0
  47. data/lib/busybee/testing/matchers/throw_bpmn_error_on.rb +72 -0
  48. data/lib/busybee/testing.rb +5 -33
  49. data/lib/busybee/version.rb +1 -1
  50. data/lib/busybee/worker/configuration.rb +287 -0
  51. data/lib/busybee/worker/dsl.rb +187 -0
  52. data/lib/busybee/worker/shutdown.rb +27 -0
  53. data/lib/busybee/worker.rb +130 -0
  54. data/lib/busybee.rb +134 -2
  55. metadata +80 -3
data/lib/busybee.rb CHANGED
@@ -1,7 +1,139 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative "busybee/version"
3
+ require "socket"
4
+ require "busybee/version"
5
+ require "busybee/defaults"
6
+ require "busybee/configure"
7
+ require "busybee/credentials"
8
+ require "busybee/logging"
9
+ require "busybee/serialization"
10
+ require "busybee/job"
11
+ require "busybee/job_stream"
12
+ require "busybee/client"
13
+ require "busybee/worker"
14
+ require "busybee/runtime_config"
15
+ require "busybee/runner"
16
+ require "busybee/cli"
4
17
 
5
- # Top-level gem module, only holds configuration values.
18
+ # Top-level gem module. Configuration readers and defaults live here;
19
+ # validated setters live in Busybee::Configure.
6
20
  module Busybee
21
+ # Valid credential type identifiers. Update this as new credential classes are added.
22
+ VALID_CREDENTIAL_TYPES = %w[insecure tls oauth camunda_cloud].freeze
23
+
24
+ # Valid log format identifiers.
25
+ VALID_LOG_FORMATS = %w[text json].freeze
26
+
27
+ # Valid worker mode identifiers.
28
+ VALID_WORKER_MODES = %i[polling streaming hybrid].freeze
29
+
30
+ class << self
31
+ include Configure
32
+
33
+ attr_accessor :logger
34
+ attr_reader :credentials
35
+
36
+ def configure
37
+ yield self
38
+ end
39
+
40
+ def cluster_address
41
+ @cluster_address || ENV.fetch("CLUSTER_ADDRESS", "localhost:26500")
42
+ end
43
+
44
+ def credential_type
45
+ return @credential_type if instance_variable_defined?(:@credential_type) && !@credential_type.nil?
46
+
47
+ # Env var fallback - goes through setter for validation
48
+ env_value = ENV.fetch("BUSYBEE_CREDENTIAL_TYPE", nil)
49
+ return nil if env_value.nil?
50
+
51
+ self.credential_type = env_value
52
+ @credential_type
53
+ end
54
+
55
+ def default_fail_job_backoff
56
+ @default_fail_job_backoff || Defaults::DEFAULT_FAIL_JOB_BACKOFF_MS
57
+ end
58
+
59
+ def default_max_jobs
60
+ @default_max_jobs || Defaults::DEFAULT_MAX_JOBS
61
+ end
62
+
63
+ def default_input_required
64
+ @default_input_required.nil? ? Defaults::DEFAULT_INPUT_REQUIRED : @default_input_required
65
+ end
66
+
67
+ def default_job_lock_timeout
68
+ @default_job_lock_timeout || Defaults::DEFAULT_JOB_LOCK_TIMEOUT_MS
69
+ end
70
+
71
+ def default_job_request_timeout
72
+ @default_job_request_timeout || Defaults::DEFAULT_JOB_REQUEST_TIMEOUT_MS
73
+ end
74
+
75
+ def default_message_ttl
76
+ @default_message_ttl || Defaults::DEFAULT_MESSAGE_TTL_MS
77
+ end
78
+
79
+ def default_output_required
80
+ @default_output_required.nil? ? Defaults::DEFAULT_OUTPUT_REQUIRED : @default_output_required
81
+ end
82
+
83
+ def default_buffer
84
+ @default_buffer.nil? ? Defaults::DEFAULT_STREAMING_BUFFER : @default_buffer
85
+ end
86
+
87
+ def default_buffer_throttle
88
+ @default_buffer_throttle || Defaults::DEFAULT_BUFFER_THROTTLE_MS
89
+ end
90
+
91
+ def default_worker_mode
92
+ @default_worker_mode || Defaults::DEFAULT_WORKER_MODE
93
+ end
94
+
95
+ def grpc_retry_delay_ms
96
+ @grpc_retry_delay_ms || Defaults::DEFAULT_GRPC_RETRY_DELAY_MS
97
+ end
98
+
99
+ def grpc_retry_enabled
100
+ return @grpc_retry_enabled unless @grpc_retry_enabled.nil?
101
+
102
+ false
103
+ end
104
+
105
+ def grpc_retry_errors
106
+ @grpc_retry_errors || default_retry_errors
107
+ end
108
+
109
+ def log_format
110
+ @log_format || :text
111
+ end
112
+
113
+ def default_backpressure_delay
114
+ @default_backpressure_delay || Defaults::DEFAULT_BACKPRESSURE_DELAY_MS
115
+ end
116
+
117
+ def shutdown_on_errors
118
+ @shutdown_on_errors ||= []
119
+ end
120
+
121
+ def worker_name
122
+ return @worker_name if @worker_name
123
+ return ENV["BUSYBEE_WORKER_NAME"] if ENV["BUSYBEE_WORKER_NAME"]
124
+
125
+ Socket.gethostname
126
+ rescue StandardError
127
+ "busybee-worker"
128
+ end
129
+
130
+ private
131
+
132
+ def default_retry_errors
133
+ require "grpc"
134
+ [::GRPC::Unavailable, ::GRPC::DeadlineExceeded, ::GRPC::ResourceExhausted]
135
+ end
136
+ end
7
137
  end
138
+
139
+ require "busybee/railtie" if defined?(Rails::Railtie)
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: busybee
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Rusterholz
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-12-30 00:00:00.000000000 Z
11
+ date: 2026-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '7.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '7.0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: base64
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -24,6 +38,26 @@ dependencies:
24
38
  - - ">="
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: concurrent-ruby
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.1.7
48
+ - - "<"
49
+ - !ruby/object:Gem::Version
50
+ version: '2.0'
51
+ type: :runtime
52
+ prerelease: false
53
+ version_requirements: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: 1.1.7
58
+ - - "<"
59
+ - !ruby/object:Gem::Version
60
+ version: '2.0'
27
61
  - !ruby/object:Gem::Dependency
28
62
  name: grpc
29
63
  requirement: !ruby/object:Gem::Requirement
@@ -44,26 +78,69 @@ description: The missing Ruby gem for Camunda 8. Production-ready worker framewo
44
78
  and CI/CD deployment tooling for BPMNs.
45
79
  email:
46
80
  - andyrusterholz@gmail.com
47
- executables: []
81
+ executables:
82
+ - busybee
48
83
  extensions: []
49
84
  extra_rdoc_files: []
50
85
  files:
51
86
  - CHANGELOG.md
52
87
  - LICENSE.txt
53
88
  - README.md
89
+ - docs/client.md
90
+ - docs/client/quick_start.md
91
+ - docs/configuration.md
54
92
  - docs/grpc.md
55
93
  - docs/testing.md
94
+ - docs/workers.md
95
+ - exe/busybee
56
96
  - lib/busybee.rb
97
+ - lib/busybee/cli.rb
98
+ - lib/busybee/client.rb
99
+ - lib/busybee/client/error_handling.rb
100
+ - lib/busybee/client/job_operations.rb
101
+ - lib/busybee/client/message_operations.rb
102
+ - lib/busybee/client/process_operations.rb
103
+ - lib/busybee/client/variable_operations.rb
104
+ - lib/busybee/configure.rb
105
+ - lib/busybee/credentials.rb
106
+ - lib/busybee/credentials/camunda_cloud.rb
107
+ - lib/busybee/credentials/insecure.rb
108
+ - lib/busybee/credentials/oauth.rb
109
+ - lib/busybee/credentials/tls.rb
110
+ - lib/busybee/defaults.rb
111
+ - lib/busybee/error.rb
57
112
  - lib/busybee/grpc.rb
113
+ - lib/busybee/grpc/error.rb
58
114
  - lib/busybee/grpc/gateway_pb.rb
59
115
  - lib/busybee/grpc/gateway_services_pb.rb
116
+ - lib/busybee/job.rb
117
+ - lib/busybee/job_stream.rb
118
+ - lib/busybee/logging.rb
119
+ - lib/busybee/railtie.rb
120
+ - lib/busybee/runner.rb
121
+ - lib/busybee/runner/hybrid.rb
122
+ - lib/busybee/runner/multi.rb
123
+ - lib/busybee/runner/polling.rb
124
+ - lib/busybee/runner/streaming.rb
125
+ - lib/busybee/runtime_config.rb
126
+ - lib/busybee/serialization.rb
60
127
  - lib/busybee/testing.rb
61
128
  - lib/busybee/testing/activated_job.rb
62
129
  - lib/busybee/testing/helpers.rb
130
+ - lib/busybee/testing/helpers/execution.rb
131
+ - lib/busybee/testing/helpers/support.rb
132
+ - lib/busybee/testing/matchers/complete_job.rb
133
+ - lib/busybee/testing/matchers/fail_job.rb
63
134
  - lib/busybee/testing/matchers/have_activated.rb
135
+ - lib/busybee/testing/matchers/have_available_jobs.rb
64
136
  - lib/busybee/testing/matchers/have_received_headers.rb
65
137
  - lib/busybee/testing/matchers/have_received_variables.rb
138
+ - lib/busybee/testing/matchers/throw_bpmn_error_on.rb
66
139
  - lib/busybee/version.rb
140
+ - lib/busybee/worker.rb
141
+ - lib/busybee/worker/configuration.rb
142
+ - lib/busybee/worker/dsl.rb
143
+ - lib/busybee/worker/shutdown.rb
67
144
  homepage: https://github.com/rusterholz/busybee
68
145
  licenses:
69
146
  - MIT