jackal 0.2.4 → 0.3.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: 21788721bbd42cb37b1a3a32431de360a07d8722
4
- data.tar.gz: be2baadcafd0eb1d9dd2483b7ca2d4b1e223c869
3
+ metadata.gz: 87d40ed9a2151a4e456b7a80a817e81856b471b5
4
+ data.tar.gz: cfda4c42c5e359630c8d296c1f8be8f4fbb1956a
5
5
  SHA512:
6
- metadata.gz: bd4b0bd8c69a72d965a1a2632dfdad6774bbadb42303b1bb8c86ffb5e0fa864edaed11a8e15901f512ad69e2973d309229fddfd9817df649f1901789aa429a51
7
- data.tar.gz: 40ea38a0fc50d7723fbcc1ff3100d4fa66fde87340c83bd24652dbeff350cb517f0e565d11b6c11e86e8579ff1714c00271f1964efbe56e82c139a7c2bfd8600
6
+ metadata.gz: d3b2963e4f7f5ee5078665980843904fd17afd1edd04b1ff1865e6bbfa109826fb688f1a68645d0f11e8465c549337cd7450de81f578070ccd2e0477c021645b
7
+ data.tar.gz: d2dc8f35b125bdf42beb18a30786d9396adcf5e67d1b17e7a059fa50a19310c8353c51555f1c30c639e7b6455e4b3f188262ff2f3b0dd27812683b55045ebb2d
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ # v0.3.0
2
+ * Force source looping on `Callback#completed`
3
+ * Move HTTP hook configuration within jackal namespace
4
+ * Add support for using `spawn` on a per-process basis
5
+ * Link owner callback into formatters
6
+
1
7
  # v0.2.4
2
8
  * Fix nesting for orphan callback setup
3
9
  * Add constant and memoization helpers into `Callback`
@@ -1,4 +1,5 @@
1
1
  require 'jackal'
2
+ require 'pp'
2
3
 
3
4
  module Jackal
4
5
  # Jackal customized callback
@@ -22,7 +23,7 @@ module Jackal
22
23
  super
23
24
  if(service_config[:formatters])
24
25
  @formatters = service_config[:formatters].map do |klass_name|
25
- constantize(klass_name).new
26
+ constantize(klass_name).new(self)
26
27
  end
27
28
  end
28
29
  end
@@ -40,7 +41,7 @@ module Jackal
40
41
  # @return [Utils::Process]
41
42
  def process_manager
42
43
  memoize(:process_manager) do
43
- Utils::Process.new
44
+ Utils::Process.new(app_config.fetch(:process_manager, Smash.new))
44
45
  end
45
46
  end
46
47
 
@@ -77,13 +78,13 @@ module Jackal
77
78
  def failed(payload, message, reason='No reason provided')
78
79
  error "Processing of #{message} failed! Reason: #{reason}"
79
80
  message.confirm!
80
- destination = "#{source_prefix}_error"
81
- source = Carnivore::Supervisor.supervisor[destination]
81
+ dest = destination(:error, payload)
82
+ source = Carnivore::Supervisor.supervisor[dest]
82
83
  if(source)
83
84
  error "Sending #{message} to error handler: #{source}"
84
85
  source.transmit(payload)
85
86
  else
86
- error "No error source found for generated source path: #{destination}"
87
+ error "No error source found for generated source path: #{dest}"
87
88
  info "Processing of message #{message} has completed. Message now discarded."
88
89
  end
89
90
  end
@@ -95,21 +96,23 @@ module Jackal
95
96
  def completed(payload, message)
96
97
  message.confirm!
97
98
  info "Processing of #{message} complete on this callback"
98
- forward(payload)
99
+ forward(payload, source.name)
99
100
  end
100
101
 
101
102
  # Forward payload to output source
102
103
  #
103
104
  # @param payload [Hash]
104
- def forward(payload)
105
- destination = "#{source_prefix}_output"
106
- source = Carnivore::Supervisor.supervisor[destination]
105
+ def forward(payload, dest=nil)
106
+ unless(dest)
107
+ dest = destination(:output, payload)
108
+ end
109
+ source = Carnivore::Supervisor.supervisor[dest]
107
110
  if(source)
108
111
  info "Forwarding payload to output destination... (#{source})"
109
- debug "Forwarded payload: #{payload.inspect}"
112
+ debug "Forwarded payload: #{payload.pretty_inspect}"
110
113
  source.transmit(payload)
111
114
  else
112
- warn "No destination source found for generated source path: #{destination}"
115
+ warn "No destination source found for generated source path: #{dest}"
113
116
  info "Processing of message has completed. Message now discarded."
114
117
  end
115
118
  end
data/lib/jackal/loader.rb CHANGED
@@ -10,8 +10,12 @@ module Jackal
10
10
  # @param opts [Hash]
11
11
  def run!(opts)
12
12
 
13
- if(ENV['JACKAL_TESTING_MODE'] && !opts[:config])
14
- Carnivore.configure!(:verify)
13
+ if(ENV['JACKAL_TESTING_MODE'])
14
+ if(!opts[:config])
15
+ Carnivore.configure!(:verify)
16
+ else
17
+ Carnivore.configure!(opts[:config], :force)
18
+ end
15
19
  else
16
20
  Carnivore.configure!(opts[:config])
17
21
  Carnivore::Config.immutable!
data/lib/jackal/utils.rb CHANGED
@@ -4,6 +4,12 @@ module Jackal
4
4
  # Helper utilities
5
5
  module Utils
6
6
 
7
+ # Valid configuration paths for hook configuration
8
+ HTTP_HOOK_CONFIG = [
9
+ [:http_hook],
10
+ [:jackal, :http_hook]
11
+ ]
12
+
7
13
  autoload :Spec, 'jackal/utils/spec'
8
14
  autoload :Payload, 'jackal/utils/payload'
9
15
  autoload :Config, 'jackal/utils/config'
@@ -16,18 +22,21 @@ module Jackal
16
22
 
17
23
  class << self
18
24
 
19
- # Load thee HTTP Hook if configured
25
+ # Load the HTTP Hook if configured
20
26
  #
21
27
  # @return [TrueClass, FalseClass]
22
28
  def load_http_hook
23
- if(Carnivore::Config.get(:http_hook))
29
+ hook_config = HTTP_HOOK_CONFIG.map do |path|
30
+ Carnivore::Config.get(*path)
31
+ end.compact.first
32
+ if(hook_config)
24
33
  Carnivore.configure do
25
34
  Carnivore::Source.build(
26
35
  :type => :http_endpoints,
27
36
  :args => {
28
- :name => :http_hook,
29
- :bind => Carnivore::Config.get(:http_hook, :bind) || "0.0.0.0",
30
- :port => Carnivore::Config.get(:http_hook, :port) || 8989
37
+ :name => :jackal_http_hook,
38
+ :bind => hook_config.fetch(:bind, "0.0.0.0"),
39
+ :port => hook_config.fetch(:port, 8989)
31
40
  }
32
41
  )
33
42
  end
@@ -4,6 +4,20 @@ module Jackal
4
4
  module Utils
5
5
  module Config
6
6
 
7
+ # Load extra modules automatically
8
+ def self.included(klass)
9
+ klass.class_eval do
10
+ include Bogo::AnimalStrings
11
+ end
12
+ end
13
+
14
+ # Load extra modules automatically
15
+ def self.extended(klass)
16
+ klass.class_eval do
17
+ extend Bogo::AnimalStrings
18
+ end
19
+ end
20
+
7
21
  # @return [Symbol] name of service
8
22
  def service_name(class_name = self.class.name)
9
23
  config_path(class_name).last.to_sym
@@ -12,7 +26,7 @@ module Jackal
12
26
  # @return [Array] key path in configuration
13
27
  def config_path(class_name = self.class.name)
14
28
  class_name.split('::')[0,2].map do |string|
15
- string.gsub(/(?<![A-Z])([A-Z])/, '_\1').sub(/^_/, '').downcase
29
+ snake(string)
16
30
  end
17
31
  end
18
32
 
@@ -21,6 +35,16 @@ module Jackal
21
35
  config_path.join('_')
22
36
  end
23
37
 
38
+ # @return [Smash] application configuration
39
+ def app_config
40
+ Carnivore::Config.fetch(
41
+ snake(
42
+ self.class.name.split('::').first
43
+ ),
44
+ Smash.new
45
+ )
46
+ end
47
+
24
48
  # @return [Smash] service configuration
25
49
  def service_config
26
50
  Carnivore::Config.get(*config_path) || Smash.new
@@ -31,11 +55,12 @@ module Jackal
31
55
  service_config[:config] || Smash.new
32
56
  end
33
57
 
34
- # Generation destination key based on direction
58
+ # Generate destination key based on direction
35
59
  #
36
60
  # @param direction [Symbol, String]
61
+ # @param payload [Smash]
37
62
  # @return [Symbol]
38
- def destination(direction = :output)
63
+ def destination(direction, payload)
39
64
  [source_prefix, direction].map(&:to_s).join('_').to_sym
40
65
  end
41
66
 
@@ -8,15 +8,24 @@ module Jackal
8
8
  module Utils
9
9
  class Process
10
10
 
11
+ # Default path for IO tmp files
12
+ DEFAULT_STORAGE_DIRECTORY = '/tmp/jackal-process-manager'
13
+
14
+ # @return [Smash] manager configuration
15
+ attr_reader :configuration
16
+ # @return [String] storage directory path
17
+ attr_reader :storage_directory
18
+
11
19
  # Create new instance
12
20
  #
21
+ # @param config [Smash] process manager configuration
13
22
  # @return [self]
14
- def initialize
15
- @storage_directory = Carnivore::Config.fetch(
16
- :fission, :utils, :process_manager, :storage,
17
- '/tmp/fission/process_manager'
23
+ def initialize(config={})
24
+ @configuration = config.to_smash
25
+ @storage_directory = configuration.fetch(
26
+ :storage_directory, DEFAULT_STORAGE_DIRECTORY
18
27
  )
19
- FileUtils.mkdir_p(@storage_directory)
28
+ FileUtils.mkdir_p(storage_directory)
20
29
  end
21
30
 
22
31
  # Create new process
@@ -30,7 +39,13 @@ module Jackal
30
39
  command = Shellwords.shellsplit(command.first)
31
40
  end
32
41
  if(block_given?)
33
- yield ChildProcess.build(*command)
42
+ if(configuration[:spawn])
43
+ yield ChildProcess::Unix::PosixSpawnProcess.new(command)
44
+ else
45
+ yield ChildProcess.build(*command)
46
+ end
47
+ else
48
+ raise ArgumentError.new('Expecting block but no block provided!')
34
49
  end
35
50
  true
36
51
  end
@@ -40,7 +55,7 @@ module Jackal
40
55
  # @param args [String] argument list joined for filename
41
56
  # @return [IO]
42
57
  def create_io_tmp(*args)
43
- path = File.join(@storage_directory, args.join('-'))
58
+ path = File.join(storage_directory, args.join('-'))
44
59
  FileUtils.mkdir_p(File.dirname(path))
45
60
  t_file = File.open(path, 'w+')
46
61
  t_file.sync
@@ -40,7 +40,7 @@ def payload_for(style, args={})
40
40
  if(args[:nest])
41
41
  Jackal::Utils.new_payload(:test, args[:nest] => MultiJson.load(File.read(path)))
42
42
  else
43
- Jackal::Utils.new_payload(:test, File.read(path))
43
+ Jackal::Utils.new_payload(:test, MultiJson.load(File.read(path)))
44
44
  end
45
45
  end
46
46
  else
@@ -1,4 +1,4 @@
1
1
  module Jackal
2
2
  # Current library version
3
- VERSION = Gem::Version.new('0.2.4')
3
+ VERSION = Gem::Version.new('0.3.0')
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jackal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.4
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Roberts
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-01-30 00:00:00.000000000 Z
11
+ date: 2015-02-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: carnivore