startback 0.11.4 → 0.11.5

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
  SHA256:
3
- metadata.gz: 929e1ab2d7ab916eadc828ecf2d1695c14c9a43d117198457e03c70c8b479ba4
4
- data.tar.gz: 2f3d212acd31e00b1910aca3c3c1154a5e8a130962aeb002c184c6a70da17ab2
3
+ metadata.gz: fa9e440ddba682a1c59c98a5635b0febafe08222e9cee2de68d3262c6da6d8d4
4
+ data.tar.gz: '09a4748015aa374687c4016341d7f6a699d80718da7f9b4a6449294d69cf7897'
5
5
  SHA512:
6
- metadata.gz: 90d448f505406727db9cd5c1db1d2fdb14b5df6ed546566ae9f3db4e573dbe43e43968f5885c9602c5ca198ceb8a7801aca769e499ef4d10acaaf2be318f779f
7
- data.tar.gz: 01b21d439cc5b7d1c8ff218620b7eec13a8496919c941863df25d8d01f4d2c6d11b727a6c4269015ef61d1d8063ebe1487909c3b238c84c06c5211eccc568423
6
+ metadata.gz: 6f832ba94f865dfd66c372fcf19623c68f43c76019623fd49da96e88fa2c7355bc78916ae98f3ae32de7e4deb0f08d9ade5d7eb2b3fa9f9bebb5544c0de698d4
7
+ data.tar.gz: 6ec4e88b7f2bc2ffd58d6e0cddb5bfffc5411149b71a97d1a51e7195105bd907568b45afec40f47916c17dbc45dfe81a5e6432781fa821dbdb2b1ba47f614c86
@@ -0,0 +1,8 @@
1
+ module Startback
2
+ class Event
3
+ class Agent
4
+ include Support::OperationRunner
5
+
6
+ end # class Agent
7
+ end # class Event
8
+ end # module Starback
@@ -0,0 +1,100 @@
1
+ require 'rack'
2
+ require 'webrick'
3
+ require 'startback'
4
+ module Startback
5
+ class Event
6
+ #
7
+ # This class runs an infinite loop using ServerEngine.
8
+ # It is intended to be used to run jobs that listen to
9
+ # a Startback Bus instance without having the main process
10
+ # terminating immediately.
11
+ #
12
+ # The Engine automatically runs a Webrick small webapp
13
+ # with a /healthcheck webservice. The class can be extended
14
+ # and method `on_health_check` overriden to run specific
15
+ # checks.
16
+ #
17
+ # This class goes hand in hand with the `startback:engine`
18
+ # docker image.
19
+ #
20
+ # Example:
21
+ #
22
+ # # Dockerfile
23
+ # FROM enspirit/startback:engine-0.11
24
+ #
25
+ # # engine.rb
26
+ # require 'startback/event/engine'
27
+ # Startback::Event::Engine.run
28
+ #
29
+ class Engine
30
+
31
+ DEFAULT_OPTIONS = {
32
+ daemonize: false,
33
+ worker_type: 'process',
34
+ workers: 1
35
+ }
36
+
37
+ def initialize
38
+ require 'serverengine'
39
+ end
40
+
41
+ def on_health_check
42
+ "Ok"
43
+ end
44
+
45
+ def run(options = {})
46
+ options = DEFAULT_OPTIONS.merge(options)
47
+ health = Engine.build_health_check(self)
48
+ worker = Engine.build_worker(health)
49
+ se = ServerEngine.create(nil, worker, options)
50
+ se.run
51
+ se
52
+ end
53
+
54
+ class << self
55
+ def run(*args, &bl)
56
+ new.run(*args, &bl)
57
+ end
58
+
59
+ def build_health_check(engine)
60
+ Rack::Builder.new do
61
+ map '/health-check' do
62
+ health = Startback::Web::HealthCheck.new {
63
+ engine.on_health_check
64
+ }
65
+ run(health)
66
+ end
67
+ end
68
+ end
69
+
70
+ def build_worker(health)
71
+ Module.new do
72
+ include Support::Env
73
+
74
+ def initialize
75
+ @stop_flag = ServerEngine::BlockingFlag.new
76
+ end
77
+
78
+ define_method(:health) do
79
+ health
80
+ end
81
+
82
+ def run
83
+ until @stop_flag.set?
84
+ Rack::Handler::WEBrick.run(health, {
85
+ :Port => env('STARTBACK_ENGINE_PORT', '3000').to_i,
86
+ :Host => env('STARTBACK_ENGINE_LISTEN', '0.0.0.0')
87
+ })
88
+ end
89
+ end
90
+
91
+ def stop
92
+ @stop_flag.set!
93
+ Rack::Handler::WEBrick.shutdown
94
+ end
95
+ end
96
+ end
97
+ end # class << self
98
+ end # class Engine
99
+ end # class Event
100
+ end # module Startback
@@ -41,3 +41,5 @@ module Startback
41
41
 
42
42
  end # class Event
43
43
  end # module Startback
44
+ require_relative 'event/agent'
45
+ require_relative 'event/engine'
@@ -0,0 +1,41 @@
1
+ module Startback
2
+ module Support
3
+ # This method provides the `env` and `env!` methods that
4
+ # help querying environment variables easily.
5
+ module Env
6
+
7
+ # Returns an environment variable or raise an error if
8
+ # not set.
9
+ #
10
+ # The result is always a String with no leading/trailing
11
+ # spaces.
12
+ #
13
+ # If a block is given, the environment variable is yield
14
+ # and the result of the block returned.
15
+ def env!(key, default = nil, &bl)
16
+ v = ENV[key].to_s.strip
17
+ raise Startback::Error, "Missing ENV var `#{key}`" if v.empty?
18
+
19
+ env(key, default, &bl)
20
+ end
21
+ module_function :env!
22
+
23
+ # Returns an environment variable or the default value
24
+ # passed as second argument.
25
+ #
26
+ # The result is always a String with no leading/trailing
27
+ # spaces.
28
+ #
29
+ # If a block is given, the environment variable is yield
30
+ # and the result of the block returned.
31
+ def env(key, default = nil, &bl)
32
+ v = ENV[key].to_s.strip
33
+ v = v.empty? ? default : v
34
+ v = bl.call(v) if bl && v
35
+ v
36
+ end
37
+ module_function :env
38
+
39
+ end # module Env
40
+ end # module Support
41
+ end # module Startback
@@ -43,7 +43,7 @@ module Startback
43
43
  @@default_logger ||= begin
44
44
  l = ::Logger.new(STDOUT)
45
45
  l.formatter = LogFormatter.new
46
- l.warn(op: "#{self}", op_data: { msg: "Using default logger", trace: caller })
46
+ l.warn(op: "#{self}", op_data: { msg: "Using default logger to STDOUT" })
47
47
  @@default_logger = l
48
48
  end
49
49
  @@default_logger
@@ -14,6 +14,7 @@ module Startback
14
14
 
15
15
  end # module Support
16
16
  end # module Startback
17
+ require_relative 'support/env'
17
18
  require_relative 'support/log_formatter'
18
19
  require_relative 'support/logger'
19
20
  require_relative 'support/robustness'
@@ -2,7 +2,7 @@ module Startback
2
2
  module Version
3
3
  MAJOR = 0
4
4
  MINOR = 11
5
- TINY = 4
5
+ TINY = 5
6
6
  end
7
7
  VERSION = "#{Version::MAJOR}.#{Version::MINOR}.#{Version::TINY}"
8
8
  end
@@ -0,0 +1,75 @@
1
+ require 'spec_helper'
2
+ module Startback
3
+ module Support
4
+ describe Env do
5
+ include Env
6
+
7
+ before do
8
+ ENV['FOO'] = 'BAR'
9
+ ENV['FOOL'] = ''
10
+ ENV['FOOLISH'] = ' BAR '
11
+ end
12
+
13
+ after do
14
+ ENV.delete('FOO')
15
+ ENV.delete('FOOL')
16
+ end
17
+
18
+ describe "env" do
19
+ it 'returns an env variable' do
20
+ expect(env('FOO')).to eql('BAR')
21
+ end
22
+
23
+ it 'returns nil otherwise' do
24
+ expect(env('BAR')).to be_nil
25
+ end
26
+
27
+ it 'strips the value' do
28
+ expect(env('FOOLISH')).to eql('BAR')
29
+ end
30
+
31
+ it 'yields the block if any' do
32
+ expect(env('FOO'){|x| x.downcase }).to eql('bar')
33
+ end
34
+
35
+ it 'support a default value' do
36
+ expect(env('BAR', 'BAZ')).to eql('BAZ')
37
+ end
38
+
39
+ it 'yields the block with the default if any' do
40
+ expect(env('BAR', 'BAZ'){|x| x.downcase }).to eql('baz')
41
+ end
42
+
43
+ it 'returns nil when empty' do
44
+ expect(env('FOOL')).to be_nil
45
+ end
46
+
47
+ it 'yields the block with the default if empty' do
48
+ expect(env('FOOL', 'BAZ'){|x| x.downcase }).to eql('baz')
49
+ end
50
+ end
51
+
52
+ describe "env!" do
53
+ it 'returns an env variable' do
54
+ expect(env!('FOO')).to eql('BAR')
55
+ end
56
+
57
+ it 'strips the value' do
58
+ expect(env!('FOOLISH')).to eql('BAR')
59
+ end
60
+
61
+ it 'raise otherwise' do
62
+ expect{ env!('BAR') }.to raise_error(Startback::Errors::Error, /BAR/)
63
+ end
64
+
65
+ it 'raise on empty' do
66
+ expect{ env!('FOOL') }.to raise_error(Startback::Errors::Error, /FOOL/)
67
+ end
68
+
69
+ it 'yields the block if any' do
70
+ expect(env('FOO'){|x| x.downcase }).to eql('bar')
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: startback
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.4
4
+ version: 0.11.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bernard Lambeau
@@ -398,6 +398,8 @@ files:
398
398
  - lib/startback/context/middleware.rb
399
399
  - lib/startback/errors.rb
400
400
  - lib/startback/event.rb
401
+ - lib/startback/event/agent.rb
402
+ - lib/startback/event/engine.rb
401
403
  - lib/startback/ext.rb
402
404
  - lib/startback/ext/date_time.rb
403
405
  - lib/startback/ext/time.rb
@@ -405,6 +407,7 @@ files:
405
407
  - lib/startback/operation/error_operation.rb
406
408
  - lib/startback/operation/multi_operation.rb
407
409
  - lib/startback/support.rb
410
+ - lib/startback/support/env.rb
408
411
  - lib/startback/support/fake_logger.rb
409
412
  - lib/startback/support/hooks.rb
410
413
  - lib/startback/support/log_formatter.rb
@@ -439,6 +442,7 @@ files:
439
442
  - spec/unit/support/hooks/test_before_hook.rb
440
443
  - spec/unit/support/operation_runner/test_around_run.rb
441
444
  - spec/unit/support/operation_runner/test_before_after_call.rb
445
+ - spec/unit/support/test_env.rb
442
446
  - spec/unit/support/test_robusteness.rb
443
447
  - spec/unit/support/test_transaction_manager.rb
444
448
  - spec/unit/test_event.rb