fluent-plugin-droonga 0.9.9 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/.dir-locals.el +3 -0
  3. data/.travis.yml +6 -2
  4. data/README.md +6 -7
  5. data/Rakefile +23 -6
  6. data/fluent-plugin-droonga.gemspec +2 -2
  7. data/lib/droonga/adapter.rb +12 -3
  8. data/lib/droonga/adapter_runner.rb +28 -23
  9. data/lib/droonga/catalog/base.rb +7 -111
  10. data/lib/droonga/catalog/dataset.rb +13 -25
  11. data/lib/droonga/catalog/errors.rb +94 -0
  12. data/lib/droonga/catalog/schema.rb +277 -0
  13. data/lib/droonga/catalog/version1.rb +404 -0
  14. data/lib/droonga/catalog/version2.rb +160 -0
  15. data/lib/droonga/catalog_loader.rb +27 -4
  16. data/lib/droonga/catalog_observer.rb +44 -6
  17. data/lib/droonga/collector.rb +12 -10
  18. data/lib/droonga/{handler_plugin.rb → collector_message.rb} +47 -20
  19. data/lib/droonga/collector_runner.rb +64 -0
  20. data/lib/droonga/collectors.rb +18 -0
  21. data/lib/droonga/{catalog.rb → collectors/add.rb} +9 -7
  22. data/lib/droonga/{command_repository.rb → collectors/and.rb} +7 -14
  23. data/lib/droonga/collectors/sum.rb +26 -0
  24. data/lib/droonga/dispatcher.rb +74 -41
  25. data/lib/droonga/distributed_command_planner.rb +2 -2
  26. data/lib/droonga/engine.rb +13 -5
  27. data/lib/droonga/{message_processing_error.rb → error.rb} +33 -12
  28. data/lib/droonga/{plugin/planner/search.rb → error_messages.rb} +12 -10
  29. data/lib/droonga/farm.rb +15 -14
  30. data/lib/droonga/fluent_message_sender.rb +15 -11
  31. data/lib/droonga/forwarder.rb +22 -18
  32. data/lib/droonga/handler.rb +8 -2
  33. data/lib/droonga/handler_runner.rb +47 -26
  34. data/lib/droonga/input_message.rb +6 -6
  35. data/lib/droonga/{command.rb → loggable.rb} +7 -14
  36. data/lib/droonga/logger.rb +56 -15
  37. data/lib/droonga/message_matcher.rb +12 -7
  38. data/lib/droonga/message_pusher.rb +8 -4
  39. data/lib/droonga/message_receiver.rb +11 -9
  40. data/lib/droonga/output_message.rb +2 -0
  41. data/lib/droonga/planner.rb +21 -10
  42. data/lib/droonga/plugin.rb +15 -0
  43. data/lib/droonga/plugin/metadata/{adapter_message.rb → adapter_input_message.rb} +6 -14
  44. data/lib/droonga/plugin/metadata/adapter_output_message.rb +39 -0
  45. data/lib/droonga/plugin/metadata/collector_message.rb +39 -0
  46. data/lib/droonga/plugin/metadata/input_message.rb +15 -0
  47. data/lib/droonga/plugin_loader.rb +33 -25
  48. data/lib/droonga/plugin_registry.rb +9 -1
  49. data/lib/droonga/plugins/basic.rb +54 -0
  50. data/lib/droonga/plugins/crud.rb +36 -15
  51. data/lib/droonga/plugins/error.rb +5 -4
  52. data/lib/droonga/plugins/groonga.rb +9 -6
  53. data/lib/droonga/plugins/groonga/column_create.rb +10 -5
  54. data/lib/droonga/plugins/groonga/generic_command.rb +2 -8
  55. data/lib/droonga/plugins/groonga/generic_response.rb +2 -2
  56. data/lib/droonga/plugins/groonga/select.rb +2 -2
  57. data/lib/droonga/plugins/groonga/table_create.rb +9 -4
  58. data/lib/droonga/plugins/groonga/table_remove.rb +10 -5
  59. data/lib/droonga/plugins/search.rb +106 -5
  60. data/lib/droonga/plugins/search/distributed_search_planner.rb +398 -0
  61. data/lib/droonga/plugins/watch.rb +41 -20
  62. data/lib/droonga/processor.rb +12 -9
  63. data/lib/droonga/{plugin/collector/basic.rb → reducer.rb} +36 -50
  64. data/lib/droonga/replier.rb +7 -4
  65. data/lib/droonga/searcher.rb +40 -37
  66. data/lib/droonga/server.rb +8 -6
  67. data/lib/droonga/session.rb +17 -7
  68. data/lib/droonga/single_step.rb +53 -0
  69. data/lib/droonga/{plugin/planner/watch.rb → single_step_definition.rb} +27 -26
  70. data/lib/droonga/{partition.rb → slice.rb} +23 -12
  71. data/lib/droonga/status_code.rb +25 -0
  72. data/lib/droonga/step_runner.rb +63 -0
  73. data/lib/droonga/watch_schema.rb +7 -3
  74. data/lib/droonga/watcher.rb +4 -4
  75. data/lib/droonga/worker.rb +6 -6
  76. data/lib/fluent/plugin/out_droonga.rb +27 -2
  77. data/sample/cluster/catalog.json +33 -32
  78. data/test/command/config/default/catalog.json +72 -45
  79. data/test/command/config/version1/catalog.json +68 -0
  80. data/test/command/config/version1/fluentd.conf +11 -0
  81. data/test/command/suite/message/error/missing-dataset.expected +1 -1
  82. data/test/command/suite/message/error/unknown-dataset.expected +1 -1
  83. data/test/command/suite/message/error/unknown-type.expected +13 -0
  84. data/test/command/suite/message/error/{unknown-command.test → unknown-type.test} +1 -1
  85. data/test/command/suite/search/error/missing-source-parameter.expected +1 -1
  86. data/test/command/suite/search/error/unknown-source.expected +15 -3
  87. data/test/command/suite/watch/subscribe.expected +1 -3
  88. data/test/command/suite/watch/unsubscribe.expected +1 -3
  89. data/test/performance/watch/catalog.json +1 -0
  90. data/test/unit/catalog/test_dataset.rb +16 -358
  91. data/test/unit/catalog/test_schema.rb +285 -0
  92. data/test/unit/catalog/test_version1.rb +222 -28
  93. data/test/unit/catalog/test_version2.rb +155 -0
  94. data/test/unit/fixtures/catalog/version2.json +62 -0
  95. data/test/unit/helper/distributed_search_planner_helper.rb +2 -2
  96. data/test/unit/plugins/crud/test_add.rb +13 -13
  97. data/test/unit/plugins/groonga/test_column_create.rb +14 -11
  98. data/test/unit/plugins/groonga/test_table_create.rb +4 -9
  99. data/test/unit/plugins/groonga/test_table_remove.rb +4 -9
  100. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_basic.rb +0 -0
  101. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_group_by.rb +0 -0
  102. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_output.rb +0 -0
  103. data/test/unit/{plugin/planner/search_planner → plugins/search/planner}/test_sort_by.rb +0 -0
  104. data/test/unit/{plugin/collector/test_search.rb → plugins/search/test_collector.rb} +40 -39
  105. data/test/unit/plugins/{test_search.rb → search/test_handler.rb} +6 -5
  106. data/test/unit/{plugin/planner/test_search.rb → plugins/search/test_planner.rb} +3 -3
  107. data/test/unit/{plugin/collector → plugins}/test_basic.rb +68 -50
  108. data/test/unit/plugins/test_groonga.rb +2 -15
  109. data/test/unit/plugins/test_watch.rb +25 -22
  110. data/test/unit/test_message_matcher.rb +29 -6
  111. data/test/unit/test_output.rb +4 -0
  112. metadata +58 -50
  113. data/lib/droonga/collector_plugin.rb +0 -50
  114. data/lib/droonga/legacy_pluggable.rb +0 -66
  115. data/lib/droonga/legacy_plugin.rb +0 -57
  116. data/lib/droonga/legacy_plugin_repository.rb +0 -54
  117. data/lib/droonga/planner_plugin.rb +0 -54
  118. data/lib/droonga/plugin/collector/search.rb +0 -98
  119. data/lib/droonga/plugin/planner/crud.rb +0 -49
  120. data/lib/droonga/plugin/planner/distributed_search_planner.rb +0 -393
  121. data/lib/droonga/plugin/planner/groonga.rb +0 -54
  122. data/lib/droonga/plugin_registerable.rb +0 -75
  123. data/test/command/suite/message/error/unknown-command.expected +0 -13
  124. data/test/unit/test_command_repository.rb +0 -39
  125. data/test/unit/test_legacy_plugin.rb +0 -50
  126. 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/planner_plugin"
19
- require "droonga/plugin/planner/distributed_search_planner"
16
+ require "droonga/error"
17
+ require "droonga/status_code"
20
18
 
21
19
  module Droonga
22
- class SearchPlanner < Droonga::PlannerPlugin
23
- repository.register("search", self)
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
- command :search
26
- def search(message)
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
@@ -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/partition"
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
- @partitions = {}
27
- partitions = Droonga.catalog.get_partitions(name)
28
- partitions.each do |partition_name, partition_options|
29
- partition = Droonga::Partition.new(@loop,
30
- @options.merge(partition_options))
31
- @partitions[partition_name] = partition
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
- @partitions.each_value do |partition|
37
- partition.start
37
+ @slices.each_value do |slice|
38
+ slice.start
38
39
  end
39
40
  end
40
41
 
41
42
  def shutdown
42
- @partitions.each_value do |partition|
43
- partition.shutdown
43
+ @slices.each_value do |slice|
44
+ slice.shutdown
44
45
  end
45
46
  end
46
47
 
47
- def process(partition_name, message)
48
- @partitions[partition_name].process(message)
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
- $log.trace("#{log_tag}: start: start")
34
+ logger.trace("start: start")
31
35
  connect
32
- $log.trace("#{log_tag}: start: done")
36
+ logger.trace("start: done")
33
37
  end
34
38
 
35
39
  def shutdown
36
- $log.trace("#{log_tag}: shutdown: start")
40
+ logger.trace("shutdown: start")
37
41
  @socket.close unless @socket.closed?
38
- $log.trace("#{log_tag}: shutdown: done")
42
+ logger.trace("shutdown: done")
39
43
  end
40
44
 
41
45
  def send(tag, data)
42
- $log.trace("#{log_tag}: send: start")
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
- $log.trace("#{log_tag}: send: done")
52
+ logger.trace("send: done")
49
53
  end
50
54
 
51
55
  private
52
56
  def connect
53
- $log.trace("#{log_tag}: connect: start")
57
+ logger.trace("connect: start")
54
58
 
55
59
  log_write_complete = lambda do
56
- $log.trace("#{log_tag}: write completed")
60
+ logger.trace("write completed")
57
61
  end
58
62
  log_connect = lambda do
59
- $log.trace("#{log_tag}: connected to #{@host}:#{@port}")
63
+ logger.trace("connected to #{@host}:#{@port}")
60
64
  end
61
65
  log_failed = lambda do
62
- $log.error("#{log_tag}: failed to connect to #{@host}:#{@port}")
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
- $log.trace("#{log_tag}: connect: done")
81
+ logger.trace("connect: done")
78
82
  end
79
83
 
80
84
  def log_tag
@@ -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
- $log.trace("#{log_tag}: start: start")
30
- $log.trace("#{log_tag}: start: done")
32
+ logger.trace("start: start")
33
+ logger.trace("start: done")
31
34
  end
32
35
 
33
36
  def shutdown
34
- $log.trace("#{log_tag}: shutdown: start")
37
+ logger.trace("shutdown: start")
35
38
  @senders.each_value do |sender|
36
39
  sender.shutdown
37
40
  end
38
- $log.trace("#{log_tag}: shutdown: done")
41
+ logger.trace("shutdown: done")
39
42
  end
40
43
 
41
44
  def forward(message, destination)
42
- $log.trace("#{log_tag}: forward: start")
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
- $log.trace("#{log_tag}: forward: done")
50
+ logger.trace("forward: done")
48
51
  end
49
52
 
50
53
  private
51
54
  def output(receiver, message, command, arguments)
52
- $log.trace("#{log_tag}: output: start")
53
- unless receiver.is_a?(String) && command.is_a?(String)
54
- $log.trace("#{log_tag}: output: abort: invalid argument",
55
- :receiver => receiver,
56
- :command => command)
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
- $log.trace("#{log_tag}: output: abort: no sender",
69
- :host => host,
70
- :port => port,
71
- :params => params)
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
- $log.trace("#{log_tag}: output: post: start: #{log_info}")
85
+ logger.trace("output: post: start: #{log_info}")
82
86
  sender.send(output_tag, message)
83
- $log.trace("#{log_tag}: output: post: done: #{log_info}")
84
- $log.trace("#{log_tag}: output: done")
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)
@@ -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
- def initialize(name, context)
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, messenger)
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/handler"
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
- $log.trace("#{log_tag}: start: start")
38
+ logger.trace("start: start")
35
39
  @forwarder.start
36
- $log.trace("#{log_tag}: start: done")
40
+ logger.trace("start: done")
37
41
  end
38
42
 
39
43
  def shutdown
40
- $log.trace("#{log_tag}: shutdown: start")
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
- $log.trace("#{log_tag}: shutdown: done")
51
+ logger.trace("shutdown: done")
48
52
  end
49
53
 
50
- def prefer_synchronous?(command)
51
- find_handler_class(command).action.synchronous?
54
+ def prefer_synchronous?(type)
55
+ find_handler_class(type).action.synchronous?
52
56
  end
53
57
 
54
- def processable?(command)
55
- not find_handler_class(command).nil?
58
+ def processable?(type)
59
+ not find_handler_class(type).nil?
56
60
  end
57
61
 
58
62
  def process(message)
59
- $log.trace("#{log_tag}: process: start")
60
- command = message["type"]
61
- handler_class = find_handler_class(command)
63
+ logger.trace("process: start")
64
+ type = message["type"]
65
+ handler_class = find_handler_class(type)
62
66
  if handler_class.nil?
63
- $log.trace("#{log_tag}: process: done: no handler: <#{command}>")
67
+ logger.trace("process: done: no handler: <#{type}>")
64
68
  return
65
69
  end
66
- process_command(handler_class, command, message)
67
- $log.trace("#{log_tag}: process: done: <#{command}>",
68
- :handler => handler_class)
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 && !@database_name.empty?
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
- @handler_classes = Handler.find_sub_classes(@options[:plugins] || [])
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(command)
82
- @handler_classes.find do |handler_class|
83
- handler_class.message.type == command
84
- end
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 process_command(handler_class, command, raw_message)
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, messenger)
95
- rescue MessageProcessingError => error
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 command
39
+ def type
40
40
  @raw_message["type"]
41
41
  end
42
42
 
43
- def command=(command)
44
- original_command = @raw_message["type"]
45
- return if original_command == command
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"] << original_command
48
- @raw_message["type"] = command
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/message_matcher"
16
+ require "droonga/logger"
17
17
 
18
18
  module Droonga
19
- class Command
20
- attr_reader :method_name
21
- # @option options [Array] :pattern The pattern to be matched
22
- # against message. If the pattern is matched to a message,
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 match?(message)
33
- @matcher.match?(message)
25
+ def log_tag
26
+ nil
34
27
  end
35
28
  end
36
29
  end