gi_cat_driver 0.0.4 → 0.0.5

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,3 +1,3 @@
1
1
  module GiCatDriver
2
- VERSION = "0.0.4"
2
+ VERSION = "0.0.5"
3
3
  end
data/lib/gi_cat_driver.rb CHANGED
@@ -4,6 +4,7 @@ require "open-uri"
4
4
  require "rest-client"
5
5
  require "base64"
6
6
  require 'nokogiri'
7
+ require 'timeout'
7
8
 
8
9
  # The GI-Cat Driver
9
10
  module GiCatDriver
@@ -11,12 +12,13 @@ module GiCatDriver
11
12
 
12
13
  ATOM_NAMESPACE = { "atom" => "http://www.w3.org/2005/Atom" }
13
14
  RELEVANCE_NAMESPACE = { "relevance" => "http://a9.com/-/opensearch/extensions/relevance/1.0/" }
14
- attr_accessor :base_url
15
+ attr_accessor :base_url, :harvestersid_array
15
16
 
16
17
  def initialize( url, username, password )
17
- self.base_url = url.sub(/\/+$/, '')
18
+ @base_url = url.sub(/\/+$/, '')
18
19
  @admin_username = username
19
20
  @admin_password = password
21
+ @harvestersid_array = []
20
22
  end
21
23
 
22
24
  def basic_auth_string
@@ -32,13 +34,13 @@ module GiCatDriver
32
34
 
33
35
  # Check whether the URL is accessible
34
36
  def is_running?
35
- open(self.base_url).status[0] == "200"
37
+ open(@base_url).status[0] == "200"
36
38
  end
37
39
 
38
40
  # Retrieve the ID for a profile given the name
39
41
  # Returns an integer ID reference to the profile
40
42
  def find_profile_id( profile_name )
41
- get_profiles_request = "#{self.base_url}/services/conf/brokerConfigurations?nameRepository=gicat"
43
+ get_profiles_request = "#{@base_url}/services/conf/brokerConfigurations?nameRepository=gicat"
42
44
  modified_headers = standard_headers.merge({
43
45
  :content_type => "*/*",
44
46
  :Accept => 'application/xml'
@@ -59,7 +61,7 @@ module GiCatDriver
59
61
  def enable_profile( profile_name )
60
62
  profile_id = find_profile_id(profile_name)
61
63
  raise "The specified profile could not be found." if profile_id.nil?
62
- activate_profile_request = "#{self.base_url}/services/conf/brokerConfigurations/#{profile_id}?opts=active"
64
+ activate_profile_request = "#{@base_url}/services/conf/brokerConfigurations/#{profile_id}?opts=active"
63
65
 
64
66
  RestClient.get(activate_profile_request, standard_headers)
65
67
  end
@@ -67,7 +69,7 @@ module GiCatDriver
67
69
  # Retrieve the ID for the active profile
68
70
  # Returns an integer ID reference to the active profile
69
71
  def get_active_profile_id
70
- active_profile_request = "#{self.base_url}/services/conf/giconf/configuration"
72
+ active_profile_request = "#{@base_url}/services/conf/giconf/configuration"
71
73
 
72
74
  return RestClient.get(active_profile_request, standard_headers)
73
75
  end
@@ -83,12 +85,12 @@ module GiCatDriver
83
85
  end
84
86
 
85
87
  def set_lucene_enabled( enabled )
86
- enable_lucene_request = "#{self.base_url}/services/conf/brokerConfigurations/#{get_active_profile_id}/luceneEnabled"
88
+ enable_lucene_request = "#{@base_url}/services/conf/brokerConfigurations/#{get_active_profile_id}/luceneEnabled"
87
89
  RestClient.put(enable_lucene_request,
88
90
  enabled.to_s,
89
91
  standard_headers)
90
92
 
91
- activate_profile_request = "#{self.base_url}/services/conf/brokerConfigurations/#{get_active_profile_id}?opts=active"
93
+ activate_profile_request = "#{@base_url}/services/conf/brokerConfigurations/#{get_active_profile_id}?opts=active"
92
94
  RestClient.get(activate_profile_request,
93
95
  standard_headers)
94
96
  end
@@ -99,12 +101,61 @@ module GiCatDriver
99
101
  # Returns true if Lucene is turned on
100
102
  def is_lucene_enabled?
101
103
  query_string = EsipOpensearchQueryBuilder::get_query_string({ :st => "snow" })
102
- results = Nokogiri::XML(open("#{self.base_url}/services/opensearchesip#{query_string}"))
104
+ results = Nokogiri::XML(open("#{@base_url}/services/opensearchesip#{query_string}"))
103
105
 
104
106
  result_scores = results.xpath('//atom:feed/atom:entry/relevance:score', ATOM_NAMESPACE.merge(RELEVANCE_NAMESPACE))
105
107
  result_scores.map { |score| score.text }
106
108
 
107
109
  return result_scores.count > 0
108
110
  end
111
+
112
+ def add_new_uuids(new_harvesterids_array)
113
+ @harvestersid_array += new_harvesterids_array
114
+ end
115
+
116
+ def harvest_resource_for_active_configuration(harvesterid)
117
+ RestClient.get(
118
+ "#{@base_url}/services/conf/brokerConfigurations/#{self.get_active_profile_id}/harvesters/#{harvesterid}/start",
119
+ standard_headers){ |response, request, result, &block|
120
+ case response.code
121
+ when 200
122
+ p "Harvest initiated. Please wait a couple minutes for the process to complete."
123
+ else
124
+ raise "Failed to start GI-Cat resource harvest."
125
+ response.return!(request, result, &block)
126
+ end
127
+ }
128
+ end
129
+
130
+ def harvest_all_resources_for_active_configuration
131
+ harvestersid_array.each do |harvesterid|
132
+ harvest_resource_for_active_configuration(harvesterid)
133
+ end
134
+ end
135
+
136
+ def havest_request_is_done(harvesterid)
137
+ while(1) do
138
+ rnum=rand
139
+ request = @base_url + "/services/conf/giconf/status?id=#{harvesterid}&rand=#{rnum}"
140
+ response = RestClient.get request
141
+ teststring = String.new(response.body)
142
+ if teststring.include?("Harvesting completed")
143
+ break
144
+ end
145
+ end
146
+ end
147
+
148
+ def confirm_harvest_done
149
+ begin
150
+ Timeout::timeout(10) do
151
+ harvestersid_array.each do |harvesterid|
152
+ havest_request_is_done(harvesterid)
153
+ end
154
+ end
155
+ rescue Timeout::Error
156
+ puts "Warning: reharvest is time out, we are going to reuse the previous harvest results"
157
+ end
158
+ end
159
+
109
160
  end
110
161
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gi_cat_driver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2013-03-15 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rest-client
16
- requirement: &70192214690020 !ruby/object:Gem::Requirement
16
+ requirement: &70269247878280 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 1.6.7
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70192214690020
24
+ version_requirements: *70269247878280
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: nokogiri
27
- requirement: &70192214688980 !ruby/object:Gem::Requirement
27
+ requirement: &70269247877180 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ~>
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.5.6
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70192214688980
35
+ version_requirements: *70269247877180
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: bundler
38
- requirement: &70192214688140 !ruby/object:Gem::Requirement
38
+ requirement: &70269247876400 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: '1.3'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70192214688140
46
+ version_requirements: *70269247876400
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rake
49
- requirement: &70192214687340 !ruby/object:Gem::Requirement
49
+ requirement: &70269247875540 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 10.0.3
55
55
  type: :development
56
56
  prerelease: false
57
- version_requirements: *70192214687340
57
+ version_requirements: *70269247875540
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: rspec
60
- requirement: &70192214686420 !ruby/object:Gem::Requirement
60
+ requirement: &70269247874660 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ~>
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: 2.13.0
66
66
  type: :development
67
67
  prerelease: false
68
- version_requirements: *70192214686420
68
+ version_requirements: *70269247874660
69
69
  description: Configure and control deployed instances of GI-Cat.
70
70
  email:
71
71
  - stuart.reed@nsidc.org