Class: Dynflow::Dispatcher::ClientDispatcher::PingCache
- Inherits:
 - 
      Object
      
        
- Object
 - Dynflow::Dispatcher::ClientDispatcher::PingCache
 
 
- Defined in:
 - lib/dynflow/dispatcher/client_dispatcher.rb
 
Overview
Class used for reducing the number of sent Pings among worlds. World’s coordinator record include the time when was the world seen for the last time. This class can be used to query this information and determine whether the record is “fresh enough” or whether the Ping really needs to be sent.
Constant Summary collapse
- TIME_FORMAT =
          
Format string used for formating and parsing times
 '%Y-%m-%d %H:%M:%S.%L'- DEFAULT_MAX_AGE =
 60
Class Method Summary collapse
- 
  
    
      .format_time(time = Time.now)  ⇒ String 
    
    
  
  
  
  
  
  
  
  
  
    
Formats time into a string.
 - 
  
    
      .load_time(time)  ⇒ Time 
    
    
  
  
  
  
  
  
  
  
  
    
Parses time from a string.
 
Instance Method Summary collapse
- 
  
    
      #add_record(id, time = Time.now)  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    
Records when was the world seen into the world’s coordinator record.
 - 
  
    
      #executor?(id)  ⇒ TrueClass, ... 
    
    
  
  
  
  
  
  
  
  
  
    
Looks into the cache whether the world has an executor.
 - 
  
    
      #fresh_record?(id)  ⇒ TrueClass, FalseClass 
    
    
  
  
  
  
  
  
  
  
  
    
Loads the coordinator record from the database and checks whether the world was last seen within the time limit.
 - 
  
    
      #initialize(world, max_age = DEFAULT_MAX_AGE)  ⇒ PingCache 
    
    
  
  
  
    constructor
  
  
  
  
  
  
  
    
A new instance of PingCache.
 
Constructor Details
#initialize(world, max_age = DEFAULT_MAX_AGE) ⇒ PingCache
Returns a new instance of PingCache.
      57 58 59 60 61  | 
    
      # File 'lib/dynflow/dispatcher/client_dispatcher.rb', line 57 def initialize(world, max_age = DEFAULT_MAX_AGE) @world = world @max_age = max_age @executor = {} end  | 
  
Class Method Details
.format_time(time = Time.now) ⇒ String
Formats time into a string
      44 45 46  | 
    
      # File 'lib/dynflow/dispatcher/client_dispatcher.rb', line 44 def self.format_time(time = Time.now) time.strftime(TIME_FORMAT) end  | 
  
.load_time(time) ⇒ Time
Parses time from a string
      52 53 54  | 
    
      # File 'lib/dynflow/dispatcher/client_dispatcher.rb', line 52 def self.load_time(time) Time.strptime(time, TIME_FORMAT) end  | 
  
Instance Method Details
#add_record(id, time = Time.now) ⇒ Object
Records when was the world seen into the world’s coordinator record
      67 68 69 70 71 72  | 
    
      # File 'lib/dynflow/dispatcher/client_dispatcher.rb', line 67 def add_record(id, time = Time.now) record = find_world id @executor[id] ||= record.data[:class] == 'Dynflow::Coordinator::ExecutorWorld' record.data[:meta].update(:last_seen => self.class.format_time(time)) @world.coordinator.update_record(record) end  | 
  
#executor?(id) ⇒ TrueClass, ...
Looks into the cache whether the world has an executor
      80 81 82  | 
    
      # File 'lib/dynflow/dispatcher/client_dispatcher.rb', line 80 def executor?(id) @executor[id] end  | 
  
#fresh_record?(id) ⇒ TrueClass, FalseClass
Loads the coordinator record from the database and checks whether the world was last seen within the time limit
      90 91 92 93 94 95 96  | 
    
      # File 'lib/dynflow/dispatcher/client_dispatcher.rb', line 90 def fresh_record?(id) record = find_world(id) return false if record.nil? @executor[id] = record.data[:class] == 'Dynflow::Coordinator::ExecutorWorld' time = self.class.load_time(record.data[:meta][:last_seen]) time >= Time.now - @max_age end  |