Class: FluentdServer::SyncRunner

Inherits:
Object
  • Object
show all
Includes:
Logger
Defined in:
lib/fluentd_server/sync_runner.rb

Class Method Summary collapse

Instance Method Summary collapse

Methods included from Logger

included, #logger, #logger=

Constructor Details

#initialize(opts = {}) ⇒ SyncRunner

Returns a new instance of SyncRunner.



11
12
# File 'lib/fluentd_server/sync_runner.rb', line 11

def initialize(opts = {})
end

Class Method Details

.run(opts = {}) ⇒ Object



7
8
9
# File 'lib/fluentd_server/sync_runner.rb', line 7

def self.run(opts = {})
  self.new(opts).run
end

Instance Method Details

#create(names) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
# 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) ⇒ Object



47
48
49
50
51
52
53
54
# 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) ⇒ Array

Find difference between given array of paths and paths stored in DB

Parameters:

  • batch_size (Integer) (defaults to: 1000)

    The batch size of a select query

Returns:

  • (Array)

    Plus (array) and minus (array) differences



60
61
62
63
64
65
66
67
68
69
70
# 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_localsObject



22
23
24
25
26
27
28
29
30
31
# 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

#runObject



14
15
16
17
18
19
20
# 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