chef-solr 0.9.18 → 0.10.0.beta.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.
@@ -1,5 +1,11 @@
1
1
  class Chef
2
2
  class Solr
3
- VERSION = '0.9.18'
3
+ VERSION = '0.10.0.beta.0'
4
+
5
+ # Solr Schema. Used to detect incompatibilities between installed solr and
6
+ # chef-solr versions.
7
+ SCHEMA_NAME = "chef"
8
+ SCHEMA_VERSION = '1.2'
9
+
4
10
  end
5
11
  end
Binary file
Binary file
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chef-solr
3
3
  version: !ruby/object:Gem::Version
4
- prerelease:
5
- version: 0.9.18
4
+ prerelease: 7
5
+ version: 0.10.0.beta.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Adam Jacob
@@ -10,47 +10,25 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-06-29 00:00:00 -07:00
13
+ date: 2011-03-28 00:00:00 -07:00
14
14
  default_executable:
15
15
  dependencies:
16
- - !ruby/object:Gem::Dependency
17
- name: libxml-ruby
18
- prerelease: false
19
- requirement: &id001 !ruby/object:Gem::Requirement
20
- none: false
21
- requirements:
22
- - - ">="
23
- - !ruby/object:Gem::Version
24
- version: 1.1.3
25
- type: :runtime
26
- version_requirements: *id001
27
- - !ruby/object:Gem::Dependency
28
- name: uuidtools
29
- prerelease: false
30
- requirement: &id002 !ruby/object:Gem::Requirement
31
- none: false
32
- requirements:
33
- - - ">="
34
- - !ruby/object:Gem::Version
35
- version: 2.0.0
36
- type: :runtime
37
- version_requirements: *id002
38
16
  - !ruby/object:Gem::Dependency
39
17
  name: chef
40
18
  prerelease: false
41
- requirement: &id003 !ruby/object:Gem::Requirement
19
+ requirement: &id001 !ruby/object:Gem::Requirement
42
20
  none: false
43
21
  requirements:
44
22
  - - "="
45
23
  - !ruby/object:Gem::Version
46
- version: 0.9.18
24
+ version: 0.10.0.beta.0
47
25
  type: :runtime
48
- version_requirements: *id003
26
+ version_requirements: *id001
49
27
  description:
50
28
  email: adam@opscode.com
51
29
  executables:
52
30
  - chef-solr
53
- - chef-solr-indexer
31
+ - chef-solr-installer
54
32
  - chef-solr-rebuild
55
33
  extensions: []
56
34
 
@@ -61,23 +39,15 @@ files:
61
39
  - Rakefile
62
40
  - LICENSE
63
41
  - bin/chef-solr
64
- - bin/chef-solr-indexer
42
+ - bin/chef-solr-installer
65
43
  - bin/chef-solr-rebuild
66
- - lib/chef/solr/application/indexer.rb
67
44
  - lib/chef/solr/application/rebuild.rb
68
45
  - lib/chef/solr/application/solr.rb
69
- - lib/chef/solr/index.rb
70
- - lib/chef/solr/index_queue_consumer.rb
71
- - lib/chef/solr/query.rb
46
+ - lib/chef/solr/solr_installer.rb
72
47
  - lib/chef/solr/version.rb
73
48
  - lib/chef/solr.rb
74
49
  - solr/solr-home.tar.gz
75
50
  - solr/solr-jetty.tar.gz
76
- - spec/chef/solr/index_spec.rb
77
- - spec/chef/solr/query_spec.rb
78
- - spec/chef/solr_spec.rb
79
- - spec/spec.opts
80
- - spec/spec_helper.rb
81
51
  has_rdoc: true
82
52
  homepage: http://wiki.opscode.com/display/chef
83
53
  licenses: []
@@ -96,9 +66,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
96
66
  required_rubygems_version: !ruby/object:Gem::Requirement
97
67
  none: false
98
68
  requirements:
99
- - - ">="
69
+ - - ">"
100
70
  - !ruby/object:Gem::Version
101
- version: "0"
71
+ version: 1.3.1
102
72
  requirements: []
103
73
 
104
74
  rubyforge_project:
@@ -1,148 +0,0 @@
1
- #
2
- # Author:: AJ Christensen (<aj@opscode.com)
3
- # Copyright:: Copyright (c) 2008 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
-
18
- require 'chef'
19
- require 'chef/log'
20
- require 'chef/config'
21
- require 'chef/application'
22
- require 'chef/solr'
23
- require 'chef/solr/index'
24
- require 'chef/solr/index_queue_consumer'
25
- require 'chef/daemon'
26
- require 'chef/webui_user'
27
-
28
- class Chef
29
- class Solr
30
- class Application
31
- class Indexer < Chef::Application
32
-
33
- option :config_file,
34
- :short => "-c CONFIG",
35
- :long => "--config CONFIG",
36
- :default => "/etc/chef/solr.rb",
37
- :description => "The configuration file to use"
38
-
39
- option :log_level,
40
- :short => "-l LEVEL",
41
- :long => "--log_level LEVEL",
42
- :description => "Set the log level (debug, info, warn, error, fatal)",
43
- :proc => lambda { |l| l.to_sym }
44
-
45
- option :log_location,
46
- :short => "-L LOGLOCATION",
47
- :long => "--logfile LOGLOCATION",
48
- :description => "Set the log file location, defaults to STDOUT - recommended for daemonizing",
49
- :proc => nil
50
-
51
- option :pid_file,
52
- :short => "-P PID_FILE",
53
- :long => "--pid PIDFILE",
54
- :description => "Set the PID file location, defaults to /tmp/chef-solr-indexer.pid",
55
- :proc => nil
56
-
57
-
58
- option :help,
59
- :short => "-h",
60
- :long => "--help",
61
- :description => "Show this message",
62
- :on => :tail,
63
- :boolean => true,
64
- :show_options => true,
65
- :exit => 0
66
-
67
- option :user,
68
- :short => "-u USER",
69
- :long => "--user USER",
70
- :description => "User to set privilege to",
71
- :proc => nil
72
-
73
- option :group,
74
- :short => "-g GROUP",
75
- :long => "--group GROUP",
76
- :description => "Group to set privilege to",
77
- :proc => nil
78
-
79
- option :daemonize,
80
- :short => "-d",
81
- :long => "--daemonize",
82
- :description => "Daemonize the process",
83
- :proc => lambda { |p| true }
84
-
85
- option :amqp_host,
86
- :long => "--amqp-host HOST",
87
- :description => "The amqp host"
88
-
89
- option :amqp_port,
90
- :long => "--amqp-port PORT",
91
- :description => "The amqp port"
92
-
93
- option :amqp_user,
94
- :long => "--amqp-user USER",
95
- :description => "The amqp user"
96
-
97
- option :amqp_pass,
98
- :long => "--amqp-pass PASS",
99
- :description => "The amqp password"
100
-
101
- option :amqp_vhost,
102
- :long => "--amqp-vhost VHOST",
103
- :description => "The amqp vhost"
104
-
105
- option :version,
106
- :short => "-v",
107
- :long => "--version",
108
- :description => "Show chef-solr-indexer version",
109
- :boolean => true,
110
- :proc => lambda {|v| puts "chef-solr-indexer: #{::Chef::Solr::VERSION}"},
111
- :exit => 0
112
-
113
- Signal.trap("INT") do
114
- begin
115
- AmqpClient.instance.stop
116
- rescue Bunny::ProtocolError, Bunny::ConnectionError, Bunny::UnsubscribeError
117
- end
118
- fatal!("SIGINT received, stopping", 2)
119
- end
120
-
121
- Kernel.trap("TERM") do
122
- begin
123
- AmqpClient.instance.stop
124
- rescue Bunny::ProtocolError, Bunny::ConnectionError, Bunny::UnsubscribeError
125
- end
126
- fatal!("SIGTERM received, stopping", 1)
127
- end
128
-
129
- def initialize
130
- super
131
-
132
- @index = Chef::Solr::Index.new
133
- @consumer = Chef::Solr::IndexQueueConsumer.new
134
- end
135
-
136
- def setup_application
137
- Chef::Daemon.change_privilege
138
- Chef::Log.level = Chef::Config[:log_level]
139
- end
140
-
141
- def run_application
142
- Chef::Daemon.daemonize("chef-solr-indexer") if Chef::Config[:daemonize]
143
- @consumer.start
144
- end
145
- end
146
- end
147
- end
148
- end
@@ -1,103 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2009 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'chef/log'
20
- require 'chef/config'
21
- require 'chef/solr'
22
- require 'libxml'
23
- require 'net/http'
24
-
25
- class Chef
26
- class Solr
27
- class Index < Solr
28
-
29
- UNDERSCORE = '_'
30
- X = 'X'
31
-
32
- X_CHEF_id_CHEF_X = 'X_CHEF_id_CHEF_X'
33
- X_CHEF_database_CHEF_X = 'X_CHEF_database_CHEF_X'
34
- X_CHEF_type_CHEF_X = 'X_CHEF_type_CHEF_X'
35
-
36
- def add(id, database, type, item)
37
- unless item.respond_to?(:keys)
38
- raise ArgumentError, "#{self.class.name} can only index Hash-like objects. You gave #{item.inspect}"
39
- end
40
-
41
- to_index = flatten_and_expand(item)
42
-
43
- to_index[X_CHEF_id_CHEF_X] = [id]
44
- to_index[X_CHEF_database_CHEF_X] = [database]
45
- to_index[X_CHEF_type_CHEF_X] = [type]
46
-
47
- solr_add(to_index)
48
- to_index
49
- end
50
-
51
- def delete(id)
52
- solr_delete_by_id(id)
53
- end
54
-
55
- def delete_by_query(query)
56
- solr_delete_by_query(query)
57
- end
58
-
59
- def flatten_and_expand(item)
60
- @flattened_item = Hash.new {|hash, key| hash[key] = []}
61
-
62
- item.each do |key, value|
63
- flatten_each([key.to_s], value)
64
- end
65
-
66
- @flattened_item.each_value { |values| values.uniq! }
67
- @flattened_item
68
- end
69
-
70
- def flatten_each(keys, values)
71
- case values
72
- when Hash
73
- values.each do |child_key, child_value|
74
- add_field_value(keys, child_key)
75
- flatten_each(keys + [child_key.to_s], child_value)
76
- end
77
- when Array
78
- values.each { |child_value| flatten_each(keys, child_value) }
79
- else
80
- add_field_value(keys, values)
81
- end
82
- end
83
-
84
- def add_field_value(keys, value)
85
- value = value.to_s
86
- each_expando_field(keys) { |expando_field| @flattened_item[expando_field] << value }
87
- @flattened_item[keys.join(UNDERSCORE)] << value
88
- @flattened_item[keys.last] << value
89
- end
90
-
91
- def each_expando_field(keys)
92
- return if keys.size == 1
93
- 0.upto(keys.size - 1) do |index|
94
- original = keys[index]
95
- keys[index] = X
96
- yield keys.join(UNDERSCORE)
97
- keys[index] = original
98
- end
99
- end
100
-
101
- end
102
- end
103
- end
@@ -1,82 +0,0 @@
1
- #
2
- # Author:: Adam Jacob (<adam@opscode.com>)
3
- # Copyright:: Copyright (c) 2009 Opscode, Inc.
4
- # License:: Apache License, Version 2.0
5
- #
6
- # Licensed under the Apache License, Version 2.0 (the "License");
7
- # you may not use this file except in compliance with the License.
8
- # You may obtain a copy of the License at
9
- #
10
- # http://www.apache.org/licenses/LICENSE-2.0
11
- #
12
- # Unless required by applicable law or agreed to in writing, software
13
- # distributed under the License is distributed on an "AS IS" BASIS,
14
- # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
- # See the License for the specific language governing permissions and
16
- # limitations under the License.
17
- #
18
-
19
- require 'chef/log'
20
- require 'chef/config'
21
- require 'chef/solr'
22
- require 'chef/solr/index'
23
- require 'chef/couchdb'
24
- require 'chef/index_queue'
25
-
26
- class Chef
27
- class Solr
28
- class IndexQueueConsumer
29
- include Chef::IndexQueue::Consumer
30
-
31
- expose :add, :delete
32
-
33
- def add(payload)
34
- index = Chef::Solr::Index.new
35
- Chef::Log.debug("Dequeued item for indexing: #{payload.inspect}")
36
-
37
- begin
38
- # older producers will send the raw item, and we no longer inflate it
39
- # to an object.
40
- pitem = payload["item"].to_hash
41
- pitem.delete("json_class")
42
- response = generate_response { index.add(payload["id"], payload["database"], payload["type"], pitem) }
43
- rescue NoMethodError
44
- response = generate_response() { raise ArgumentError, "Payload item does not respond to :keys or :to_hash, cannot index!" }
45
- end
46
-
47
- msg = "Indexing #{payload["type"]} #{payload["id"]} from #{payload["database"]} status #{status_message(response)}}"
48
- Chef::Log.info(msg)
49
- response
50
- end
51
-
52
- def delete(payload)
53
- response = generate_response { Chef::Solr::Index.new.delete(payload["id"]) }
54
- Chef::Log.info("Removed #{payload["id"]} from the index")
55
- response
56
- end
57
-
58
- private
59
-
60
- def generate_response(&block)
61
- response = {}
62
- begin
63
- block.call
64
- rescue => e
65
- response[:status] = :error
66
- response[:error] = e
67
- else
68
- response[:status] = :ok
69
- end
70
- response
71
- end
72
-
73
- def status_message(response)
74
- msg = response[:status].to_s
75
- msg << ' ' + response[:error].to_s if response[:status] == :error
76
- msg
77
- end
78
-
79
- end
80
- end
81
- end
82
-