slack-ruby-bot-server 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1cc9126666813e0a880a4c970ff259ea90fd0954
4
- data.tar.gz: 0eede9635d5aca9c6db238e8bb1a3bcf86614564
3
+ metadata.gz: c2baab12040f4100e3fb8ece5469b8b4ed6616f2
4
+ data.tar.gz: 45d3c6c0c456033a0a1c799ab71c298b3b7d72b6
5
5
  SHA512:
6
- metadata.gz: ea825ac737ceb089ad5460b40ff98607d9424bf2d6b9d196351399e73ce065581303d996c105dc20d9c88d4d21e7fa222f7cc65ad9d07e9b22655c01a9c0bd21
7
- data.tar.gz: 91ed370e494c05e9543aba95379dcecdfdd0513f535a75d349983d7244cb9b4f69590584ad25558ccb4c094934f44b02920c7d255d676cb8341930d4c08e19f2
6
+ metadata.gz: fced549dc1ec1f687223b076c6c73d50e5d14fd1976dcf007f392beb8b9e7f0b2c0519d011acbd1d20db7a86e3cee58b3974f0f444c1013d5edb10e8501f593e
7
+ data.tar.gz: 383451e38ac282f35ee977179a2e20a1df09ba40664cb2c38dd1a28d5fa1cc28bbf31de19c0bdfe2682df4d7f003d788983927f5973d0fbcc8356add93475f2a
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2018-08-22 08:29:35 -0400 using RuboCop version 0.58.2.
3
+ # on 2018-09-08 18:09:56 -0400 using RuboCop version 0.58.2.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -16,6 +16,11 @@ Layout/IndentHeredoc:
16
16
  - 'sample_apps/sample_app_activerecord/commands/help.rb'
17
17
  - 'sample_apps/sample_app_mongoid/commands/help.rb'
18
18
 
19
+ # Offense count: 1
20
+ Lint/HandleExceptions:
21
+ Exclude:
22
+ - 'lib/slack-ruby-bot-server/ping.rb'
23
+
19
24
  # Offense count: 3
20
25
  # Configuration parameters: Blacklist.
21
26
  # Blacklist: (?-mix:(^|\s)(EO[A-Z]{1}|END)(\s|$))
@@ -1,56 +1,61 @@
1
1
  ### Changelog
2
2
 
3
- #### 0.7.0 (8/22/2018)
3
+ #### 0.8.0 (2018/9/8)
4
+
5
+ * [#75](https://github.com/slack-ruby/slack-ruby-bot-server/pull/75): Default to `async-websocket` instead of `celluloid-io` - [@dblock](https://github.com/dblock).
6
+ * [#76](https://github.com/slack-ruby/slack-ruby-bot-server/pull/76): Adjust wait time on restart on Slack::Web::Api::Errors::TooManyRequestsError - [@dblock](https://github.com/dblock).
7
+
8
+ #### 0.7.0 (2018/8/22)
4
9
 
5
10
  * [#60](https://github.com/slack-ruby/slack-ruby-bot-server/pull/60): Log caught Standard::Error backtrace at debug-level - [@alexagranov](https://github.com/alexagranov).
6
11
  * [#65](https://github.com/slack-ruby/slack-ruby-bot-server/pull/65): Updated Capybara and selenium-webdriver - [@dblock](https://github.com/dblock).
7
12
  * [#67](https://github.com/slack-ruby/slack-ruby-bot-server/pull/67): Only load the OTR::ActiveRecord::ConnectionManagement middleware when the OTR module is included. This module isn't needed when using Rails - [@darbyfrey](https://github.com/darbyfrey).
8
13
  * [#74](https://github.com/slack-ruby/slack-ruby-bot-server/pull/74): Added ping worker, will restart offline bots - [@dblock](https://github.com/dblock).
9
14
 
10
- #### 0.6.1 (3/29/2017)
15
+ #### 0.6.1 (2017/3/29)
11
16
 
12
17
  * [#54](https://github.com/slack-ruby/slack-ruby-bot-server/pull/54): Removing one more Mongoid dependency when rescuing from _invoke - [@alexagranov](https://github.com/alexagranov).
13
18
  * [#53](https://github.com/slack-ruby/slack-ruby-bot-server/pull/53): No need for `otr-activerecord` if using activerecord under Rails - [@alexagranov](https://github.com/alexagranov).
14
19
 
15
- #### 0.6.0 (3/12/2017)
20
+ #### 0.6.0 (2017/3/12)
16
21
 
17
22
  * [#38](https://github.com/slack-ruby/slack-ruby-bot-server/issues/7): Added ActiveRecord support - [@zachfeldman](https://github.com/zachfeldman), [@spencerldixon](https://github.com/spencerldixon), [@dblock](https://github.com/dblock).
18
23
  * [#45](https://github.com/slack-ruby/slack-ruby-bot-server/pull/45): Updated grape-roar to 0.4.0 - [@swalberg](https://github.com/swalberg).
19
24
  * [#49](https://github.com/slack-ruby/slack-ruby-bot-server/pull/49): Run tests in the sample apps part of CI - [@dblock](https://github.com/dblock).
20
25
 
21
- #### 0.5.0 (2/9/2017)
26
+ #### 0.5.0 (2017/2/9)
22
27
 
23
28
  * [#43](https://github.com/slack-ruby/slack-ruby-bot-server/pull/43): Fix: `cannot load kaminari/grape` - [@dblock](https://github.com/dblock).
24
29
  * [#43](https://github.com/slack-ruby/slack-ruby-bot-server/pull/43): Fix: `undefined method '[]' for nil:NilClass` in APIs - [@dblock](https://github.com/dblock).
25
30
  * [#28](https://github.com/slack-ruby/slack-ruby-bot-server/pull/28): Use slack-ruby-danger gem - [@dblock](https://github.com/dblock).
26
31
  * [#31](https://github.com/slack-ruby/slack-ruby-bot-server/pull/31): Adds MONGODB_URI as environment variable for MongoDB - [@corprew](https://github.com/corprew).
27
32
 
28
- #### 0.4.0 (8/29/2016)
33
+ #### 0.4.0 (2016/8/29)
29
34
 
30
35
  * [#25](https://github.com/slack-ruby/slack-ruby-bot-server/pull/25): Added [danger](http://danger.systems), PR linting - [@dblock](https://github.com/dblock).
31
36
  * The `reset` and `resetting` callbacks have been removed - [@dblock](https://github.com/dblock).
32
37
  * Callbacks receive `team` and `error`, but no longer `server` - [@dblock](https://github.com/dblock).
33
38
  * [#23](https://github.com/slack-ruby/slack-ruby-bot-server/issues/23): Fix: server-side removal of bot doesn't deactivate it - [@dblock](https://github.com/dblock).
34
39
 
35
- #### 0.3.1 (7/10/2016)
40
+ #### 0.3.1 (2016/7/10)
36
41
 
37
42
  * [#22](https://github.com/slack-ruby/slack-ruby-bot-server/issues/22): Subclassing `SlackRubyBotServer::App` creates an `.instance` of child class - [@dblock](https://github.com/dblock).
38
43
 
39
- #### 0.3.0 (7/4/2016)
44
+ #### 0.3.0 (2016/7/4)
40
45
 
41
46
  * Specify the server class via `SlackRubyBotServer.configure`, default is `SlackRubyBotServer::Server` - [@dblock](https://github.com/dblock).
42
47
  * Added service management lifecycle callbacks when a new team is registered, deactivated, etc - [@dblock](https://github.com/dblock).
43
48
 
44
- #### 0.2.0 (6/21/2016)
49
+ #### 0.2.0 (2016/6/21)
45
50
 
46
51
  * Relaxed dependency versions, notably enabling grape 0.16.2 and Swagger 0.21.0 that uses Swagger 2.0 spec - [@dblock](https://github.com/dblock).
47
52
  * [#21](https://github.com/slack-ruby/slack-ruby-bot-server/issues/21): Fix: pass additional options through into `SlackRubyBot::Server` - [@dblock](https://github.com/dblock).
48
53
 
49
- #### 0.1.1 (6/4/2016)
54
+ #### 0.1.1 (2016/6/4)
50
55
 
51
56
  * [#14](https://github.com/slack-ruby/slack-ruby-bot-server/pull/14): Moved config/initializers into the library - [@tmsrjs](https://github.com/tmsrjs).
52
57
 
53
- #### 0.1.0 (6/1/2016)
58
+ #### 0.1.0 (2016/6/1)
54
59
 
55
60
  * Initial public release - [@dblock](https://github.com/dblock).
56
61
  * Renamed slack-bot-server to slack-ruby-bot-server - [@dblock](https://github.com/dblock).
data/README.md CHANGED
@@ -13,7 +13,7 @@ A library that contains a [Grape](http://github.com/ruby-grape/grape) API servin
13
13
 
14
14
  ### Stable Release
15
15
 
16
- You're reading the documentation for the **stable** release of slack-ruby-bot-server, 0.7.0. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
16
+ You're reading the documentation for the **stable** release of slack-ruby-bot-server, v0.8.0. See [UPGRADING](UPGRADING.md) when upgrading from an older version.
17
17
 
18
18
  ### Try Me
19
19
 
@@ -1,6 +1,14 @@
1
1
  Upgrading Slack-Ruby-Bot-Server
2
2
  ===============================
3
3
 
4
+ ### Upgrading to >= 0.8.0
5
+
6
+ ### Different Asynchronous I/O Library
7
+
8
+ The library now uses [async-websocket](https://github.com/socketry/async-websocket) instead of [celluloid-io](https://github.com/celluloid/celluloid-io). If your application is built on Celluloid you may need to make changes and use `Async::Reactor.run` and the likes.
9
+
10
+ See [#75](https://github.com/slack-ruby/slack-ruby-bot-server/pull/75) for more information.
11
+
4
12
  ### Upgrading to >= 0.7.0
5
13
 
6
14
  #### New Ping Worker
@@ -1,4 +1,4 @@
1
- require 'celluloid/current'
1
+ require 'async/websocket'
2
2
 
3
3
  require 'grape-swagger'
4
4
  require 'slack-ruby-bot'
@@ -1,7 +1,7 @@
1
+ require 'active_support/core_ext/string/filters'
2
+
1
3
  module SlackRubyBotServer
2
4
  class Ping
3
- include Celluloid
4
-
5
5
  attr_reader :client
6
6
  attr_reader :options
7
7
  attr_reader :error_count
@@ -13,16 +13,29 @@ module SlackRubyBotServer
13
13
  end
14
14
 
15
15
  def start!
16
- every ping_interval do
17
- check!
16
+ ::Async::Reactor.run do |task|
17
+ run(task)
18
18
  end
19
19
  end
20
20
 
21
21
  private
22
22
 
23
+ def run(task)
24
+ logger.debug "PING: #{owner}, every #{ping_interval} second(s)"
25
+ loop do
26
+ task.sleep ping_interval
27
+ break unless check!
28
+ end
29
+ logger.debug "PING: #{owner}, done."
30
+ rescue StandardError => e
31
+ logger.error e
32
+ raise e
33
+ end
34
+
23
35
  def check!
24
36
  if online?
25
37
  @error_count = 0
38
+ true
26
39
  else
27
40
  down!
28
41
  end
@@ -30,9 +43,11 @@ module SlackRubyBotServer
30
43
  case e.message
31
44
  when 'account_inactive', 'invalid_auth' then
32
45
  logger.warn "Error pinging team #{owner.id}: #{e.message}, terminating."
33
- terminate
46
+ false
34
47
  else
35
- logger.warn "Error pinging team #{owner.id}: #{e.message}."
48
+ message = e.message.truncate(24, separator: "\n", omission: '...')
49
+ logger.warn "Error pinging team #{owner.id}: #{message}."
50
+ true
36
51
  end
37
52
  end
38
53
 
@@ -51,14 +66,22 @@ module SlackRubyBotServer
51
66
  def down!
52
67
  logger.warn "DOWN: #{owner}, #{retries_left} #{retries_left == 1 ? 'retry' : 'retries'} left"
53
68
  @error_count += 1
54
- return if retries_left?
69
+ return true if retries_left?
55
70
  restart!
71
+ false
56
72
  end
57
73
 
58
74
  def restart!
59
75
  logger.warn "RESTART: #{owner}"
60
- driver.emit(:close, WebSocket::Driver::CloseEvent.new(1001, 'bot offline')) if driver
61
- terminate
76
+ begin
77
+ connection.close
78
+ rescue Async::Wrapper::Cancelled
79
+ # ignore, from connection.close
80
+ end
81
+ driver.close
82
+ driver.emit(:close, WebSocket::Driver::CloseEvent.new(1001, 'bot offline'))
83
+ rescue StandardError => e
84
+ logger.warn "Error restarting team #{owner.id}: #{e.message}."
62
85
  end
63
86
 
64
87
  def ping_interval
@@ -85,6 +108,10 @@ module SlackRubyBotServer
85
108
  socket.instance_variable_get(:@driver) if socket
86
109
  end
87
110
 
111
+ def connection
112
+ driver.instance_variable_get(:@socket) if driver
113
+ end
114
+
88
115
  def logger
89
116
  @logger ||= begin
90
117
  STDOUT.sync = true
@@ -97,6 +97,7 @@ module SlackRubyBotServer
97
97
  logger.error "#{team.name}: #{e.message}, team will be deactivated."
98
98
  deactivate!(team)
99
99
  else
100
+ wait = e.retry_after if e.is_a?(Slack::Web::Api::Errors::TooManyRequestsError)
100
101
  logger.error "#{team.name}: #{e.message}, restarting in #{wait} second(s)."
101
102
  sleep(wait)
102
103
  start_server! team, server, [wait * 2, 60].min
@@ -1,3 +1,3 @@
1
1
  module SlackRubyBotServer
2
- VERSION = '0.7.0'.freeze
2
+ VERSION = '0.8.0'.freeze
3
3
  end
@@ -7,12 +7,6 @@ require 'yaml'
7
7
 
8
8
  ActiveRecord::Base.establish_connection(YAML.load_file('config/postgresql.yml')[ENV['RACK_ENV']])
9
9
 
10
- if ENV['RACK_ENV'] == 'development'
11
- puts 'Loading NewRelic in developer mode ...'
12
- require 'new_relic/rack/developer_mode'
13
- use NewRelic::Rack::DeveloperMode
14
- end
15
-
16
10
  NewRelic::Agent.manual_start
17
11
 
18
12
  SlackRubyBotServer::App.instance.prepare!
@@ -6,12 +6,6 @@ require_relative 'commands'
6
6
 
7
7
  Mongoid.load!(File.expand_path('config/mongoid.yml', __dir__), ENV['RACK_ENV'])
8
8
 
9
- if ENV['RACK_ENV'] == 'development'
10
- puts 'Loading NewRelic in developer mode ...'
11
- require 'new_relic/rack/developer_mode'
12
- use NewRelic::Rack::DeveloperMode
13
- end
14
-
15
9
  NewRelic::Agent.manual_start
16
10
 
17
11
  SlackRubyBotServer::App.instance.prepare!
@@ -14,7 +14,7 @@ Gem::Specification.new do |spec|
14
14
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(spec)/}) }
15
15
  spec.require_paths = ['lib']
16
16
 
17
- spec.add_dependency 'celluloid-io'
17
+ spec.add_dependency 'async-websocket'
18
18
  spec.add_dependency 'foreman'
19
19
  spec.add_dependency 'grape'
20
20
  spec.add_dependency 'grape-roar', '>= 0.4.0'
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-ruby-bot-server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.0
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Doubrovkine
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-08-22 00:00:00.000000000 Z
11
+ date: 2018-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: celluloid-io
14
+ name: async-websocket
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -295,7 +295,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
295
295
  version: '0'
296
296
  requirements: []
297
297
  rubyforge_project:
298
- rubygems_version: 2.6.12
298
+ rubygems_version: 2.6.14
299
299
  signing_key:
300
300
  specification_version: 4
301
301
  summary: A Grape API serving a Slack bot to multiple teams.