Class: ProxyMgr::ServiceManager

Inherits:
Object
  • Object
show all
Includes:
Logging
Defined in:
lib/proxymgr/service_manager.rb

Instance Method Summary collapse

Methods included from Logging

disable!, #logger, logger

Constructor Details

#initialize(sink) ⇒ ServiceManager

Returns a new instance of ServiceManager.



5
6
7
8
9
10
11
# File 'lib/proxymgr/service_manager.rb', line 5

def initialize(sink)
  @services = {}
  @sink     = sink

  @service_mutex = Mutex.new
  @sink_mutex    = Mutex.new
end

Instance Method Details

#delete_service(name) ⇒ Object



30
31
32
33
34
35
36
# File 'lib/proxymgr/service_manager.rb', line 30

def delete_service(name)
  @service_mutex.synchronize do
    svc = @services.delete(name)
    svc.shutdown if svc
  end
  update_backends
end

#shutdownObject



42
43
44
45
# File 'lib/proxymgr/service_manager.rb', line 42

def shutdown
  @sink.shutdown
  @services.each { |_name, watcher| watcher.shutdown }
end

#update_backendsObject



38
39
40
# File 'lib/proxymgr/service_manager.rb', line 38

def update_backends
  @sink_mutex.synchronize { @sink.update_backends @services }
end

#update_service(name, config) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/proxymgr/service_manager.rb', line 13

def update_service(name, config)
  logger.info "Received service: #{name}"

  type = config.delete('type')
  begin
    klass           = watcher_class(type)
    @service_mutex.synchronize do
      @services[name].shutdown if @services[name]
      w = @services[name] = klass.new(name, config, self)
      w.watch if w.valid?
    end
  rescue NameError
    logger.warn "Could not find implementation for #{type}. Not adding service #{name}"
    nil
  end
end