Class: SlackRubyBotServer::Service
- Inherits:
-
Object
- Object
- SlackRubyBotServer::Service
- Includes:
- SlackRubyBot::Loggable
- Defined in:
- lib/slack-ruby-bot-server/service.rb
Class Method Summary collapse
Instance Method Summary collapse
- #deactivate!(team) ⇒ Object
-
#initialize ⇒ Service
constructor
A new instance of Service.
- #reset! ⇒ Object
- #restart!(team, server, wait = 1) ⇒ Object
- #start!(team) ⇒ Object
- #start_from_database! ⇒ Object
- #stop!(team) ⇒ Object
Constructor Details
#initialize ⇒ Service
Returns a new instance of Service.
16 17 18 19 |
# File 'lib/slack-ruby-bot-server/service.rb', line 16 def initialize @lock = Mutex.new @services = {} end |
Class Method Details
.instance ⇒ Object
12 13 14 |
# File 'lib/slack-ruby-bot-server/service.rb', line 12 def self.instance @instance ||= new end |
.start! ⇒ Object
5 6 7 8 9 10 |
# File 'lib/slack-ruby-bot-server/service.rb', line 5 def self.start! Thread.new do Thread.current.abort_on_exception = true instance.start_from_database! end end |
Instance Method Details
#deactivate!(team) ⇒ Object
64 65 66 67 68 69 70 71 72 73 |
# File 'lib/slack-ruby-bot-server/service.rb', line 64 def deactivate!(team) team.deactivate! @lock.synchronize do @services.delete(team.token) end rescue Mongoid::Errors::Validations => e logger.error "#{team.name}: #{e.}, error - #{e.document.class}, #{e.document.errors.to_hash}, ignored." rescue StandardError => e logger.error "#{team.name}: #{e.class}, #{e.}, ignored." end |
#reset! ⇒ Object
75 76 77 78 79 |
# File 'lib/slack-ruby-bot-server/service.rb', line 75 def reset! @services.values.to_a.each do |server| stop!(server.team) end end |
#restart!(team, server, wait = 1) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 |
# File 'lib/slack-ruby-bot-server/service.rb', line 50 def restart!(team, server, wait = 1) server.start_async rescue StandardError => e case e. when 'account_inactive', 'invalid_auth' then logger.error "#{team.name}: #{e.}, team will be deactivated." deactivate!(team) else logger.error "#{team.name}: #{e.}, restarting in #{wait} second(s)." sleep(wait) restart! team, server, [wait * 2, 60].min end end |
#start!(team) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/slack-ruby-bot-server/service.rb', line 21 def start!(team) fail 'Token already known.' if @services.key?(team.token) logger.info "Starting team #{team}." server = SlackRubyBotServer::Server.new(team: team) @lock.synchronize do @services[team.token] = server end restart!(team, server) rescue StandardError => e logger.error e end |
#start_from_database! ⇒ Object
44 45 46 47 48 |
# File 'lib/slack-ruby-bot-server/service.rb', line 44 def start_from_database! Team.active.each do |team| start!(team) end end |
#stop!(team) ⇒ Object
33 34 35 36 37 38 39 40 41 42 |
# File 'lib/slack-ruby-bot-server/service.rb', line 33 def stop!(team) @lock.synchronize do fail 'Token unknown.' unless @services.key?(team.token) logger.info "Stopping team #{team}." @services[team.token].stop! @services.delete(team.token) end rescue StandardError => e logger.error e end |