Skip to content

Instantly share code, notes, and snippets.

@creative-cranels
Created November 24, 2016 04:11
Show Gist options
  • Save creative-cranels/2f2aa4e752842e756ee5ece784904990 to your computer and use it in GitHub Desktop.
Save creative-cranels/2f2aa4e752842e756ee5ece784904990 to your computer and use it in GitHub Desktop.
// No Data
# app/models/stat.rb
class Stat
def calculate!
raise "implement"
end
#
def self.get_changed
children = [Stat::MasterReservation, ...]
children.map(&:get_changed).flatten
end
end
# app/models/stat/master_reservation.rb
class Stat::MasterReservation < Stat
field :reservation_count, type: Integer
field :data, type: Array
belongs_to :salon
index :reservation_count => 1
def calculate!
# do stuff
end
def self.get_changed
# salon1, salon2
# r1 r2
# r1' r2
#
docs = []
Salon.all.each do |s|
docs += self.where(salon_id: s.id, :reservation_count.ne => s.reservations.count ).to_a
end
docs
end
end
# app/models/stat/salon.rb
class Stat::Salon < Stat
field :salon_ids, type: Array
field :data, type: Hash
end
class HardStatWorker
include Sidekiq::Worker
include Sidetiq::Schedulable
recurrence { minutely(30) }
def perform
Stat.get_changed.each(&:calculate!)
end
end
# config/routes.rb
require 'sidekiq/web'
require 'sidetiq/web'
Sidekiq::Web.set :session_secret, Rails.application.secrets[:secret_key_base]
...
authenticate :user, lambda { |u| u.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment