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 +4 -4
- data/.rubocop_todo.yml +6 -1
- data/CHANGELOG.md +15 -10
- data/README.md +1 -1
- data/UPGRADING.md +8 -0
- data/lib/slack-ruby-bot-server.rb +1 -1
- data/lib/slack-ruby-bot-server/ping.rb +36 -9
- data/lib/slack-ruby-bot-server/service.rb +1 -0
- data/lib/slack-ruby-bot-server/version.rb +1 -1
- data/sample_apps/sample_app_activerecord/config.ru +0 -6
- data/sample_apps/sample_app_mongoid/config.ru +0 -6
- data/slack-ruby-bot-server.gemspec +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c2baab12040f4100e3fb8ece5469b8b4ed6616f2
|
4
|
+
data.tar.gz: 45d3c6c0c456033a0a1c799ab71c298b3b7d72b6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fced549dc1ec1f687223b076c6c73d50e5d14fd1976dcf007f392beb8b9e7f0b2c0519d011acbd1d20db7a86e3cee58b3974f0f444c1013d5edb10e8501f593e
|
7
|
+
data.tar.gz: 383451e38ac282f35ee977179a2e20a1df09ba40664cb2c38dd1a28d5fa1cc28bbf31de19c0bdfe2682df4d7f003d788983927f5973d0fbcc8356add93475f2a
|
data/.rubocop_todo.yml
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# This configuration was generated by
|
2
2
|
# `rubocop --auto-gen-config`
|
3
|
-
# on 2018-08
|
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|$))
|
data/CHANGELOG.md
CHANGED
@@ -1,56 +1,61 @@
|
|
1
1
|
### Changelog
|
2
2
|
|
3
|
-
#### 0.
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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,
|
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
|
|
data/UPGRADING.md
CHANGED
@@ -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,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
|
-
|
17
|
-
|
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
|
-
|
46
|
+
false
|
34
47
|
else
|
35
|
-
|
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
|
-
|
61
|
-
|
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
|
@@ -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 '
|
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.
|
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
|
11
|
+
date: 2018-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
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.
|
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.
|