class FluentdServer::SyncRunner
Public Class Methods
new(opts = {})
click to toggle source
# File lib/fluentd_server/sync_runner.rb, line 11 def initialize(opts = {}) end
run(opts = {})
click to toggle source
# File lib/fluentd_server/sync_runner.rb, line 7 def self.run(opts = {}) self.new(opts).run end
Public Instance Methods
create(names)
click to toggle source
# File lib/fluentd_server/sync_runner.rb, line 33 def create(names) # ToDo: bulk insert with sqlite, postgresql? use activerecord-import for mysql2 logger.debug "[sync] create #{names}" names.each do |name| begin Post.create(name: name) rescue ActiveRecord::RecordNotUnique => e logger.debug "#{e.class} #{e.message} #{name}" rescue => e logger.warn "#{e.class} #{e.message} #{name}" end end end
delete(names)
click to toggle source
# File lib/fluentd_server/sync_runner.rb, line 47 def delete(names) logger.debug "[sync] remove #{names}" begin Post.where(:name => names).delete_all rescue => e logger.warn "#{e.class} #{e.message} #{names}" end end
find_diff(batch_size: 1000)
click to toggle source
Find difference between given array of paths and paths stored in DB
@param [Integer] batch_size The batch size of a select query @return [Array] Plus (array) and minus (array) differences
# File lib/fluentd_server/sync_runner.rb, line 60 def find_diff(batch_size: 1000) names = find_locals plus = names minus = [] Post.select('id, name').find_in_batches(batch_size: batch_size) do |batches| batches = batches.map(&:name) plus -= batches minus += (batches - names) end [plus, minus] end
find_locals()
click to toggle source
# File lib/fluentd_server/sync_runner.rb, line 22 def find_locals return [] unless FluentdServer::Config.file_storage names = [] Dir.chdir(FluentdServer::Config.data_dir) do Dir.glob("*.erb") do |filename| names << filename.chomp('.erb') end end names end
run()
click to toggle source
# File lib/fluentd_server/sync_runner.rb, line 14 def run logger.debug "[sync] sync runner started" return nil unless FluentdServer::Config.file_storage plus, minus = find_diff create(plus) delete(minus) end