startback 0.13.0 → 0.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/startback/event/engine.rb +17 -99
- data/lib/startback/version.rb +1 -1
- data/tasks/test.rake +1 -24
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d5d880b8e9dfdeecdd68e78400468a2765dffbcf39866860daef9ac86a8096d
|
4
|
+
data.tar.gz: 6bf01ece248ca741ed4a590ab5458c8f94bda465c315951cfb0797fa49ae4fe9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f21d629f5733aea63bdfd21199aae51208d16751e398a373cef0a72cf4fcbceb083046c7f1ec61f9ed4791c2e4621a787229f438622a35a28a9ca2591ec5f90
|
7
|
+
data.tar.gz: c77c9f93fc437a8c803782d226bd6f9c30497f1eb238a6244526262fd5c24e148b322d01d46ed8bd81d907b9851a9789e1774abaec5dccd63fefc8a0da50eeb1
|
@@ -1,18 +1,14 @@
|
|
1
1
|
require 'rack'
|
2
|
-
require 'webrick'
|
3
2
|
require 'startback'
|
4
3
|
module Startback
|
5
4
|
class Event
|
6
5
|
#
|
7
6
|
# This class is the starting point of event handling in
|
8
7
|
# Startback. It holds a Bus instance to which emitters
|
9
|
-
# and listeners can connect
|
10
|
-
# the listening part to start an infinite loop (ServerEngine).
|
8
|
+
# and listeners can connect.
|
11
9
|
#
|
12
|
-
# The Engine
|
13
|
-
#
|
14
|
-
# and method `on_health_check` overriden to run specific
|
15
|
-
# checks.
|
10
|
+
# The Engine exposes a rack app (.rack_app) with a /healthcheck webservice.
|
11
|
+
# It is supposed to be mounted to a webserver such as puma.
|
16
12
|
#
|
17
13
|
# This class goes hand in hand with the `startback:engine`
|
18
14
|
# docker image. It can be extended by subclasses to override
|
@@ -22,15 +18,13 @@ module Startback
|
|
22
18
|
# - on_health_check to check specific health conditions
|
23
19
|
# - create_agents to instantiate all listening agents
|
24
20
|
# (unless auto_create_agents is used)
|
21
|
+
# - rack_app if you want to customize the API running
|
25
22
|
#
|
26
23
|
class Engine
|
27
24
|
include Support::Robustness
|
28
25
|
|
29
26
|
DEFAULT_OPTIONS = {
|
30
27
|
|
31
|
-
# To be passed to ServerEngine
|
32
|
-
server_engine: {}
|
33
|
-
|
34
28
|
}
|
35
29
|
|
36
30
|
def initialize(options = {}, context = Context.new)
|
@@ -60,7 +54,7 @@ module Startback
|
|
60
54
|
end
|
61
55
|
|
62
56
|
def bus
|
63
|
-
::Startback::Event::Bus.new
|
57
|
+
@bus ||= ::Startback::Event::Bus.new
|
64
58
|
end
|
65
59
|
|
66
60
|
def connect
|
@@ -68,20 +62,12 @@ module Startback
|
|
68
62
|
bus.connect
|
69
63
|
end
|
70
64
|
|
71
|
-
def run(options = {})
|
72
|
-
connect
|
73
|
-
|
74
|
-
log(:info, self, "Running agents and server engine!")
|
75
|
-
create_agents
|
76
|
-
Runner.new(self, options[:server_engine] || {}).run
|
77
|
-
end
|
78
|
-
|
79
65
|
def create_agents
|
80
66
|
return unless parent = self.class.auto_create_agents
|
81
67
|
|
82
68
|
ObjectSpace
|
83
69
|
.each_object(Class)
|
84
|
-
.select { |klass| klass
|
70
|
+
.select { |klass| klass <= parent }
|
85
71
|
.each { |klass| klass.new(self) }
|
86
72
|
end
|
87
73
|
|
@@ -89,88 +75,20 @@ module Startback
|
|
89
75
|
Event.json(event_data, context)
|
90
76
|
end
|
91
77
|
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
worker_type: 'process',
|
97
|
-
workers: 1
|
98
|
-
}
|
99
|
-
|
100
|
-
def initialize(engine, options = {})
|
101
|
-
raise ArgumentError if engine.nil?
|
102
|
-
|
103
|
-
@engine = engine
|
104
|
-
@options = DEFAULT_SERVER_ENGINE_OPTIONS.merge(options)
|
105
|
-
require 'serverengine'
|
106
|
-
end
|
107
|
-
attr_reader :engine, :options
|
108
|
-
|
109
|
-
def run(options = {})
|
110
|
-
health = self.class.build_health_check(engine)
|
111
|
-
worker = self.class.build_worker(engine, health)
|
112
|
-
se = ServerEngine.create(nil, worker, options)
|
113
|
-
se.run
|
114
|
-
se
|
115
|
-
end
|
116
|
-
|
117
|
-
class << self
|
118
|
-
def run(*args, &bl)
|
119
|
-
new.run(*args, &bl)
|
120
|
-
end
|
78
|
+
def rack_app
|
79
|
+
engine = self
|
80
|
+
Rack::Builder.new do
|
81
|
+
use Startback::Web::CatchAll
|
121
82
|
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
}
|
128
|
-
run(health)
|
129
|
-
end
|
130
|
-
end
|
83
|
+
map '/health-check' do
|
84
|
+
health = Startback::Web::HealthCheck.new {
|
85
|
+
engine.on_health_check
|
86
|
+
}
|
87
|
+
run(health)
|
131
88
|
end
|
89
|
+
end
|
90
|
+
end
|
132
91
|
|
133
|
-
def build_worker(engine, health)
|
134
|
-
Module.new do
|
135
|
-
include Support::Env
|
136
|
-
|
137
|
-
def initialize
|
138
|
-
@stop_flag = ServerEngine::BlockingFlag.new
|
139
|
-
end
|
140
|
-
|
141
|
-
define_method(:health) do
|
142
|
-
health
|
143
|
-
end
|
144
|
-
|
145
|
-
define_method(:engine) do
|
146
|
-
engine
|
147
|
-
end
|
148
|
-
|
149
|
-
def run
|
150
|
-
ran = false
|
151
|
-
until @stop_flag.set?
|
152
|
-
if ran
|
153
|
-
engine.send(:log, :warn, engine, "Restarting internal loop")
|
154
|
-
else
|
155
|
-
engine.send(:log, :info, engine, "Starting internal loop")
|
156
|
-
end
|
157
|
-
Rack::Handler::WEBrick.run(health, {
|
158
|
-
:Port => env('STARTBACK_ENGINE_PORT', '3000').to_i,
|
159
|
-
:Host => env('STARTBACK_ENGINE_LISTEN', '0.0.0.0')
|
160
|
-
})
|
161
|
-
ran = true
|
162
|
-
end
|
163
|
-
end
|
164
|
-
|
165
|
-
def stop
|
166
|
-
engine.send(:log, :info, engine, "Stopping internal loop")
|
167
|
-
@stop_flag.set!
|
168
|
-
Rack::Handler::WEBrick.shutdown
|
169
|
-
end
|
170
|
-
end
|
171
|
-
end
|
172
|
-
end # class << self
|
173
|
-
end # class Runner
|
174
92
|
end # class Engine
|
175
93
|
end # class Event
|
176
94
|
end # module Startback
|
data/lib/startback/version.rb
CHANGED
data/tasks/test.rake
CHANGED
@@ -9,29 +9,6 @@ namespace :test do
|
|
9
9
|
t.rspec_opts = %{-Ilib -Ispec --color --backtrace --format progress --format RspecJunitFormatter --out spec/rspec-unit.xml}
|
10
10
|
end
|
11
11
|
|
12
|
-
|
13
|
-
task :example do
|
14
|
-
Bundler.with_original_env do
|
15
|
-
system("cd example && bundle exec rake")
|
16
|
-
abort("Example tests failed") unless $?.exitstatus == 0
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
contribs = (Path.dir.parent/"contrib").glob("*").map do |sub|
|
21
|
-
next unless sub.directory?
|
22
|
-
name = sub.basename.to_sym
|
23
|
-
|
24
|
-
desc "Run tests for #{sub}"
|
25
|
-
task name do
|
26
|
-
Bundler.with_original_env do
|
27
|
-
system("cd #{sub} && bundle exec rake")
|
28
|
-
abort("#{sub} tests failed") unless $?.exitstatus == 0
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
name
|
33
|
-
end
|
34
|
-
|
35
|
-
task :all => [:unit, :example] + contribs
|
12
|
+
task :all => [:unit]
|
36
13
|
end
|
37
14
|
task :test => :'test:all'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: startback
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.14.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bernard Lambeau
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -470,7 +470,7 @@ files:
|
|
470
470
|
- spec/unit/web/test_healthcheck.rb
|
471
471
|
- spec/unit/web/test_magic_assets.rb
|
472
472
|
- tasks/test.rake
|
473
|
-
homepage:
|
473
|
+
homepage: https://www.enspirit.be
|
474
474
|
licenses:
|
475
475
|
- MIT
|
476
476
|
metadata: {}
|
@@ -489,7 +489,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
489
489
|
- !ruby/object:Gem::Version
|
490
490
|
version: '0'
|
491
491
|
requirements: []
|
492
|
-
rubygems_version: 3.
|
492
|
+
rubygems_version: 3.1.2
|
493
493
|
signing_key:
|
494
494
|
specification_version: 4
|
495
495
|
summary: Got Your Ruby Back
|