fluent-plugin-droonga 0.9.9 → 1.0.0
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/.dir-locals.el +3 -0
- data/.travis.yml +6 -2
- data/README.md +6 -7
- data/Rakefile +23 -6
- data/fluent-plugin-droonga.gemspec +2 -2
- data/lib/droonga/adapter.rb +12 -3
- data/lib/droonga/adapter_runner.rb +28 -23
- data/lib/droonga/catalog/base.rb +7 -111
- data/lib/droonga/catalog/dataset.rb +13 -25
- data/lib/droonga/catalog/errors.rb +94 -0
- data/lib/droonga/catalog/schema.rb +277 -0
- data/lib/droonga/catalog/version1.rb +404 -0
- data/lib/droonga/catalog/version2.rb +160 -0
- data/lib/droonga/catalog_loader.rb +27 -4
- data/lib/droonga/catalog_observer.rb +44 -6
- data/lib/droonga/collector.rb +12 -10
- data/lib/droonga/{handler_plugin.rb → collector_message.rb} +47 -20
- data/lib/droonga/collector_runner.rb +64 -0
- data/lib/droonga/collectors.rb +18 -0
- data/lib/droonga/{catalog.rb → collectors/add.rb} +9 -7
- data/lib/droonga/{command_repository.rb → collectors/and.rb} +7 -14
- data/lib/droonga/collectors/sum.rb +26 -0
- data/lib/droonga/dispatcher.rb +74 -41
- data/lib/droonga/distributed_command_planner.rb +2 -2
- data/lib/droonga/engine.rb +13 -5
- data/lib/droonga/{message_processing_error.rb → error.rb} +33 -12
- data/lib/droonga/{plugin/planner/search.rb → error_messages.rb} +12 -10
- data/lib/droonga/farm.rb +15 -14
- data/lib/droonga/fluent_message_sender.rb +15 -11
- data/lib/droonga/forwarder.rb +22 -18
- data/lib/droonga/handler.rb +8 -2
- data/lib/droonga/handler_runner.rb +47 -26
- data/lib/droonga/input_message.rb +6 -6
- data/lib/droonga/{command.rb → loggable.rb} +7 -14
- data/lib/droonga/logger.rb +56 -15
- data/lib/droonga/message_matcher.rb +12 -7
- data/lib/droonga/message_pusher.rb +8 -4
- data/lib/droonga/message_receiver.rb +11 -9
- data/lib/droonga/output_message.rb +2 -0
- data/lib/droonga/planner.rb +21 -10
- data/lib/droonga/plugin.rb +15 -0
- data/lib/droonga/plugin/metadata/{adapter_message.rb → adapter_input_message.rb} +6 -14
- data/lib/droonga/plugin/metadata/adapter_output_message.rb +39 -0
- data/lib/droonga/plugin/metadata/collector_message.rb +39 -0
- data/lib/droonga/plugin/metadata/input_message.rb +15 -0
- data/lib/droonga/plugin_loader.rb +33 -25
- data/lib/droonga/plugin_registry.rb +9 -1
- data/lib/droonga/plugins/basic.rb +54 -0
- data/lib/droonga/plugins/crud.rb +36 -15
- data/lib/droonga/plugins/error.rb +5 -4
- data/lib/droonga/plugins/groonga.rb +9 -6
- data/lib/droonga/plugins/groonga/column_create.rb +10 -5
- data/lib/droonga/plugins/groonga/generic_command.rb +2 -8
- data/lib/droonga/plugins/groonga/generic_response.rb +2 -2
- data/lib/droonga/plugins/groonga/select.rb +2 -2
- data/lib/droonga/plugins/groonga/table_create.rb +9 -4
- data/lib/droonga/plugins/groonga/table_remove.rb +10 -5
- data/lib/droonga/plugins/search.rb +106 -5
- data/lib/droonga/plugins/search/distributed_search_planner.rb +398 -0
- data/lib/droonga/plugins/watch.rb +41 -20
- data/lib/droonga/processor.rb +12 -9
- data/lib/droonga/{plugin/collector/basic.rb → reducer.rb} +36 -50
- data/lib/droonga/replier.rb +7 -4
- data/lib/droonga/searcher.rb +40 -37
- data/lib/droonga/server.rb +8 -6
- data/lib/droonga/session.rb +17 -7
- data/lib/droonga/single_step.rb +53 -0
- data/lib/droonga/{plugin/planner/watch.rb → single_step_definition.rb} +27 -26
- data/lib/droonga/{partition.rb → slice.rb} +23 -12
- data/lib/droonga/status_code.rb +25 -0
- data/lib/droonga/step_runner.rb +63 -0
- data/lib/droonga/watch_schema.rb +7 -3
- data/lib/droonga/watcher.rb +4 -4
- data/lib/droonga/worker.rb +6 -6
- data/lib/fluent/plugin/out_droonga.rb +27 -2
- data/sample/cluster/catalog.json +33 -32
- data/test/command/config/default/catalog.json +72 -45
- data/test/command/config/version1/catalog.json +68 -0
- data/test/command/config/version1/fluentd.conf +11 -0
- data/test/command/suite/message/error/missing-dataset.expected +1 -1
- data/test/command/suite/message/error/unknown-dataset.expected +1 -1
- data/test/command/suite/message/error/unknown-type.expected +13 -0
- data/test/command/suite/message/error/{unknown-command.test → unknown-type.test} +1 -1
- data/test/command/suite/search/error/missing-source-parameter.expected +1 -1
- data/test/command/suite/search/error/unknown-source.expected +15 -3
- data/test/command/suite/watch/subscribe.expected +1 -3
- data/test/command/suite/watch/unsubscribe.expected +1 -3
- data/test/performance/watch/catalog.json +1 -0
- data/test/unit/catalog/test_dataset.rb +16 -358
- data/test/unit/catalog/test_schema.rb +285 -0
- data/test/unit/catalog/test_version1.rb +222 -28
- data/test/unit/catalog/test_version2.rb +155 -0
- data/test/unit/fixtures/catalog/version2.json +62 -0
- data/test/unit/helper/distributed_search_planner_helper.rb +2 -2
- data/test/unit/plugins/crud/test_add.rb +13 -13
- data/test/unit/plugins/groonga/test_column_create.rb +14 -11
- data/test/unit/plugins/groonga/test_table_create.rb +4 -9
- data/test/unit/plugins/groonga/test_table_remove.rb +4 -9
- data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_basic.rb +0 -0
- data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_group_by.rb +0 -0
- data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_output.rb +0 -0
- data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_sort_by.rb +0 -0
- data/test/unit/{plugin/collector/test_search.rb → plugins/search/test_collector.rb} +40 -39
- data/test/unit/plugins/{test_search.rb → search/test_handler.rb} +6 -5
- data/test/unit/{plugin/planner/test_search.rb → plugins/search/test_planner.rb} +3 -3
- data/test/unit/{plugin/collector → plugins}/test_basic.rb +68 -50
- data/test/unit/plugins/test_groonga.rb +2 -15
- data/test/unit/plugins/test_watch.rb +25 -22
- data/test/unit/test_message_matcher.rb +29 -6
- data/test/unit/test_output.rb +4 -0
- metadata +58 -50
- data/lib/droonga/collector_plugin.rb +0 -50
- data/lib/droonga/legacy_pluggable.rb +0 -66
- data/lib/droonga/legacy_plugin.rb +0 -57
- data/lib/droonga/legacy_plugin_repository.rb +0 -54
- data/lib/droonga/planner_plugin.rb +0 -54
- data/lib/droonga/plugin/collector/search.rb +0 -98
- data/lib/droonga/plugin/planner/crud.rb +0 -49
- data/lib/droonga/plugin/planner/distributed_search_planner.rb +0 -393
- data/lib/droonga/plugin/planner/groonga.rb +0 -54
- data/lib/droonga/plugin_registerable.rb +0 -75
- data/test/command/suite/message/error/unknown-command.expected +0 -13
- data/test/unit/test_command_repository.rb +0 -39
- data/test/unit/test_legacy_plugin.rb +0 -50
- data/test/unit/test_legacy_plugin_repository.rb +0 -89
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
#
|
|
3
1
|
# Copyright (C) 2013-2014 Droonga Project
|
|
4
2
|
#
|
|
5
3
|
# This library is free software; you can redistribute it and/or
|
|
@@ -15,17 +13,21 @@
|
|
|
15
13
|
# License along with this library; if not, write to the Free Software
|
|
16
14
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
17
15
|
|
|
18
|
-
require "droonga/
|
|
19
|
-
require "droonga/
|
|
16
|
+
require "droonga/error"
|
|
17
|
+
require "droonga/status_code"
|
|
20
18
|
|
|
21
19
|
module Droonga
|
|
22
|
-
|
|
23
|
-
|
|
20
|
+
module ErrorMessages
|
|
21
|
+
class InternalServerError < ErrorMessage
|
|
22
|
+
STATUS_CODE = StatusCode::INTERNAL_SERVER_ERROR
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class BadRequest < ErrorMessage
|
|
26
|
+
STATUS_CODE = StatusCode::BAD_REQUEST
|
|
27
|
+
end
|
|
24
28
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
planner = DistributedSearchPlanner.new(message)
|
|
28
|
-
planner.plan
|
|
29
|
+
class NotFound < ErrorMessage
|
|
30
|
+
STATUS_CODE = StatusCode::NOT_FOUND
|
|
29
31
|
end
|
|
30
32
|
end
|
|
31
33
|
end
|
data/lib/droonga/farm.rb
CHANGED
|
@@ -15,37 +15,38 @@
|
|
|
15
15
|
# License along with this library; if not, write to the Free Software
|
|
16
16
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
17
17
|
|
|
18
|
-
require "droonga/
|
|
18
|
+
require "droonga/slice"
|
|
19
19
|
|
|
20
20
|
module Droonga
|
|
21
21
|
class Farm
|
|
22
|
-
def initialize(name, loop, options={})
|
|
22
|
+
def initialize(name, catalog, loop, options={})
|
|
23
23
|
@name = name
|
|
24
|
+
@catalog = catalog
|
|
24
25
|
@loop = loop
|
|
25
26
|
@options = options
|
|
26
|
-
@
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
@
|
|
27
|
+
@slices = {}
|
|
28
|
+
slices = @catalog.slices(name)
|
|
29
|
+
slices.each do |slice_name, slice_options|
|
|
30
|
+
slice = Droonga::Slice.new(@loop,
|
|
31
|
+
@options.merge(slice_options))
|
|
32
|
+
@slices[slice_name] = slice
|
|
32
33
|
end
|
|
33
34
|
end
|
|
34
35
|
|
|
35
36
|
def start
|
|
36
|
-
@
|
|
37
|
-
|
|
37
|
+
@slices.each_value do |slice|
|
|
38
|
+
slice.start
|
|
38
39
|
end
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
def shutdown
|
|
42
|
-
@
|
|
43
|
-
|
|
43
|
+
@slices.each_value do |slice|
|
|
44
|
+
slice.shutdown
|
|
44
45
|
end
|
|
45
46
|
end
|
|
46
47
|
|
|
47
|
-
def process(
|
|
48
|
-
@
|
|
48
|
+
def process(slice_name, message)
|
|
49
|
+
@slices[slice_name].process(message)
|
|
49
50
|
end
|
|
50
51
|
end
|
|
51
52
|
end
|
|
@@ -16,10 +16,14 @@
|
|
|
16
16
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
17
17
|
|
|
18
18
|
require "cool.io"
|
|
19
|
+
|
|
20
|
+
require "droonga/loggable"
|
|
19
21
|
require "droonga/message_pack_packer"
|
|
20
22
|
|
|
21
23
|
module Droonga
|
|
22
24
|
class FluentMessageSender
|
|
25
|
+
include Loggable
|
|
26
|
+
|
|
23
27
|
def initialize(loop, host, port)
|
|
24
28
|
@loop = loop
|
|
25
29
|
@host = host
|
|
@@ -27,39 +31,39 @@ module Droonga
|
|
|
27
31
|
end
|
|
28
32
|
|
|
29
33
|
def start
|
|
30
|
-
|
|
34
|
+
logger.trace("start: start")
|
|
31
35
|
connect
|
|
32
|
-
|
|
36
|
+
logger.trace("start: done")
|
|
33
37
|
end
|
|
34
38
|
|
|
35
39
|
def shutdown
|
|
36
|
-
|
|
40
|
+
logger.trace("shutdown: start")
|
|
37
41
|
@socket.close unless @socket.closed?
|
|
38
|
-
|
|
42
|
+
logger.trace("shutdown: done")
|
|
39
43
|
end
|
|
40
44
|
|
|
41
45
|
def send(tag, data)
|
|
42
|
-
|
|
46
|
+
logger.trace("send: start")
|
|
43
47
|
connect if @socket.closed?
|
|
44
48
|
fluent_message = [tag, Time.now.to_i, data]
|
|
45
49
|
packed_fluent_message = MessagePackPacker.pack(fluent_message)
|
|
46
50
|
@socket.write(packed_fluent_message)
|
|
47
51
|
@loop.break_current_loop
|
|
48
|
-
|
|
52
|
+
logger.trace("send: done")
|
|
49
53
|
end
|
|
50
54
|
|
|
51
55
|
private
|
|
52
56
|
def connect
|
|
53
|
-
|
|
57
|
+
logger.trace("connect: start")
|
|
54
58
|
|
|
55
59
|
log_write_complete = lambda do
|
|
56
|
-
|
|
60
|
+
logger.trace("write completed")
|
|
57
61
|
end
|
|
58
62
|
log_connect = lambda do
|
|
59
|
-
|
|
63
|
+
logger.trace("connected to #{@host}:#{@port}")
|
|
60
64
|
end
|
|
61
65
|
log_failed = lambda do
|
|
62
|
-
|
|
66
|
+
logger.error("failed to connect to #{@host}:#{@port}")
|
|
63
67
|
end
|
|
64
68
|
|
|
65
69
|
@socket = Coolio::TCPSocket.connect(@host, @port)
|
|
@@ -74,7 +78,7 @@ module Droonga
|
|
|
74
78
|
end
|
|
75
79
|
@loop.attach(@socket)
|
|
76
80
|
|
|
77
|
-
|
|
81
|
+
logger.trace("connect: done")
|
|
78
82
|
end
|
|
79
83
|
|
|
80
84
|
def log_tag
|
data/lib/droonga/forwarder.rb
CHANGED
|
@@ -15,45 +15,49 @@
|
|
|
15
15
|
# License along with this library; if not, write to the Free Software
|
|
16
16
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
17
17
|
|
|
18
|
+
require "droonga/loggable"
|
|
18
19
|
require "droonga/event_loop"
|
|
19
20
|
require "droonga/fluent_message_sender"
|
|
20
21
|
|
|
21
22
|
module Droonga
|
|
22
23
|
class Forwarder
|
|
24
|
+
include Loggable
|
|
25
|
+
|
|
23
26
|
def initialize(loop)
|
|
24
27
|
@loop = loop
|
|
25
28
|
@senders = {}
|
|
26
29
|
end
|
|
27
30
|
|
|
28
31
|
def start
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
logger.trace("start: start")
|
|
33
|
+
logger.trace("start: done")
|
|
31
34
|
end
|
|
32
35
|
|
|
33
36
|
def shutdown
|
|
34
|
-
|
|
37
|
+
logger.trace("shutdown: start")
|
|
35
38
|
@senders.each_value do |sender|
|
|
36
39
|
sender.shutdown
|
|
37
40
|
end
|
|
38
|
-
|
|
41
|
+
logger.trace("shutdown: done")
|
|
39
42
|
end
|
|
40
43
|
|
|
41
44
|
def forward(message, destination)
|
|
42
|
-
|
|
45
|
+
logger.trace("forward: start")
|
|
43
46
|
command = destination["type"]
|
|
44
47
|
receiver = destination["to"]
|
|
45
48
|
arguments = destination["arguments"]
|
|
46
49
|
output(receiver, message, command, arguments)
|
|
47
|
-
|
|
50
|
+
logger.trace("forward: done")
|
|
48
51
|
end
|
|
49
52
|
|
|
50
53
|
private
|
|
51
54
|
def output(receiver, message, command, arguments)
|
|
52
|
-
|
|
53
|
-
unless
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
logger.trace("output: start")
|
|
56
|
+
# TODO: IMPROVE ME: Should not use "unless" and "and". It is confused.
|
|
57
|
+
unless receiver.is_a?(String) and command.is_a?(String)
|
|
58
|
+
logger.trace("output: abort: invalid argument",
|
|
59
|
+
:receiver => receiver,
|
|
60
|
+
:command => command)
|
|
57
61
|
return
|
|
58
62
|
end
|
|
59
63
|
unless receiver =~ /\A(.*):(\d+)\/(.*?)(\?.+)?\z/
|
|
@@ -65,10 +69,10 @@ module Droonga
|
|
|
65
69
|
params = $4
|
|
66
70
|
sender = find_sender(host, port, params)
|
|
67
71
|
unless sender
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
+
logger.trace("output: abort: no sender",
|
|
73
|
+
:host => host,
|
|
74
|
+
:port => port,
|
|
75
|
+
:params => params)
|
|
72
76
|
return
|
|
73
77
|
end
|
|
74
78
|
override_message = {
|
|
@@ -78,10 +82,10 @@ module Droonga
|
|
|
78
82
|
message = message.merge(override_message)
|
|
79
83
|
output_tag = "#{tag}.message"
|
|
80
84
|
log_info = "<#{receiver}>:<#{output_tag}>"
|
|
81
|
-
|
|
85
|
+
logger.trace("output: post: start: #{log_info}")
|
|
82
86
|
sender.send(output_tag, message)
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
logger.trace("output: post: done: #{log_info}")
|
|
88
|
+
logger.trace("output: done")
|
|
85
89
|
end
|
|
86
90
|
|
|
87
91
|
def find_sender(host, port, params)
|
data/lib/droonga/handler.rb
CHANGED
|
@@ -14,12 +14,16 @@
|
|
|
14
14
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
15
15
|
|
|
16
16
|
require "droonga/pluggable"
|
|
17
|
+
require "droonga/loggable"
|
|
17
18
|
require "droonga/plugin/metadata/input_message"
|
|
18
19
|
require "droonga/plugin/metadata/handler_action"
|
|
20
|
+
require "droonga/error_messages"
|
|
19
21
|
|
|
20
22
|
module Droonga
|
|
21
23
|
class Handler
|
|
22
24
|
extend Pluggable
|
|
25
|
+
include Loggable
|
|
26
|
+
include ErrorMessages
|
|
23
27
|
|
|
24
28
|
class << self
|
|
25
29
|
def message
|
|
@@ -31,12 +35,14 @@ module Droonga
|
|
|
31
35
|
end
|
|
32
36
|
end
|
|
33
37
|
|
|
34
|
-
|
|
38
|
+
attr_reader :messenger
|
|
39
|
+
def initialize(name, context, messenger)
|
|
35
40
|
@name = name
|
|
36
41
|
@context = context
|
|
42
|
+
@messenger = messenger
|
|
37
43
|
end
|
|
38
44
|
|
|
39
|
-
def handle(message
|
|
45
|
+
def handle(message)
|
|
40
46
|
end
|
|
41
47
|
end
|
|
42
48
|
end
|
|
@@ -15,85 +15,106 @@
|
|
|
15
15
|
|
|
16
16
|
require "groonga"
|
|
17
17
|
|
|
18
|
+
require "droonga/loggable"
|
|
18
19
|
require "droonga/forwarder"
|
|
19
20
|
require "droonga/handler_message"
|
|
20
21
|
require "droonga/handler_messenger"
|
|
21
|
-
require "droonga/
|
|
22
|
+
require "droonga/step_runner"
|
|
22
23
|
|
|
23
24
|
module Droonga
|
|
24
25
|
class HandlerRunner
|
|
26
|
+
include Loggable
|
|
27
|
+
|
|
25
28
|
def initialize(loop, options={})
|
|
26
29
|
@loop = loop
|
|
27
30
|
@options = options
|
|
28
31
|
@name = options[:name]
|
|
32
|
+
@dataset_name = options[:dataset]
|
|
29
33
|
@database_name = options[:database]
|
|
30
34
|
prepare
|
|
31
35
|
end
|
|
32
36
|
|
|
33
37
|
def start
|
|
34
|
-
|
|
38
|
+
logger.trace("start: start")
|
|
35
39
|
@forwarder.start
|
|
36
|
-
|
|
40
|
+
logger.trace("start: done")
|
|
37
41
|
end
|
|
38
42
|
|
|
39
43
|
def shutdown
|
|
40
|
-
|
|
44
|
+
logger.trace("shutdown: start")
|
|
41
45
|
@forwarder.shutdown
|
|
42
46
|
if @database
|
|
43
47
|
@database.close
|
|
44
48
|
@context.close
|
|
45
49
|
@database = @context = nil
|
|
46
50
|
end
|
|
47
|
-
|
|
51
|
+
logger.trace("shutdown: done")
|
|
48
52
|
end
|
|
49
53
|
|
|
50
|
-
def prefer_synchronous?(
|
|
51
|
-
find_handler_class(
|
|
54
|
+
def prefer_synchronous?(type)
|
|
55
|
+
find_handler_class(type).action.synchronous?
|
|
52
56
|
end
|
|
53
57
|
|
|
54
|
-
def processable?(
|
|
55
|
-
not find_handler_class(
|
|
58
|
+
def processable?(type)
|
|
59
|
+
not find_handler_class(type).nil?
|
|
56
60
|
end
|
|
57
61
|
|
|
58
62
|
def process(message)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
handler_class = find_handler_class(
|
|
63
|
+
logger.trace("process: start")
|
|
64
|
+
type = message["type"]
|
|
65
|
+
handler_class = find_handler_class(type)
|
|
62
66
|
if handler_class.nil?
|
|
63
|
-
|
|
67
|
+
logger.trace("process: done: no handler: <#{type}>")
|
|
64
68
|
return
|
|
65
69
|
end
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
70
|
+
process_type(handler_class, type, message)
|
|
71
|
+
logger.trace("process: done: <#{type}>",
|
|
72
|
+
:handler => handler_class)
|
|
69
73
|
end
|
|
70
74
|
|
|
71
75
|
private
|
|
72
76
|
def prepare
|
|
73
|
-
if @database_name
|
|
77
|
+
if @database_name and !@database_name.empty?
|
|
74
78
|
@context = Groonga::Context.new
|
|
75
79
|
@database = @context.open_database(@database_name)
|
|
76
80
|
end
|
|
77
|
-
|
|
81
|
+
logger.debug("#{self.class.name}: activating plugins for the dataset \"#{@dataset_name}\": " +
|
|
82
|
+
"#{@options[:plugins].join(", ")}")
|
|
83
|
+
@step_runner = StepRunner.new(@options[:plugins] || [])
|
|
78
84
|
@forwarder = Forwarder.new(@loop)
|
|
79
85
|
end
|
|
80
86
|
|
|
81
|
-
def find_handler_class(
|
|
82
|
-
@
|
|
83
|
-
|
|
84
|
-
|
|
87
|
+
def find_handler_class(type)
|
|
88
|
+
step_definition = @step_runner.find(type)
|
|
89
|
+
return nil if step_definition.nil?
|
|
90
|
+
step_definition.handler_class
|
|
85
91
|
end
|
|
86
92
|
|
|
87
|
-
def
|
|
93
|
+
def process_type(handler_class, type, raw_message)
|
|
88
94
|
handler_message = HandlerMessage.new(raw_message)
|
|
89
95
|
handler_message.validate
|
|
90
96
|
|
|
91
97
|
messenger = HandlerMessenger.new(@forwarder, handler_message, @options)
|
|
92
|
-
handler = handler_class.new(@name, @context)
|
|
98
|
+
handler = handler_class.new(@name, @context, messenger)
|
|
93
99
|
begin
|
|
94
|
-
handler.handle(handler_message
|
|
95
|
-
|
|
100
|
+
result = handler.handle(handler_message)
|
|
101
|
+
unless result.nil?
|
|
102
|
+
# XXX: It is just a workaround.
|
|
103
|
+
# Remove me when super step is introduced.
|
|
104
|
+
if handler.is_a?(Droonga::Plugins::Search::Handler)
|
|
105
|
+
messenger.emit(result)
|
|
106
|
+
else
|
|
107
|
+
messenger.emit("result" => result)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
rescue ErrorMessage => error
|
|
96
111
|
messenger.error(error.status_code, error.response_body)
|
|
112
|
+
rescue => error
|
|
113
|
+
logger.exception("failed to handle message", error)
|
|
114
|
+
internal_server_error =
|
|
115
|
+
ErrorMessages::InternalServerError.new("Unknown internal error")
|
|
116
|
+
messenger.error(internal_server_error.status_code,
|
|
117
|
+
internal_server_error.response_body)
|
|
97
118
|
end
|
|
98
119
|
end
|
|
99
120
|
|
|
@@ -36,16 +36,16 @@ module Droonga
|
|
|
36
36
|
@raw_message["body"] = body
|
|
37
37
|
end
|
|
38
38
|
|
|
39
|
-
def
|
|
39
|
+
def type
|
|
40
40
|
@raw_message["type"]
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
def
|
|
44
|
-
|
|
45
|
-
return if
|
|
43
|
+
def type=(type)
|
|
44
|
+
original_type = @raw_message["type"]
|
|
45
|
+
return if original_type == type
|
|
46
46
|
@raw_message["originalTypes"] ||= []
|
|
47
|
-
@raw_message["originalTypes"] <<
|
|
48
|
-
@raw_message["type"] =
|
|
47
|
+
@raw_message["originalTypes"] << original_type
|
|
48
|
+
@raw_message["type"] = type
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
end
|
|
@@ -13,24 +13,17 @@
|
|
|
13
13
|
# License along with this library; if not, write to the Free Software
|
|
14
14
|
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
|
15
15
|
|
|
16
|
-
require "droonga/
|
|
16
|
+
require "droonga/logger"
|
|
17
17
|
|
|
18
18
|
module Droonga
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
# the command will be applied.
|
|
24
|
-
#
|
|
25
|
-
# @see MessageMatcher
|
|
26
|
-
def initialize(method_name, options)
|
|
27
|
-
@method_name = method_name
|
|
28
|
-
@options = options
|
|
29
|
-
@matcher = MessageMatcher.new(@options[:pattern])
|
|
19
|
+
module Loggable
|
|
20
|
+
private
|
|
21
|
+
def logger
|
|
22
|
+
@logger ||= Logger.new(:depth_offset => 1, :tag => log_tag)
|
|
30
23
|
end
|
|
31
24
|
|
|
32
|
-
def
|
|
33
|
-
|
|
25
|
+
def log_tag
|
|
26
|
+
nil
|
|
34
27
|
end
|
|
35
28
|
end
|
|
36
29
|
end
|