spree_cm_commissioner 2.8.12 → 2.8.14

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: 4d17bf5be351fe1e468d5772155df5cb6dad36710f3211444d7c6277c3019992
4
- data.tar.gz: 73090f05ce40a930e5041040d531d5b4823e3aa7fb95c57b1b710613d75dc13b
3
+ metadata.gz: 1c9db9328cb88cf7fde16a7e685701308b1f7b939ed963d7ee589033a1c38a6e
4
+ data.tar.gz: b43d69cdc29b8550301afcc5a01ab8da004261fc4bc4314019525b36d6f8ca27
5
5
  SHA512:
6
- metadata.gz: 5329436173e30eb89975c67d5fda96b8217c19507414a2631ad4cbb808b59be492f47ba18239114f4325851df932df657e10dd71b5551140d1c3f52e277ae867
7
- data.tar.gz: 6db4e5c326dcc47fd5956b2253d793db7f3a0c86cd3b08eae34d4e629396c2c62347ccf2ecc9a01329e724f40232b1eca1296098b5779e233e91096596a39cdf
6
+ metadata.gz: aa15d9ee3abd52045750066949564ce695a44744750f5de0087de5fefedff5dc0117c23a44541da7ba169d995454aa6366008c57776c37198e915e755b866220
7
+ data.tar.gz: db7d35fe794708874feccc997084b00565e42c053963d7bf32fa135be05c625eeff8390ccce4a8e9c747acbd74694fc682a05313e6edb41639678b4fe8fc32c7
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.8.12)
37
+ spree_cm_commissioner (2.8.14)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -26,6 +26,13 @@ module Spree
26
26
  redirect_back fallback_location: admin_system_waiting_room_path
27
27
  end
28
28
 
29
+ def modify_max_sessions_count_cap
30
+ modifier = params[:max_sessions_count_cap]&.to_i || 0
31
+ SpreeCmCommissioner::WaitingRoomSystemMetadataSetter.new.modify_max_sessions_count_cap(modifier)
32
+
33
+ redirect_back fallback_location: admin_system_waiting_room_path
34
+ end
35
+
29
36
  def force_pull
30
37
  SpreeCmCommissioner::WaitingRoomLatestSystemMetadataPullerJob.perform_now
31
38
  SpreeCmCommissioner::WaitingGuestsCallerJob.perform_now
@@ -12,17 +12,24 @@ module SpreeCmCommissioner
12
12
  @document_data = document.get.data
13
13
  end
14
14
 
15
- def self.compute_max_sessions_count_with_min(server_running_count:, max_thread_count:, multiplier:)
16
- min = ENV.fetch('WAITING_ROOM_MIN_SESSIONS_COUNT', '5').to_i
15
+ def self.min_sessions_count
16
+ ENV.fetch('WAITING_ROOM_MIN_SESSIONS_COUNT', '5').to_i
17
+ end
18
+
19
+ def self.compute_max_sessions_count_with_min(server_running_count:, max_thread_count:, multiplier:, cap:)
20
+ min = min_sessions_count
17
21
  max = server_running_count * max_thread_count * multiplier / 100
18
- [max, min].max
22
+ # Cap the auto-scaled value so the system does not scale beyond the configured ceiling,
23
+ # while ensuring the minimum always wins even if the cap is set below it.
24
+ max.clamp(min, [cap, min].max)
19
25
  end
20
26
 
21
27
  def max_sessions_count_with_min
22
28
  @max_sessions_count_with_min ||= self.class.compute_max_sessions_count_with_min(
23
29
  server_running_count: server_running_count,
24
30
  max_thread_count: max_thread_count,
25
- multiplier: multiplier
31
+ multiplier: multiplier,
32
+ cap: max_sessions_count_cap
26
33
  )
27
34
  end
28
35
 
@@ -41,6 +48,11 @@ module SpreeCmCommissioner
41
48
  document_data[:multiplier]&.to_i || ENV.fetch('WAITING_ROOM_MULTIPLIER', '150').to_i
42
49
  end
43
50
 
51
+ # hard ceiling for max_sessions_count to avoid auto-scaling the system too much
52
+ def max_sessions_count_cap
53
+ document_data[:max_sessions_count_cap]&.to_i || ENV.fetch('WAITING_ROOM_MAX_SESSIONS_COUNT_CAP', '1000').to_i
54
+ end
55
+
44
56
  def document
45
57
  @document ||= firestore.col('metadata').doc('system')
46
58
  end
@@ -20,6 +20,18 @@ module SpreeCmCommissioner
20
20
  cache_max_sessions_count(new_data)
21
21
  end
22
22
 
23
+ def modify_max_sessions_count_cap(modify)
24
+ fetcher.load_document_data
25
+
26
+ new_data = fetcher.document_data.dup
27
+ # Floor the cap at the configured minimum; a cap below the min is meaningless
28
+ # since the min always wins in compute_max_sessions_count_with_min.
29
+ new_data[:max_sessions_count_cap] = [fetcher.max_sessions_count_cap + modify, WaitingRoomSystemMetadataFetcher.min_sessions_count].max
30
+
31
+ fetcher.document.set(new_data)
32
+ cache_max_sessions_count(new_data)
33
+ end
34
+
23
35
  def set(server_running_count:)
24
36
  fetcher.load_document_data
25
37
 
@@ -40,7 +52,8 @@ module SpreeCmCommissioner
40
52
  max = WaitingRoomSystemMetadataFetcher.compute_max_sessions_count_with_min(
41
53
  server_running_count: data[:server_running_count]&.to_i || fetcher.server_running_count,
42
54
  max_thread_count: data[:max_thread_count]&.to_i || fetcher.max_thread_count,
43
- multiplier: data[:multiplier]&.to_i || fetcher.multiplier
55
+ multiplier: data[:multiplier]&.to_i || fetcher.multiplier,
56
+ cap: data[:max_sessions_count_cap]&.to_i || fetcher.max_sessions_count_cap
44
57
  )
45
58
  Rails.cache.write('waiting_room/max_sessions_count', max, expires_in: 1.hour)
46
59
  end
@@ -20,6 +20,11 @@
20
20
  field_name: :max_sessions,
21
21
  value: @fetcher.max_sessions_count_with_min,
22
22
  },
23
+ {
24
+ field_name: :max_sessions_count_cap,
25
+ value: @fetcher.max_sessions_count_cap,
26
+ modify_path: modify_max_sessions_count_cap_admin_system_waiting_room_path
27
+ },
23
28
  {
24
29
  field_name: :active_sesions,
25
30
  value: @active_sesions_count,
data/config/routes.rb CHANGED
@@ -17,6 +17,7 @@ Spree::Core::Engine.add_routes do
17
17
  post :publish_lobby_path
18
18
  post :modify_multiplier
19
19
  post :modify_max_thread_count
20
+ post :modify_max_sessions_count_cap
20
21
  end
21
22
  end
22
23
 
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.8.12'.freeze
2
+ VERSION = '2.8.14'.freeze
3
3
 
4
4
  module_function
5
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.12
4
+ version: 2.8.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-21 00:00:00.000000000 Z
11
+ date: 2026-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree