Class: Ultrafast::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/ultrafast/server.rb

Class Method Summary collapse

Class Method Details

.application_nameObject



39
40
41
# File 'lib/ultrafast/server.rb', line 39

def self.application_name
  Ultrafast::CurrentApplication.name
end

.get_redis_page(model, cursor) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/ultrafast/server.rb', line 27

def self.get_redis_page(model, cursor)
  redis_connection.scan(
    cursor,
    match: "#{application_name}.#{model}.*",
    count: model.fast_default_amount
  )
end

.list_modelsObject



43
44
45
# File 'lib/ultrafast/server.rb', line 43

def self.list_models
  ActiveRecord::Base.descendants.select{|model| model.try(:has_fast_create) }
end

.redis_connectionObject



35
36
37
# File 'lib/ultrafast/server.rb', line 35

def self.redis_connection
  Ultrafast::Storage.redis_connection
end

.sleep_timeObject



53
54
55
# File 'lib/ultrafast/server.rb', line 53

def self.sleep_time
  (ENV['UF_LOOP_INTERVAL'] || 0.5).to_f
end

.startObject



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/ultrafast/server.rb', line 3

def self.start
  start_message
  Rails.application.eager_load!

  cursors = {}

  loop do
    list_models.each do |model|
      keys = []
      cursor = cursors[model.name] rescue 0
      cursors[model.name], keys = get_redis_page(model, cursor)

      values = keys.map{|key| JSON.parse(redis_connection.get(key))[0] }

      if values.count > 0
        model.import(values)
        keys.each{|key| redis_connection.del(key) }
      end
    end

    sleep(sleep_time)
  end
end

.start_messageObject



47
48
49
50
51
# File 'lib/ultrafast/server.rb', line 47

def self.start_message
  Rails.logger.info '-----------------------------------------------------'
  Rails.logger.info '[START ULTRAFAST] Ultrafast server is started'
  Rails.logger.info '-----------------------------------------------------'
end