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