hanami-events-cloud_pubsub 0.1.0 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +0 -8
- data/Gemfile.lock +4 -2
- data/hanami-events-cloud_pubsub.gemspec +2 -4
- data/lib/hanami/events/cloud_pubsub/cli.rb +44 -14
- data/lib/hanami/events/cloud_pubsub/listener.rb +5 -1
- data/lib/hanami/events/cloud_pubsub/runner.rb +17 -4
- data/lib/hanami/events/cloud_pubsub/thread_inspector.rb +58 -0
- data/lib/hanami/events/cloud_pubsub/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a2113da2784c067da73a9d9c37990f8c2406bd1e0ff6c25ab17576f786863ef9
|
|
4
|
+
data.tar.gz: b2bb4eb5f8e5b8ca1e8dcac4c150b210d2e108e075dbd6d7abb419afab452516
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c51521fa3b75dd6bbbc7e79c227d1ea53f3cd5623eb874b28972fc713b656baacd2fda7f34fce2b515ced410a5d4f1e1ae69df47bfae476557dcc0956548c5c5
|
|
7
|
+
data.tar.gz: 320daaad0c019fcb38e07c993e7bd8c71804d51ce0ee27767627b6a1c1cb97eef78cc4b99724e57ccb222d0cce9c1d7ab93838e03605a06e6d0b917d620d562d
|
data/.travis.yml
CHANGED
|
@@ -4,18 +4,10 @@ cache: bundler
|
|
|
4
4
|
services:
|
|
5
5
|
- docker
|
|
6
6
|
language: ruby
|
|
7
|
-
env:
|
|
8
|
-
- DOCKER_COMPOSE_VERSION=1.21.2
|
|
9
7
|
rvm:
|
|
10
8
|
- 2.4
|
|
11
9
|
before_install:
|
|
12
10
|
- gem install bundler -v 1.16.1
|
|
13
|
-
- sudo rm /usr/local/bin/docker-compose
|
|
14
|
-
- curl -L https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION}/docker-compose-`uname
|
|
15
|
-
-s`-`uname -m` > docker-compose
|
|
16
|
-
- chmod +x docker-compose
|
|
17
|
-
- sudo mv docker-compose /usr/local/bin
|
|
18
|
-
- docker-compose up -d
|
|
19
11
|
after_failure:
|
|
20
12
|
- cat log/test.log
|
|
21
13
|
deploy:
|
data/Gemfile.lock
CHANGED
|
@@ -9,7 +9,7 @@ GIT
|
|
|
9
9
|
PATH
|
|
10
10
|
remote: .
|
|
11
11
|
specs:
|
|
12
|
-
hanami-events-cloud_pubsub (0.1.
|
|
12
|
+
hanami-events-cloud_pubsub (0.1.5)
|
|
13
13
|
google-cloud-pubsub (~> 0.30.2)
|
|
14
14
|
hanami-cli
|
|
15
15
|
hanami-events
|
|
@@ -73,6 +73,7 @@ GEM
|
|
|
73
73
|
hanami-utils (1.2.0)
|
|
74
74
|
concurrent-ruby (~> 1.0)
|
|
75
75
|
transproc (~> 1.0)
|
|
76
|
+
jaro_winkler (1.4.0)
|
|
76
77
|
jwt (2.1.0)
|
|
77
78
|
little-plugger (1.1.4)
|
|
78
79
|
logging (2.2.2)
|
|
@@ -107,7 +108,8 @@ GEM
|
|
|
107
108
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
108
109
|
rspec-support (~> 3.7.0)
|
|
109
110
|
rspec-support (3.7.1)
|
|
110
|
-
rubocop (0.
|
|
111
|
+
rubocop (0.57.0)
|
|
112
|
+
jaro_winkler (~> 1.4.0)
|
|
111
113
|
parallel (~> 1.10)
|
|
112
114
|
parser (>= 2.5)
|
|
113
115
|
powerpack (~> 0.1)
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
# frozen_string_literal: true
|
|
3
2
|
|
|
4
3
|
lib = File.expand_path('lib', __dir__)
|
|
@@ -24,9 +23,8 @@ Gem::Specification.new do |spec|
|
|
|
24
23
|
spec.require_paths = ['lib']
|
|
25
24
|
|
|
26
25
|
spec.add_dependency 'google-cloud-pubsub', '~> 0.30.2'
|
|
27
|
-
|
|
28
|
-
spec.
|
|
29
|
-
spec.add_runtime_dependency 'hanami-events'
|
|
26
|
+
spec.add_dependency 'hanami-cli'
|
|
27
|
+
spec.add_dependency 'hanami-events'
|
|
30
28
|
|
|
31
29
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
|
32
30
|
spec.add_development_dependency 'rake', '~> 12.3'
|
|
@@ -24,21 +24,50 @@ module Hanami
|
|
|
24
24
|
desc: 'Config file which is loaded before starting the runner'
|
|
25
25
|
|
|
26
26
|
def call(opts)
|
|
27
|
-
|
|
27
|
+
setup_env(opts)
|
|
28
28
|
parse_opts(opts)
|
|
29
|
-
setup_signal_handlers
|
|
30
29
|
build_runner
|
|
30
|
+
setup_signal_handlers
|
|
31
31
|
load_config
|
|
32
32
|
start_runner
|
|
33
33
|
sleep_forever
|
|
34
|
-
rescue Interrupt
|
|
35
|
-
shutdown
|
|
36
34
|
end
|
|
37
35
|
|
|
38
36
|
private
|
|
39
37
|
|
|
38
|
+
def setup_env(opts)
|
|
39
|
+
ENV['PUBSUB_EMULATOR_HOST'] ||= 'localhost:8085' if opts[:emulator]
|
|
40
|
+
try_load_environment
|
|
41
|
+
resolve_components
|
|
42
|
+
CloudPubsub.setup
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def try_load_environment
|
|
46
|
+
boot_file = Bundler.default_gemfile.parent.join('config', 'environment.rb')
|
|
47
|
+
load boot_file.to_s
|
|
48
|
+
rescue LoadError
|
|
49
|
+
logger.warn <<~MSG
|
|
50
|
+
Could not load config/environment.rb, assuming we are not in a Hanami project
|
|
51
|
+
MSG
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def resolve_components
|
|
55
|
+
return unless defined?(Hanami::Components)
|
|
56
|
+
Hanami::Components.resolve('logger')
|
|
57
|
+
end
|
|
58
|
+
|
|
40
59
|
def sleep_forever
|
|
60
|
+
thread = Thread.new do
|
|
61
|
+
loop do
|
|
62
|
+
event = @queue.pop
|
|
63
|
+
event.call
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
41
67
|
sleep
|
|
68
|
+
rescue Interrupt
|
|
69
|
+
thread.kill
|
|
70
|
+
shutdown
|
|
42
71
|
end
|
|
43
72
|
|
|
44
73
|
def load_config
|
|
@@ -52,7 +81,7 @@ module Hanami
|
|
|
52
81
|
|
|
53
82
|
def parse_opts(opts)
|
|
54
83
|
@emulator = opts[:emulator]
|
|
55
|
-
logger.info 'Running
|
|
84
|
+
logger.info 'Running in emulator mode' if @emulator
|
|
56
85
|
@config = opts[:config]
|
|
57
86
|
logger.debug "Using config file: #{@config}"
|
|
58
87
|
end
|
|
@@ -60,7 +89,6 @@ module Hanami
|
|
|
60
89
|
def build_runner
|
|
61
90
|
pubsub_opts = {}
|
|
62
91
|
|
|
63
|
-
ENV['PUBSUB_EMULATOR_HOST'] ||= 'localhost:8085' if @emulator
|
|
64
92
|
pubsub_opts[:project_id] = 'emulator' if @emulator
|
|
65
93
|
|
|
66
94
|
pubsub = Google::Cloud::Pubsub.new pubsub_opts
|
|
@@ -72,24 +100,26 @@ module Hanami
|
|
|
72
100
|
end
|
|
73
101
|
|
|
74
102
|
def logger
|
|
75
|
-
if defined?(Hanami.logger)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
103
|
+
@logger ||= if defined?(Hanami.logger)
|
|
104
|
+
Hanami.logger
|
|
105
|
+
else
|
|
106
|
+
Logger.new(STDOUT)
|
|
107
|
+
end
|
|
80
108
|
end
|
|
81
109
|
|
|
82
110
|
def setup_signal_handlers
|
|
111
|
+
@queue = Queue.new
|
|
112
|
+
|
|
83
113
|
Signal.trap('TSTP') do
|
|
84
|
-
|
|
114
|
+
@queue << proc { @runner.pause }
|
|
85
115
|
end
|
|
86
116
|
|
|
87
117
|
Signal.trap('CONT') do
|
|
88
|
-
|
|
118
|
+
@queue << proc { @runner.start }
|
|
89
119
|
end
|
|
90
120
|
|
|
91
121
|
Signal.trap('TTIN') do
|
|
92
|
-
|
|
122
|
+
@queue << proc { @runner.print_debug_info }
|
|
93
123
|
end
|
|
94
124
|
end
|
|
95
125
|
|
|
@@ -39,6 +39,10 @@ module Hanami
|
|
|
39
39
|
@subscriber.start
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
+
def started?
|
|
43
|
+
@subscriber&.started?
|
|
44
|
+
end
|
|
45
|
+
|
|
42
46
|
def shutdown
|
|
43
47
|
subscriber.stop.wait!
|
|
44
48
|
self
|
|
@@ -95,7 +99,7 @@ module Hanami
|
|
|
95
99
|
end
|
|
96
100
|
|
|
97
101
|
def ensure_subscriber!
|
|
98
|
-
raise NoSubscriberError, 'No subsriber has been
|
|
102
|
+
raise NoSubscriberError, 'No subsriber has been registered' unless @subscriber
|
|
99
103
|
end
|
|
100
104
|
end
|
|
101
105
|
end
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require 'hanami/events/cloud_pubsub/thread_inspector'
|
|
4
|
+
|
|
3
5
|
module Hanami
|
|
4
6
|
module Events
|
|
5
7
|
module CloudPubsub
|
|
@@ -81,12 +83,23 @@ module Hanami
|
|
|
81
83
|
# some reason.
|
|
82
84
|
#
|
|
83
85
|
# See: https://github.com/mperham/sidekiq/blob/e447dae961ebc894f12848d9f33446a07ffc67dc/bin/sidekiqload#L74
|
|
86
|
+
# rubocop:disable Metrics/AbcSize
|
|
84
87
|
def print_debug_info(stream = STDOUT)
|
|
85
|
-
stream.puts
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
88
|
+
stream.puts <<~MSG
|
|
89
|
+
╔══════ BACKTRACES
|
|
90
|
+
#{Thread.list.flat_map { |thr| ThreadInspector.new(thr).to_s }.join("\n")}
|
|
91
|
+
╠══════ LISTENERS
|
|
92
|
+
#{adapter.listeners.map { |lis| '║ ' + lis.format }.join("\n")}
|
|
93
|
+
║
|
|
94
|
+
╠══════ GENERAL
|
|
95
|
+
║ ready?: #{ready?}
|
|
96
|
+
║ healthy?: #{healthy?}
|
|
97
|
+
║ threads: #{Thread.list.count}
|
|
98
|
+
║ threads running: #{Thread.list.select { |thread| thread.status == 'run' }.count}
|
|
99
|
+
╚══════
|
|
100
|
+
MSG
|
|
89
101
|
end
|
|
102
|
+
# rubocop:enable Metrics/AbcSize
|
|
90
103
|
|
|
91
104
|
def sleep_for_a_bit
|
|
92
105
|
sleep @sleep_time
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Hanami
|
|
4
|
+
module Events
|
|
5
|
+
module CloudPubsub
|
|
6
|
+
# Generate prettier backtraces for inspection
|
|
7
|
+
class ThreadInspector
|
|
8
|
+
attr_reader :backtrace, :thread
|
|
9
|
+
|
|
10
|
+
def initialize(thread)
|
|
11
|
+
@thread = thread
|
|
12
|
+
@backtrace = thread.backtrace
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def to_s
|
|
16
|
+
"║ #{thread.inspect}\n" + pretty_backtrace
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def inspect
|
|
20
|
+
thread.inspect
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
private
|
|
24
|
+
|
|
25
|
+
def pretty_backtrace
|
|
26
|
+
pretty_backtrace = backtrace.map do |call|
|
|
27
|
+
parts = call.match(/^(?<file>.+):(?<line>\d+):in `(?<code>.*)'$/)
|
|
28
|
+
|
|
29
|
+
if parts
|
|
30
|
+
file = parts[:file].sub(/^#{Regexp.escape(File.join(Dir.getwd, ''))}/, '')
|
|
31
|
+
pretty_line(file, parts)
|
|
32
|
+
else
|
|
33
|
+
colorize(call, 31)
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
join_backtrace(pretty_backtrace)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def colorize(text, color_code)
|
|
41
|
+
"\e[#{color_code}m#{text}\e[0m"
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def pretty_line(file, parts)
|
|
45
|
+
"#{colorize(file, 36)} #{colorize('(', 37)}" \
|
|
46
|
+
"#{colorize(parts[:line], 32)}#{colorize('): ', 37)} " \
|
|
47
|
+
"#{colorize(parts[:code], 31)}"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def join_backtrace(pretty_backtrace)
|
|
51
|
+
pretty_backtrace.map! { |line| "║\t" + line }
|
|
52
|
+
pretty_backtrace << '║'
|
|
53
|
+
pretty_backtrace.join("\n")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: hanami-events-cloud_pubsub
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1.
|
|
4
|
+
version: 0.1.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Ian Ker-Seymer
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2018-06-
|
|
11
|
+
date: 2018-06-06 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: google-cloud-pubsub
|
|
@@ -127,6 +127,7 @@ files:
|
|
|
127
127
|
- lib/hanami/events/cloud_pubsub/listener.rb
|
|
128
128
|
- lib/hanami/events/cloud_pubsub/mixin.rb
|
|
129
129
|
- lib/hanami/events/cloud_pubsub/runner.rb
|
|
130
|
+
- lib/hanami/events/cloud_pubsub/thread_inspector.rb
|
|
130
131
|
- lib/hanami/events/cloud_pubsub/version.rb
|
|
131
132
|
- log/.keep
|
|
132
133
|
homepage: https://github.com/adHawk/hanami-events-cloud_pubsub
|