auctify 1.1.3 → 1.1.5

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: 14832525cab9835407bccb94056500037fe39da17a9ea311f7053ce4adf48255
4
- data.tar.gz: 522647a33fa236dd02c2980ecde719508bd83f21db2c0ffa38d1d77ce104d002
3
+ metadata.gz: 7e40c33ab5508a5874d200e861cebe30e1c7b9b99dd0d6a24376998f7eca011c
4
+ data.tar.gz: 026de4ef6565e73d83e0e9e433cca5872a6be4a4a92aa1e5b85b2ec64a44ad99
5
5
  SHA512:
6
- metadata.gz: 803112a2c554cb95f1eb818911ea4a92d4377306ba936ac5190101f8463a5378d225a5c260a50e01e8cc0f379ddd87b1d57902d186a8469c7baa34dee991f23a
7
- data.tar.gz: ee8f293dbba3adc69a730d208b4973ebf7d9609d326bca03eda616ca668edfb792b2d4d9b09bef211a5c08db221da2befcd507d9d3f0844c5d8de1e774db46d8
6
+ metadata.gz: 3f1c2cce869ea2fd00ca4a8a078d4f5febb15b0ce328682847a47cbdc5b2410fd120e55c5d54ee79ea5f38388ef87157232d2b0fc133f81931f1b4f4dc77246f
7
+ data.tar.gz: c07420c8fa9d289d99f947e4debcb653cc0a34c2c24500878d8317482fd39201054aec71d36b83d7b80994ad77b9b53d85b5648fe44fae3e5f777202aa4e11cb
data/README.md CHANGED
@@ -221,7 +221,19 @@ end
221
221
 
222
222
  To protect accidential deletions, many associations are binded with `dependent: restrict_with_error`. Correct order ofdeletion is `bids` => `sales` => `sales_packs`.
223
223
 
224
-
224
+ ## Monitor it
225
+ Auctify should add some metrics for Prometheus (using Yabeda gem). Exposing them on `/metrics` path.
226
+ ```
227
+ group :auctify do
228
+ counter :bids_count, comment: "A counter of applied bids"
229
+ gauge :diff_in_closing_time_seconds,
230
+ comment: "Difference between auction.currently_ends_at and actual sale end time by job"
231
+ gauge :time_between_bids, comment: "Time period between last two bids", tags: [:auction_slug]
232
+ end
233
+ ```
234
+ See `lib/yabeda_config.rb` for current setup.
235
+ Note: `diff_in_closing_time_seconds` is fill in `auction.close_bidding!`. At normal setup this is done in background job, so value is maintained in BJ process not rails app.
236
+ Eg. if You use sidekiq for backgoud jobs, You will need `yabeda-sidekiq` gem and then value vwill be displayed at port 9394 (`your.app:9394/metrics`).
225
237
 
226
238
  ## Contributing
227
239
  Contribution directions go here.
data/Rakefile CHANGED
@@ -23,12 +23,11 @@ load "rails/tasks/statistics.rake"
23
23
 
24
24
  require "bundler/gem_tasks"
25
25
 
26
- require "rake/testtask"
27
-
28
- Rake::TestTask.new(:test) do |t|
29
- t.libs << "test"
30
- t.pattern = "test/**/*_test.rb"
31
- t.verbose = false
32
- end
33
-
34
- task default: :test
26
+ ## use `rails test` instead
27
+ # require "rake/testtask"
28
+ # Rake::TestTask.new(:test) do |t|
29
+ # t.libs << "test"
30
+ # t.pattern = "test/**/*_test.rb"
31
+ # t.verbose = false
32
+ # end
33
+ # task default: :test
@@ -15,15 +15,15 @@ module Auctify
15
15
  end
16
16
 
17
17
  def bids
18
- if params[:confirmation] == "1"
18
+ if params[:terms_confirmation] == "1"
19
19
  if @auction.bid!(new_bid)
20
20
  @auction.reload
21
21
 
22
- store_dont_confirm_bids
22
+ store_confirmations_checkboxes
23
23
 
24
24
  render_record @auction, success: true, overbid_by_limit: overbid_by_limit?(new_bid)
25
25
  else
26
- store_dont_confirm_bids
26
+ store_confirmations_checkboxes
27
27
 
28
28
  render_record @auction, bid: new_bid, status: 400
29
29
  end
@@ -63,11 +63,18 @@ module Auctify
63
63
  }, status: status
64
64
  end
65
65
 
66
- def store_dont_confirm_bids
67
- if params[:dont_confirm_bids] == "1"
68
- # use SQL update in case of some obscure invalid attributes
69
- bidder_regs = current_user.bidder_registrations.where(auction: @auction)
70
- bidder_regs.update_all(dont_confirm_bids: true) if bidder_regs.present?
66
+ def store_confirmations_checkboxes
67
+ bidder_regs = current_user.bidder_registrations.where(auction: @auction)
68
+ if bidder_regs.present?
69
+ atts = { dont_confirm_bids: params[:dont_confirm_bids] == "1",
70
+ confirmed_sales_pack_terms: params[:terms_confirmation] == "1" }
71
+ bidder_regs.update_all(atts)
72
+
73
+ if atts[:confirmed_sales_pack_terms]
74
+ current_user.bidder_registrations.for_pack(bidder_regs.last.auction.pack)
75
+ .where(confirmed_sales_pack_terms: false)
76
+ .update_all(confirmed_sales_pack_terms: true)
77
+ end
71
78
  end
72
79
  end
73
80
 
@@ -2,5 +2,9 @@
2
2
 
3
3
  module Auctify
4
4
  class ApplicationJob < ActiveJob::Base
5
+ private
6
+ def auction_label(auction)
7
+ "[#{auction.try(:slug)}##{auction.id}; currently_ends_at: #{auction.currently_ends_at}]"
8
+ end
5
9
  end
6
10
  end
@@ -12,11 +12,14 @@ module Auctify
12
12
  return
13
13
  end
14
14
 
15
- return if Time.current < auction.currently_ends_at
16
-
17
- Auctify::Sale::Auction.with_advisory_lock("closing_auction_#{auction_id}") do
18
- # can wait unitl other BCJob release lock and than continue!
19
- auction.close_bidding! if auction.reload.in_sale?
15
+ if Time.current < auction.currently_ends_at
16
+ Rails.logger.info("Too soon for closing of auction #{auction_label(auction)}.")
17
+ else
18
+ Rails.logger.info("Closing auction #{auction_label(auction)} NOW!")
19
+ Auctify::Sale::Auction.with_advisory_lock("closing_auction_#{auction_id}") do
20
+ # can wait unitl other BCJob release lock and than continue!
21
+ auction.close_bidding! if auction.reload.in_sale?
22
+ end
20
23
  end
21
24
  end
22
25
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Auctify
4
- class EnsureAuctionsClosingJob < ApplicationJob
4
+ class EnsureAuctionsClosingJob < Auctify::ApplicationJob
5
5
  queue_as :critical
6
6
 
7
7
  def perform
@@ -9,8 +9,10 @@ module Auctify
9
9
  .where("currently_ends_at <= ?", Time.current + checking_period_to_future)
10
10
  auctions.each do |auction|
11
11
  if auction.currently_ends_at <= Time.current
12
+ Rails.logger.info("Queueing auction #{auction_label(auction)} for immediate close.")
12
13
  Auctify::BiddingCloserJob.perform_later(auction_id: auction.id)
13
14
  else
15
+ Rails.logger.info("Delaying close of auction #{auction_label(auction)}.")
14
16
  Auctify::BiddingCloserJob.set(wait_until: auction.currently_ends_at).perform_later(auction_id: auction.id)
15
17
  end
16
18
  end
@@ -8,6 +8,7 @@ module Auctify
8
8
  scope :applied, -> { where(cancelled: false) }
9
9
  scope :canceled, -> { where(cancelled: true) }
10
10
  scope :with_limit, -> { where.not(max_price: nil) }
11
+ scope :manual, -> { where(autobid: false) }
11
12
 
12
13
  validate :price_is_not_bigger_then_max_price
13
14
  validate :price_is_rounded
@@ -17,6 +17,8 @@ module Auctify
17
17
  inverse_of: :registration,
18
18
  dependent: :restrict_with_error # destroy them manually first
19
19
 
20
+ scope :for_pack, ->(pack) { where(auction: pack.sales) }
21
+
20
22
  aasm do
21
23
  state :pending, initial: true, color: "gray"
22
24
  state :approved, color: "green"
@@ -81,15 +83,16 @@ end
81
83
  #
82
84
  # Table name: auctify_bidder_registrations
83
85
  #
84
- # id :bigint(8) not null, primary key
85
- # bidder_type :string not null
86
- # bidder_id :integer not null
87
- # auction_id :integer not null
88
- # aasm_state :string default("pending"), not null
89
- # handled_at :datetime
90
- # created_at :datetime not null
91
- # updated_at :datetime not null
92
- # dont_confirm_bids :boolean default(FALSE)
86
+ # id :bigint(8) not null, primary key
87
+ # bidder_type :string not null
88
+ # bidder_id :bigint(8) not null
89
+ # auction_id :bigint(8) not null
90
+ # aasm_state :string default("pending"), not null
91
+ # handled_at :datetime
92
+ # created_at :datetime not null
93
+ # updated_at :datetime not null
94
+ # dont_confirm_bids :boolean default(FALSE)
95
+ # confirmed_sales_pack_terms :boolean default(FALSE)
93
96
  #
94
97
  # Indexes
95
98
  #
@@ -69,7 +69,9 @@ module Auctify
69
69
 
70
70
  after do
71
71
  self.winner = current_winner
72
+
72
73
  now = Time.current
74
+ Yabeda.auctify.diff_in_closing_time_seconds.set({}, (now - self.currently_ends_at).round)
73
75
  self.currently_ends_at = now if now < currently_ends_at
74
76
 
75
77
  after_close_bidding
@@ -162,6 +164,7 @@ module Auctify
162
164
  bap = Auctify::BidsAppender.call(auction: self, bid: bid)
163
165
 
164
166
  bap.success? ? after_bid_appended(bap) : after_bid_not_appended(bap)
167
+
165
168
  bap.success?
166
169
  end
167
170
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ class AddConfirmedSalesPackTermsToBidderRegistrations < ActiveRecord::Migration[6.1]
4
+ def change
5
+ add_column :auctify_bidder_registrations, :confirmed_sales_pack_terms, :boolean, default: false
6
+
7
+ execute "UPDATE auctify_bidder_registrations SET confirmed_sales_pack_terms = true WHERE dont_confirm_bids = true;"
8
+ end
9
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Auctify
4
+ class Railtie < Rails::Railtie
5
+ # I did not found way, how to chec for presence of Yabeda::Prometheus::Exporter in middleware
6
+ if require "yabeda/prometheus"
7
+ initializer "auctify.railtie_initialization" do |main_app|
8
+ main_app.middleware.use ::Yabeda::Prometheus::Exporter
9
+ end
10
+ end
11
+ end
12
+ end
13
+
14
+ require "yabeda_config.rb"
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Auctify
4
- VERSION = "1.1.3"
4
+ VERSION = "1.1.5"
5
5
  end
data/lib/auctify.rb CHANGED
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require "auctify/railtie" if defined?(Rails::Railtie)
4
+
3
5
  require "auctify/engine"
4
6
  require "auctify/configuration"
5
7
 
@@ -0,0 +1,8 @@
1
+ namespace :test do
2
+ Rake::TestTask.new(:dummy) do |t|
3
+ t.libs << "test"
4
+ t.pattern = 'test/dummy/test/**/*_test.rb'
5
+ t.verbose = true
6
+ end
7
+ end
8
+ # Rake::Task[:test].enhance ["test:dummy"]
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ Yabeda.configure do
4
+ group :auctify do
5
+ gauge :bids_count,
6
+ comment: "A count of all applied bids"
7
+ # counter :bids_count, comment: "A count of all applied bids"
8
+ gauge :time_between_last_bids_seconds,
9
+ comment: "Time period between last two manual bids"
10
+ gauge :current_max_delay_in_closing_auction_seconds,
11
+ comment: "Delay from oldest `currently_ends_at` of auction in sale (that should be already closed)."
12
+
13
+
14
+ # this is done when auction.close_bidding! is run
15
+ gauge :diff_in_closing_time_seconds,
16
+ comment: "Difference between auction.currently_ends_at and actual sale end time by job"
17
+ end
18
+
19
+ # to fetch correct data independently on process/container
20
+ # we collect them at request for /metrics, not at "trigger" time
21
+ collect do # when /metrics is displayed
22
+ auctify.bids_count.set({}, Auctify::Bid.count)
23
+
24
+ last_bid_times = Auctify::Bid.applied.manual.order(created_at: :desc).limit(2).pluck(:created_at)
25
+ auctify.time_between_last_bids_seconds.set({}, last_bid_times.size == 2 ? (last_bid_times.first - last_bid_times.last).round : 0)
26
+
27
+ auction = Auctify::Sale::Auction.in_sale.order(currently_ends_at: :asc).first
28
+ if auction.blank?
29
+ auctify.current_max_delay_in_closing_auction_seconds.set({}, -1)
30
+ else
31
+ delay = [0, (Time.current - auction.currently_ends_at)].max # only positive number
32
+ auctify.current_max_delay_in_closing_auction_seconds.set({}, delay.round)
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: auctify
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - foton
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-19 00:00:00.000000000 Z
11
+ date: 2023-09-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -66,6 +66,20 @@ dependencies:
66
66
  - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: yabeda-prometheus
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: pg
71
85
  requirement: !ruby/object:Gem::Requirement
@@ -425,16 +439,20 @@ files:
425
439
  - db/migrate/20210917082313_add_auction_prolonging_limit_to_sales_packs.rb
426
440
  - db/migrate/20211022133253_add_autobid_to_auctify_bids.rb
427
441
  - db/migrate/20211203064934_update_sales_featurable.rb
442
+ - db/migrate/20230905114142_add_confirmed_sales_pack_terms_to_bidder_registrations.rb
428
443
  - lib/auctify.rb
429
444
  - lib/auctify/configuration.rb
430
445
  - lib/auctify/engine.rb
446
+ - lib/auctify/railtie.rb
431
447
  - lib/auctify/version.rb
432
448
  - lib/tasks/auctify_tasks.rake
449
+ - lib/tasks/test_tasks.rake
450
+ - lib/yabeda_config.rb
433
451
  homepage: https://github.com/sinfin/auctify
434
452
  licenses:
435
453
  - MIT
436
454
  metadata: {}
437
- post_install_message:
455
+ post_install_message:
438
456
  rdoc_options: []
439
457
  require_paths:
440
458
  - lib
@@ -449,8 +467,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
449
467
  - !ruby/object:Gem::Version
450
468
  version: '0'
451
469
  requirements: []
452
- rubygems_version: 3.2.28
453
- signing_key:
470
+ rubygems_version: 3.0.3
471
+ signing_key:
454
472
  specification_version: 4
455
473
  summary: Gem for adding auction behavior to models.
456
474
  test_files: []