jiggler 0.1.0.rc7 → 0.1.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 68a5dbd046a928c77c29753786bd9d6113e5cfbee1837a38883e632fe9f29ca4
4
- data.tar.gz: a6e48320f21b05105adc40ae749cc96555c33ff48f0530079a3ad9dfbb30cd54
3
+ metadata.gz: 2577f6dee9060ad4316eeea5edb918bfeadee7955cdf31e23acce1852fe1d34f
4
+ data.tar.gz: 1d3ee1d3e168a48e55ecbea3eb520e494885d99337accead870fecd2390f013f
5
5
  SHA512:
6
- metadata.gz: 9110db12e8db5fefbf673dd3ccdda4b48a41a8d301b85f5353a20996dd2e44e546516762b4f6ab1de0266c63e46fc1223cc6435fa4fad3b99c9de6157059d36e
7
- data.tar.gz: 68cd7c212cceddd91fd50b3a8eda1663562702dedf5d8141ab14e413f4c90460c8741ef78896be4482347235a827c8aa38fe3c6822e1f819b8c9e523391d8a29
6
+ metadata.gz: 91f59768ea4b10c2340730a98c9f506102c5f2d800f6b1dd7935ac5099568637e2df8d9ed4f54459ba6de4cb8acf1195cabbf885407b4c360e0c23d808119ace
7
+ data.tar.gz: a3c39de7d8432411eb8f639ccb3dc5283024c31e2e6a93e10d9afc34d91175d9c17b19717f081a2faf0ecd97cc5d7badeaf220f9372f719030fa8ff2bcb0e249
data/README.md CHANGED
@@ -17,11 +17,6 @@ Install the gem:
17
17
  gem install jiggler
18
18
  ```
19
19
 
20
- Use `--pre` for release candidates:
21
- ```
22
- gem install jiggler --pre
23
- ```
24
-
25
20
  Start Jiggler server as a separate process with bin command:
26
21
  ```
27
22
  jiggler -r <FILE_PATH>
@@ -33,8 +28,8 @@ Run `jiggler --help` to see the list of command line arguments.
33
28
 
34
29
  ### Performance
35
30
 
36
- [Jiggler 0.1.0rc4 performance results (at most once delivery)](/docs/perf_results_0.1.0rc4.md)
37
- [Jiggler 0.1.0 performance results](/docs/perf_results_0.1.0.md)
31
+ [Jiggler 0.1.0rc4 performance results (at most once delivery) against sidekiq 7.0.3](/docs/perf_results_0.1.0rc4.md) \
32
+ [Jiggler 0.1.0 performance results (at least once delivery) against (at most once delivery)](/docs/perf_results_0.1.0.md)
38
33
 
39
34
  ### Getting Started
40
35
 
@@ -42,10 +37,10 @@ Conceptually Jiggler consists of two parts: the `client` and the `server`. \
42
37
  The `client` is responsible for pushing jobs to `Redis` and allows to read stats, while the `server` reads jobs from `Redis`, processes them, and writes stats.
43
38
 
44
39
  The `server` uses async `Redis` connections. \
45
- The `client` on default is `sync`. It's possible to configure the client to be async as well via setting `client_async` to `true`. More info below. \
40
+ The `client` on default is `sync`. It's possible to configure the client to be async as well via setting `client_async` to `true`. \
46
41
  Client settings are:
47
42
  - `client_concurrency`
48
- - `async_client`
43
+ - `client_async`
49
44
  - `redis_url` (this one is shared with the `server`)
50
45
 
51
46
  The rest of the settings are `server` specific.
@@ -57,8 +52,8 @@ require "jiggler"
57
52
 
58
53
  Jiggler.configure do |config|
59
54
  config[:client_concurrency] = 12 # Should equal to the number of threads/fibers in the client app. Defaults to 10
60
- config[:concurrency] = 12 # The number of running fibers on the server. Defaults to 10
61
- config[:timeout] = 12 # Seconds Jiggler wait for jobs to finish before shotdown. Defaults to 25
55
+ config[:concurrency] = 12 # The number of running workers on the server. Defaults to 10
56
+ config[:timeout] = 12 # Seconds Jiggler wait for jobs to finish before shutdown. Defaults to 25
62
57
  config[:environment] = "myenv" # On default fetches the value ENV["APP_ENV"] and fallbacks to "development"
63
58
  config[:require] = "./jobs.rb" # Path to file with jobs/app initializer
64
59
  config[:redis_url] = ENV["REDIS_URL"] # On default fetches the value from ENV["REDIS_URL"]
@@ -88,11 +83,28 @@ In the future it might bring a lot of performance boost into Ruby fibers world (
88
83
 
89
84
  #### Socketry stack
90
85
 
91
- The gem allows to use libs from `socketry` stack (https://github.com/socketry) within workers.
86
+ The gem allows to use libs/calls from `socketry` stack (https://github.com/socketry) within workers. \
87
+ Sample:
88
+
89
+ ```ruby
90
+ def perform(ids)
91
+ resources = Resource.where(id: ids)
92
+ Async do
93
+ resources.each do |resource|
94
+ Async do
95
+ result = api_client.get(resource)
96
+ resource.update(data: result) if result
97
+ rescue => err
98
+ logger.error(err)
99
+ end
100
+ end
101
+ end
102
+ end
103
+ ```
92
104
 
93
- #### Core concepts
105
+ #### Core components
94
106
 
95
- Internally Jiggler server consists of 3 parts: `Manager`, `Poller`, `Monitor`. \
107
+ Internally Jiggler `server` among others includes the next entities: `Manager`, `Poller`, `Monitor`. \
96
108
  `Manager` is responsible for workers. \
97
109
  `Poller` fetches data for retries and scheduled jobs. \
98
110
  `Monitor` periodically loads stats data into redis. \
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Jiggler
2
4
  module AtMostOnce
3
5
  class Acknowledger < BaseAcknowledger
data/lib/jiggler/cli.rb CHANGED
@@ -13,6 +13,16 @@ module Jiggler
13
13
  class CLI
14
14
  include Singleton
15
15
  CONTEXT_SWITCHER_THRESHOLD = 0.5
16
+ NUMERIC_OPTIONS = %i[
17
+ concurrency
18
+ client_concurrency
19
+ timeout
20
+ in_process_interval
21
+ poll_interval
22
+ stats_interval
23
+ max_dead_jobs
24
+ dead_timeout
25
+ ].freeze
16
26
 
17
27
  attr_reader :logger, :config, :environment
18
28
 
@@ -46,7 +56,7 @@ module Jiggler
46
56
  def start
47
57
  return unless ping_redis
48
58
  @cond = Async::Condition.new
49
- Async do |task|
59
+ Async do
50
60
  setup_signal_handlers
51
61
  patch_scheduler
52
62
  @launcher = Launcher.new(config)
@@ -135,8 +145,12 @@ module Jiggler
135
145
  if config[:queues].any? { |q| q.include?(':') }
136
146
  raise ArgumentError, 'Queue names cannot contain colons'
137
147
  end
148
+
149
+ [:at_most_once, :at_least_once].include?(config[:mode]) || raise(
150
+ ArgumentError, "Invalid mode: #{config[:mode]}. Valid modes are :at_most_once and :at_least_once"
151
+ )
138
152
 
139
- [:concurrency, :client_concurrency, :timeout].each do |opt|
153
+ NUMERIC_OPTIONS.each do |opt|
140
154
  raise ArgumentError, "#{opt}: #{config[opt]} is not a valid value" if config[opt].to_i <= 0
141
155
  end
142
156
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Jiggler
4
- VERSION = '0.1.0.rc7'
4
+ VERSION = '0.1.0'
5
5
  end
data/spec/examples.txt CHANGED
@@ -1,96 +1,99 @@
1
1
  example_id | status | run_time |
2
2
  -------------------------------------------------------- | ------ | --------------- |
3
- ./spec/jiggler/at_least_once/acknowledger_spec.rb[1:1:1] | passed | 0.50472 seconds |
4
- ./spec/jiggler/at_least_once/fetcher_spec.rb[1:1:1] | passed | 2.54 seconds |
5
- ./spec/jiggler/at_least_once/fetcher_spec.rb[1:1:2] | passed | 2.56 seconds |
6
- ./spec/jiggler/at_most_once/fetcher_spec.rb[1:1:1] | passed | 0.00297 seconds |
7
- ./spec/jiggler/cleaner_spec.rb[1:1:1] | passed | 0.00116 seconds |
8
- ./spec/jiggler/cleaner_spec.rb[1:2:1] | passed | 0.00111 seconds |
9
- ./spec/jiggler/cleaner_spec.rb[1:3:1] | passed | 0.00093 seconds |
10
- ./spec/jiggler/cleaner_spec.rb[1:4:1] | passed | 0.00086 seconds |
11
- ./spec/jiggler/cleaner_spec.rb[1:5:1] | passed | 0.0013 seconds |
12
- ./spec/jiggler/cleaner_spec.rb[1:6:1] | passed | 0.00117 seconds |
13
- ./spec/jiggler/cleaner_spec.rb[1:7:1] | passed | 0.00096 seconds |
14
- ./spec/jiggler/cleaner_spec.rb[1:8:1] | passed | 0.00089 seconds |
15
- ./spec/jiggler/cleaner_spec.rb[1:9:1] | passed | 0.00106 seconds |
16
- ./spec/jiggler/cleaner_spec.rb[1:9:2] | passed | 0.0011 seconds |
17
- ./spec/jiggler/cleaner_spec.rb[1:10:1] | passed | 0.00159 seconds |
18
- ./spec/jiggler/cleaner_spec.rb[1:11:1] | passed | 0.00312 seconds |
19
- ./spec/jiggler/cli_spec.rb[1:1:1:1] | passed | 0.00027 seconds |
20
- ./spec/jiggler/cli_spec.rb[1:1:2:1] | passed | 0.0108 seconds |
21
- ./spec/jiggler/cli_spec.rb[1:1:2:2] | passed | 0.00041 seconds |
22
- ./spec/jiggler/cli_spec.rb[1:1:2:3] | passed | 0.0003 seconds |
23
- ./spec/jiggler/cli_spec.rb[1:1:2:4] | passed | 0.00064 seconds |
24
- ./spec/jiggler/cli_spec.rb[1:1:2:5] | passed | 0.00036 seconds |
25
- ./spec/jiggler/cli_spec.rb[1:1:2:6] | passed | 0.0002 seconds |
26
- ./spec/jiggler/cli_spec.rb[1:1:2:7] | passed | 0.00022 seconds |
27
- ./spec/jiggler/cli_spec.rb[1:1:2:8] | passed | 0.00131 seconds |
28
- ./spec/jiggler/cli_spec.rb[1:1:2:9] | passed | 0.00022 seconds |
29
- ./spec/jiggler/cli_spec.rb[1:1:3:1] | passed | 0.00025 seconds |
30
- ./spec/jiggler/cli_spec.rb[1:1:3:2] | passed | 0.00129 seconds |
31
- ./spec/jiggler/cli_spec.rb[1:1:3:3] | passed | 0.00037 seconds |
32
- ./spec/jiggler/cli_spec.rb[1:1:3:4] | passed | 0.00197 seconds |
33
- ./spec/jiggler/cli_spec.rb[1:1:3:5] | passed | 0.00059 seconds |
34
- ./spec/jiggler/config_spec.rb[1:1:1] | passed | 0.00054 seconds |
35
- ./spec/jiggler/config_spec.rb[1:1:2:1] | passed | 0.00023 seconds |
36
- ./spec/jiggler/config_spec.rb[1:1:2:2:1] | passed | 0.00018 seconds |
37
- ./spec/jiggler/config_spec.rb[1:1:2:3:1] | passed | 0.00018 seconds |
38
- ./spec/jiggler/config_spec.rb[1:1:3] | passed | 0.00023 seconds |
39
- ./spec/jiggler/config_spec.rb[1:1:4] | passed | 0.00021 seconds |
40
- ./spec/jiggler/core_spec.rb[1:1:1] | passed | 0.00013 seconds |
41
- ./spec/jiggler/job_spec.rb[1:1:1:1] | passed | 0.00009 seconds |
42
- ./spec/jiggler/job_spec.rb[1:1:2:1] | passed | 0.00006 seconds |
43
- ./spec/jiggler/job_spec.rb[1:2:1] | passed | 0.00042 seconds |
44
- ./spec/jiggler/job_spec.rb[1:3:1] | passed | 0.00163 seconds |
45
- ./spec/jiggler/job_spec.rb[1:4:1] | passed | 0.00035 seconds |
46
- ./spec/jiggler/job_spec.rb[1:4:2] | passed | 0.00038 seconds |
47
- ./spec/jiggler/job_spec.rb[1:5:1] | passed | 0.00197 seconds |
48
- ./spec/jiggler/launcher_spec.rb[1:1:1:1] | passed | 0.00083 seconds |
49
- ./spec/jiggler/launcher_spec.rb[1:1:2:1] | passed | 1.01 seconds |
50
- ./spec/jiggler/launcher_spec.rb[1:1:3:1] | passed | 1.01 seconds |
51
- ./spec/jiggler/launcher_spec.rb[1:1:4:1] | passed | 1.01 seconds |
52
- ./spec/jiggler/launcher_spec.rb[1:2:1:1] | passed | 0.00005 seconds |
53
- ./spec/jiggler/launcher_spec.rb[1:2:2:1] | passed | 1.01 seconds |
54
- ./spec/jiggler/launcher_spec.rb[1:2:3:1] | passed | 1.01 seconds |
55
- ./spec/jiggler/launcher_spec.rb[1:2:4:1] | passed | 1.01 seconds |
56
- ./spec/jiggler/manager_spec.rb[1:1:1] | passed | 0.00191 seconds |
57
- ./spec/jiggler/manager_spec.rb[1:1:2:1] | passed | 0.5111 seconds |
58
- ./spec/jiggler/manager_spec.rb[1:1:3:1] | passed | 0.50091 seconds |
59
- ./spec/jiggler/manager_spec.rb[1:1:4:1] | passed | 2.5 seconds |
60
- ./spec/jiggler/manager_spec.rb[1:2:1] | passed | 0.00067 seconds |
61
- ./spec/jiggler/manager_spec.rb[1:2:2:1] | passed | 0.5037 seconds |
62
- ./spec/jiggler/manager_spec.rb[1:2:3:1] | passed | 2.07 seconds |
63
- ./spec/jiggler/manager_spec.rb[1:2:4:1] | passed | 2.51 seconds |
64
- ./spec/jiggler/redis_store_spec.rb[1:1:1] | passed | 0.00007 seconds |
65
- ./spec/jiggler/redis_store_spec.rb[1:1:2:1] | passed | 0.00006 seconds |
66
- ./spec/jiggler/retrier_spec.rb[1:1:1:1] | passed | 0.0015 seconds |
67
- ./spec/jiggler/retrier_spec.rb[1:1:1:2] | passed | 0.00279 seconds |
68
- ./spec/jiggler/retrier_spec.rb[1:1:2:1] | passed | 0.00135 seconds |
69
- ./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:1] | passed | 0.00122 seconds |
70
- ./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:2] | passed | 0.00396 seconds |
71
- ./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:3] | passed | 0.00141 seconds |
72
- ./spec/jiggler/scheduled/enqueuer_spec.rb[1:2:1] | passed | 0.00364 seconds |
73
- ./spec/jiggler/scheduled/poller_spec.rb[1:1:1] | passed | 1 second |
3
+ ./spec/jiggler/at_least_once/acknowledger_spec.rb[1:1:1] | passed | 0.50201 seconds |
4
+ ./spec/jiggler/at_least_once/fetcher_spec.rb[1:1:1] | passed | 2.53 seconds |
5
+ ./spec/jiggler/at_least_once/fetcher_spec.rb[1:1:2] | passed | 2.58 seconds |
6
+ ./spec/jiggler/at_most_once/fetcher_spec.rb[1:1:1] | passed | 0.0035 seconds |
7
+ ./spec/jiggler/cleaner_spec.rb[1:1:1] | passed | 0.00117 seconds |
8
+ ./spec/jiggler/cleaner_spec.rb[1:2:1] | passed | 0.00173 seconds |
9
+ ./spec/jiggler/cleaner_spec.rb[1:3:1] | passed | 0.00193 seconds |
10
+ ./spec/jiggler/cleaner_spec.rb[1:4:1] | passed | 0.00113 seconds |
11
+ ./spec/jiggler/cleaner_spec.rb[1:5:1] | passed | 0.00126 seconds |
12
+ ./spec/jiggler/cleaner_spec.rb[1:6:1] | passed | 0.00159 seconds |
13
+ ./spec/jiggler/cleaner_spec.rb[1:7:1] | passed | 0.0015 seconds |
14
+ ./spec/jiggler/cleaner_spec.rb[1:8:1] | passed | 0.0011 seconds |
15
+ ./spec/jiggler/cleaner_spec.rb[1:9:1] | passed | 0.00239 seconds |
16
+ ./spec/jiggler/cleaner_spec.rb[1:9:2] | passed | 0.00145 seconds |
17
+ ./spec/jiggler/cleaner_spec.rb[1:10:1] | passed | 0.00183 seconds |
18
+ ./spec/jiggler/cleaner_spec.rb[1:11:1] | passed | 0.00203 seconds |
19
+ ./spec/jiggler/cli_spec.rb[1:1:1:1] | passed | 0.00046 seconds |
20
+ ./spec/jiggler/cli_spec.rb[1:1:2:1] | passed | 0.01297 seconds |
21
+ ./spec/jiggler/cli_spec.rb[1:1:2:2] | passed | 0.0008 seconds |
22
+ ./spec/jiggler/cli_spec.rb[1:1:2:3] | passed | 0.0004 seconds |
23
+ ./spec/jiggler/cli_spec.rb[1:1:2:4] | passed | 0.00136 seconds |
24
+ ./spec/jiggler/cli_spec.rb[1:1:2:5] | passed | 0.00048 seconds |
25
+ ./spec/jiggler/cli_spec.rb[1:1:2:6] | passed | 0.00034 seconds |
26
+ ./spec/jiggler/cli_spec.rb[1:1:2:7] | passed | 0.00844 seconds |
27
+ ./spec/jiggler/cli_spec.rb[1:1:2:8] | passed | 0.00053 seconds |
28
+ ./spec/jiggler/cli_spec.rb[1:1:2:9] | passed | 0.00044 seconds |
29
+ ./spec/jiggler/cli_spec.rb[1:1:3:1] | passed | 0.00527 seconds |
30
+ ./spec/jiggler/cli_spec.rb[1:1:3:2] | passed | 0.00056 seconds |
31
+ ./spec/jiggler/cli_spec.rb[1:1:3:3] | passed | 0.00051 seconds |
32
+ ./spec/jiggler/cli_spec.rb[1:1:3:4] | passed | 0.00154 seconds |
33
+ ./spec/jiggler/cli_spec.rb[1:1:3:5] | passed | 0.00084 seconds |
34
+ ./spec/jiggler/cli_spec.rb[1:1:4:1:1] | passed | 0.0005 seconds |
35
+ ./spec/jiggler/cli_spec.rb[1:1:4:1:2] | passed | 0.00049 seconds |
36
+ ./spec/jiggler/cli_spec.rb[1:1:4:2:1] | passed | 0.00284 seconds |
37
+ ./spec/jiggler/config_spec.rb[1:1:1] | passed | 0.00047 seconds |
38
+ ./spec/jiggler/config_spec.rb[1:1:2:1] | passed | 0.00022 seconds |
39
+ ./spec/jiggler/config_spec.rb[1:1:2:2:1] | passed | 0.00021 seconds |
40
+ ./spec/jiggler/config_spec.rb[1:1:2:3:1] | passed | 0.00021 seconds |
41
+ ./spec/jiggler/config_spec.rb[1:1:3] | passed | 0.00063 seconds |
42
+ ./spec/jiggler/config_spec.rb[1:1:4] | passed | 0.00039 seconds |
43
+ ./spec/jiggler/core_spec.rb[1:1:1] | passed | 0.00012 seconds |
44
+ ./spec/jiggler/job_spec.rb[1:1:1:1] | passed | 0.00063 seconds |
45
+ ./spec/jiggler/job_spec.rb[1:1:2:1] | passed | 0.0012 seconds |
46
+ ./spec/jiggler/job_spec.rb[1:2:1] | passed | 0.00134 seconds |
47
+ ./spec/jiggler/job_spec.rb[1:3:1] | passed | 0.00469 seconds |
48
+ ./spec/jiggler/job_spec.rb[1:4:1] | passed | 0.00153 seconds |
49
+ ./spec/jiggler/job_spec.rb[1:4:2] | passed | 0.00225 seconds |
50
+ ./spec/jiggler/job_spec.rb[1:5:1] | passed | 0.00216 seconds |
51
+ ./spec/jiggler/launcher_spec.rb[1:1:1:1] | passed | 0.0004 seconds |
52
+ ./spec/jiggler/launcher_spec.rb[1:1:2:1] | passed | 2.02 seconds |
53
+ ./spec/jiggler/launcher_spec.rb[1:1:3:1] | passed | 2.01 seconds |
54
+ ./spec/jiggler/launcher_spec.rb[1:1:4:1] | passed | 2.03 seconds |
55
+ ./spec/jiggler/launcher_spec.rb[1:2:1:1] | passed | 0.00075 seconds |
56
+ ./spec/jiggler/launcher_spec.rb[1:2:2:1] | passed | 2.1 seconds |
57
+ ./spec/jiggler/launcher_spec.rb[1:2:3:1] | passed | 2.06 seconds |
58
+ ./spec/jiggler/launcher_spec.rb[1:2:4:1] | passed | 2.05 seconds |
59
+ ./spec/jiggler/manager_spec.rb[1:1:1] | passed | 0.00149 seconds |
60
+ ./spec/jiggler/manager_spec.rb[1:1:2:1] | passed | 0.50872 seconds |
61
+ ./spec/jiggler/manager_spec.rb[1:1:3:1] | passed | 1.51 seconds |
62
+ ./spec/jiggler/manager_spec.rb[1:1:4:1] | passed | 3.51 seconds |
63
+ ./spec/jiggler/manager_spec.rb[1:2:1] | passed | 0.00103 seconds |
64
+ ./spec/jiggler/manager_spec.rb[1:2:2:1] | passed | 0.50582 seconds |
65
+ ./spec/jiggler/manager_spec.rb[1:2:3:1] | passed | 2.09 seconds |
66
+ ./spec/jiggler/manager_spec.rb[1:2:4:1] | passed | 2.5 seconds |
67
+ ./spec/jiggler/redis_store_spec.rb[1:1:1] | passed | 0.00068 seconds |
68
+ ./spec/jiggler/redis_store_spec.rb[1:1:2:1] | passed | 0.00008 seconds |
69
+ ./spec/jiggler/retrier_spec.rb[1:1:1:1] | passed | 0.00419 seconds |
70
+ ./spec/jiggler/retrier_spec.rb[1:1:1:2] | passed | 0.00217 seconds |
71
+ ./spec/jiggler/retrier_spec.rb[1:1:2:1] | passed | 0.00032 seconds |
72
+ ./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:1] | passed | 0.00736 seconds |
73
+ ./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:2] | passed | 0.00591 seconds |
74
+ ./spec/jiggler/scheduled/enqueuer_spec.rb[1:1:3] | passed | 0.00954 seconds |
75
+ ./spec/jiggler/scheduled/enqueuer_spec.rb[1:2:1] | passed | 0.02883 seconds |
76
+ ./spec/jiggler/scheduled/poller_spec.rb[1:1:1] | passed | 1.01 seconds |
74
77
  ./spec/jiggler/scheduled/poller_spec.rb[1:2:1] | passed | 1 second |
75
- ./spec/jiggler/scheduled/requeuer_spec.rb[1:1:1] | passed | 0.00698 seconds |
76
- ./spec/jiggler/scheduled/requeuer_spec.rb[1:2:1] | passed | 0.00796 seconds |
77
- ./spec/jiggler/scheduled/requeuer_spec.rb[1:3:1] | passed | 0.00726 seconds |
78
- ./spec/jiggler/stats/monitor_spec.rb[1:1:1] | passed | 1.03 seconds |
79
- ./spec/jiggler/stats/monitor_spec.rb[1:2:1] | passed | 1.01 seconds |
80
- ./spec/jiggler/summary_spec.rb[1:1:1] | passed | 0.01934 seconds |
81
- ./spec/jiggler/summary_spec.rb[1:1:2] | passed | 2.03 seconds |
82
- ./spec/jiggler/summary_spec.rb[1:1:3:1] | passed | 0.0027 seconds |
78
+ ./spec/jiggler/scheduled/requeuer_spec.rb[1:1:1] | passed | 0.00322 seconds |
79
+ ./spec/jiggler/scheduled/requeuer_spec.rb[1:2:1] | passed | 0.00799 seconds |
80
+ ./spec/jiggler/scheduled/requeuer_spec.rb[1:3:1] | passed | 0.00541 seconds |
81
+ ./spec/jiggler/stats/monitor_spec.rb[1:1:1] | passed | 1.02 seconds |
82
+ ./spec/jiggler/stats/monitor_spec.rb[1:2:1] | passed | 1.02 seconds |
83
+ ./spec/jiggler/summary_spec.rb[1:1:1] | passed | 0.00959 seconds |
84
+ ./spec/jiggler/summary_spec.rb[1:1:2] | passed | 2.04 seconds |
85
+ ./spec/jiggler/summary_spec.rb[1:1:3:1] | passed | 0.00529 seconds |
83
86
  ./spec/jiggler/summary_spec.rb[1:2:1] | passed | 1.01 seconds |
84
87
  ./spec/jiggler/summary_spec.rb[1:3:1] | passed | 1.01 seconds |
85
- ./spec/jiggler/summary_spec.rb[1:4:1] | passed | 0.00199 seconds |
86
- ./spec/jiggler/web_spec.rb[1:1:1] | passed | 0.00008 seconds |
87
- ./spec/jiggler/web_spec.rb[1:1:2] | passed | 0.00167 seconds |
88
- ./spec/jiggler/web_spec.rb[1:2:1] | passed | 0.00009 seconds |
89
- ./spec/jiggler/web_spec.rb[1:2:2] | passed | 0.00007 seconds |
90
- ./spec/jiggler/web_spec.rb[1:3:1] | passed | 0.00011 seconds |
91
- ./spec/jiggler/web_spec.rb[1:3:2] | passed | 0.0001 seconds |
92
- ./spec/jiggler/worker_spec.rb[1:1:1] | passed | 1 second |
88
+ ./spec/jiggler/summary_spec.rb[1:4:1] | passed | 0.01613 seconds |
89
+ ./spec/jiggler/web_spec.rb[1:1:1] | passed | 0.00051 seconds |
90
+ ./spec/jiggler/web_spec.rb[1:1:2] | passed | 0.00066 seconds |
91
+ ./spec/jiggler/web_spec.rb[1:2:1] | passed | 0.00005 seconds |
92
+ ./spec/jiggler/web_spec.rb[1:2:2] | passed | 0.00003 seconds |
93
+ ./spec/jiggler/web_spec.rb[1:3:1] | passed | 0.00051 seconds |
94
+ ./spec/jiggler/web_spec.rb[1:3:2] | passed | 0.00004 seconds |
95
+ ./spec/jiggler/worker_spec.rb[1:1:1] | passed | 1.01 seconds |
93
96
  ./spec/jiggler/worker_spec.rb[1:1:2] | passed | 1.01 seconds |
94
- ./spec/jiggler/worker_spec.rb[1:1:3] | passed | 1.01 seconds |
95
- ./spec/jiggler/worker_spec.rb[1:2:1] | passed | 0.00126 seconds |
96
- ./spec/jiggler/worker_spec.rb[1:3:1:1] | passed | 0.50306 seconds |
97
+ ./spec/jiggler/worker_spec.rb[1:1:3] | passed | 1.02 seconds |
98
+ ./spec/jiggler/worker_spec.rb[1:2:1] | passed | 0.00138 seconds |
99
+ ./spec/jiggler/worker_spec.rb[1:3:1:1] | passed | 0.50353 seconds |
@@ -1,9 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative '../../lib/jiggler/cli.rb'
4
-
5
3
  RSpec.describe Jiggler::CLI do
6
4
  let(:cli) { Jiggler::CLI.instance }
5
+ before do
6
+ # reset
7
+ Jiggler.instance_variable_set(:@config, nil)
8
+ cli.instance_variable_set(:@config, nil)
9
+ end
10
+ after do
11
+ # reset
12
+ Jiggler.instance_variable_set(:@config, nil)
13
+ cli.instance_variable_set(:@config, nil)
14
+ end
7
15
 
8
16
  describe '.parse_and_init' do
9
17
  context 'with no args' do
@@ -81,5 +89,34 @@ RSpec.describe Jiggler::CLI do
81
89
  it { expect { cli.parse_and_init(['-r', 'test.rb']) }.to raise_error(SystemExit) }
82
90
  it { expect { cli.parse_and_init(['-q', 'in:va:lid']) }.to raise_error(ArgumentError) }
83
91
  end
92
+
93
+ context 'config validation' do
94
+ context 'with mode' do
95
+ it 'raises an error when invalid mode' do
96
+ Jiggler.configure do |config|
97
+ config[:mode] = :invalid
98
+ end
99
+ expect { cli.parse_and_init }.to raise_error(ArgumentError)
100
+ end
101
+
102
+ it 'does not raise an error when valid mode' do
103
+ Jiggler.configure do |config|
104
+ config[:mode] = :at_most_once
105
+ end
106
+ expect { cli.parse_and_init }.not_to raise_error
107
+ end
108
+ end
109
+
110
+ context 'with numeric values' do
111
+ it 'raises an error when invalid value' do
112
+ Jiggler::CLI::NUMERIC_OPTIONS.each do |option|
113
+ Jiggler.configure do |config|
114
+ config[option] = [0, -1, 'a'].sample
115
+ end
116
+ expect { cli.parse_and_init }.to raise_error(ArgumentError)
117
+ end
118
+ end
119
+ end
120
+ end
84
121
  end
85
122
  end
@@ -16,6 +16,8 @@ RSpec.describe 'Core' do
16
16
  config[:queues] = %w[foo bar]
17
17
  config[:require] = 'foo'
18
18
  config[:environment] = 'bar'
19
+ config[:mode] = :at_most_once
20
+ config[:in_process_interval] = 100
19
21
  end
20
22
  expect(Jiggler.config[:concurrency]).to be 1
21
23
  expect(Jiggler.config[:client_concurrency]).to be 2
@@ -29,6 +31,8 @@ RSpec.describe 'Core' do
29
31
  expect(Jiggler.config[:queues]).to eq %w[foo bar]
30
32
  expect(Jiggler.config[:require]).to eq 'foo'
31
33
  expect(Jiggler.config[:environment]).to eq 'bar'
34
+ expect(Jiggler.config[:mode]).to eq :at_most_once
35
+ expect(Jiggler.config[:in_process_interval]).to be 100
32
36
  # reset config
33
37
  Jiggler.instance_variable_set(:@config, nil)
34
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jiggler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0.rc7
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julija Alieckaja
@@ -225,9 +225,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
225
225
  version: '0'
226
226
  required_rubygems_version: !ruby/object:Gem::Requirement
227
227
  requirements:
228
- - - ">"
228
+ - - ">="
229
229
  - !ruby/object:Gem::Version
230
- version: 1.3.1
230
+ version: '0'
231
231
  requirements: []
232
232
  rubygems_version: 3.4.6
233
233
  signing_key: