jiggler 0.1.0.rc7 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: