blacklight-spotlight 0.20.2 → 0.20.3

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: 67c958d969ca32275b0a601a62193550a72ff895
4
- data.tar.gz: 11af2709ad72c89efaec127a523d81adf5514a4e
3
+ metadata.gz: a9f570da0859bafcdda5b278a6c091c078d3923a
4
+ data.tar.gz: f949ab89b4ae716b88a2b1637ed74ed661706193
5
5
  SHA512:
6
- metadata.gz: 6925061b77a27a85c903bbe2d28752c69f0aea0d89c120fc4ca8a5e97bbd5c37faed52105dc92248110660887227ccdeebb604de186eb70d1365cbd4f10b9471
7
- data.tar.gz: cc014078433c7f278038fc9607f78ff1cc9f10160eef8c605acfcf72d30912f5114e0226803fd312eb6ee27858191c1969f5d8e40bd7dc936eb04be618a1e0b2
6
+ metadata.gz: c16e162aefe79ed7d01a1886c7636208cce5d82c5826e921a66ec0e440b41893588ff7c7eaf64bae4862fbbfd943deb20c9ad271074debfa8e4b93297c99bfb6
7
+ data.tar.gz: 5c603afe59cc54c39e476eed12ca820d183007968b68cd1c01c18466216c721f8460bcffad3114dc65de902f1f09f5af2d406134fe4ac8d3c839eae36b26d9b4
@@ -22,7 +22,7 @@ Spotlight.onLoad(function() {
22
22
  }
23
23
 
24
24
  function success(data) {
25
- if (data.in_progress) {
25
+ if (data.recently_in_progress) {
26
26
  monitorPanel().show();
27
27
  updateMonitorPanel(data);
28
28
  } else {
@@ -33,7 +33,7 @@ Spotlight.onLoad(function() {
33
33
  function fail() { monitorPanel().hide(); }
34
34
 
35
35
  function updateMonitorPanel(data) {
36
- panelStartDate().text(data.started);
36
+ panelStartDate().text(data.started_at);
37
37
  panelCurrentDate().text(data.updated_at);
38
38
  panelCompleted().text(data.completed);
39
39
  updatePanelTotals(data);
@@ -100,7 +100,7 @@ module Spotlight
100
100
  end
101
101
 
102
102
  def reindex_progress
103
- @reindex_progress ||= ReindexProgress.new(resources.order('updated_at')) if resources
103
+ @reindex_progress ||= ReindexProgress.new(resources) if resources
104
104
  end
105
105
 
106
106
  protected
@@ -4,23 +4,33 @@ module Spotlight
4
4
  class ReindexProgress
5
5
  def initialize(resource_list)
6
6
  @resources = if resource_list.present?
7
- resource_list
7
+ resource_list.order('updated_at')
8
8
  else
9
- null_resources
9
+ Spotlight::Resource.none
10
10
  end
11
11
  end
12
12
 
13
- def in_progress?
14
- return unless finished
15
- any_waiting? || finished > Spotlight::Engine.config.reindex_progress_window.minutes.ago
13
+ def recently_in_progress?
14
+ any_waiting? || (!!finished_at && finished_at > Spotlight::Engine.config.reindex_progress_window.minutes.ago)
16
15
  end
17
16
 
18
- def started
19
- @started ||= resources.first.indexed_at
17
+ def started_at
18
+ return unless resources.present?
19
+
20
+ @started ||= resources.min_by(&:enqueued_at).enqueued_at
21
+ end
22
+
23
+ def updated_at
24
+ @updated ||= resources.maximum(:updated_at) || started_at
20
25
  end
21
26
 
22
- def finished
23
- @finished ||= completed_resources.last.updated_at
27
+ def finished?
28
+ completed_resources.present? && !any_waiting?
29
+ end
30
+
31
+ def finished_at
32
+ return unless finished?
33
+ @finished ||= completed_resources.max_by(&:last_indexed_finished).last_indexed_finished
24
34
  end
25
35
 
26
36
  def total
@@ -37,11 +47,12 @@ module Spotlight
37
47
 
38
48
  def as_json(*)
39
49
  {
40
- in_progress: in_progress?,
41
- started: localized_start_time,
50
+ recently_in_progress: recently_in_progress?,
51
+ started_at: localized_start_time,
52
+ finished_at: localized_finish_time,
53
+ updated_at: localized_updated_time,
42
54
  total: total,
43
55
  completed: completed,
44
- updated_at: localized_finish_time,
45
56
  errored: errored?
46
57
  }
47
58
  end
@@ -55,53 +66,22 @@ module Spotlight
55
66
  end
56
67
 
57
68
  def localized_start_time
58
- return unless started
59
- I18n.l(started, format: :short)
69
+ return unless started_at
70
+ I18n.l(started_at, format: :short)
60
71
  end
61
72
 
62
73
  def localized_finish_time
63
- return unless finished
64
- I18n.l(finished, format: :short)
65
- end
66
-
67
- def completed_resources
68
- if resources.try(:completed).present?
69
- resources.completed
70
- else
71
- null_resources
72
- end
74
+ return unless finished_at
75
+ I18n.l(finished_at, format: :short)
73
76
  end
74
77
 
75
- def null_resources
76
- [NullResource.new]
78
+ def localized_updated_time
79
+ return unless updated_at
80
+ I18n.l(updated_at, format: :short)
77
81
  end
78
82
 
79
- ##
80
- # A NullObject for use in the absense of resources
81
- class NullResource
82
- def updated_at
83
- nil
84
- end
85
-
86
- def indexed_at
87
- nil
88
- end
89
-
90
- def last_indexed_estimate
91
- 0
92
- end
93
-
94
- def last_indexed_count
95
- 0
96
- end
97
-
98
- def waiting?
99
- false
100
- end
101
-
102
- def errored?
103
- false
104
- end
83
+ def completed_resources
84
+ resources.completed
105
85
  end
106
86
  end
107
87
  end
@@ -15,6 +15,7 @@ module Spotlight
15
15
  belongs_to :exhibit
16
16
  serialize :data, Hash
17
17
  store :metadata, accessors: [
18
+ :enqueued_at,
18
19
  :last_indexed_estimate,
19
20
  :last_indexed_count,
20
21
  :last_index_elapsed_time,
@@ -42,6 +43,16 @@ module Spotlight
42
43
  Spotlight::ReindexJob.perform_later(self)
43
44
  end
44
45
 
46
+ def waiting!
47
+ update(enqueued_at: Time.zone.now)
48
+ super
49
+ end
50
+
51
+ def enqueued_at
52
+ value = super
53
+ Time.zone.parse(value) if value
54
+ end
55
+
45
56
  def document_model
46
57
  exhibit.blacklight_config.document_model if exhibit
47
58
  end
@@ -1,3 +1,3 @@
1
1
  module Spotlight
2
- VERSION = '0.20.2'.freeze
2
+ VERSION = '0.20.3'.freeze
3
3
  end
@@ -1,82 +1,96 @@
1
1
  describe Spotlight::ReindexProgress, type: :model do
2
- let(:start_time) { 20.minutes.ago }
3
- let(:finish_time) { 5.minutes.ago }
4
- let(:first_resource) do
2
+ let(:start_time) { 20.minutes.ago.at_beginning_of_minute }
3
+ let(:finish_time) { 5.minutes.ago.at_beginning_of_minute }
4
+ let(:updated_time) { 1.minute.ago.at_beginning_of_minute }
5
+ let!(:first_resource) do
5
6
  FactoryGirl.create(
6
7
  :resource,
7
- updated_at: 15.minutes.ago,
8
+ updated_at: updated_time,
8
9
  indexed_at: start_time,
10
+ enqueued_at: start_time,
11
+ last_indexed_finished: start_time,
9
12
  last_indexed_estimate: 7,
10
13
  last_indexed_count: 5,
11
14
  index_status: 1
12
15
  )
13
16
  end
14
- let(:last_resource) do
17
+ let!(:last_resource) do
15
18
  FactoryGirl.create(
16
19
  :resource,
17
20
  updated_at: finish_time,
18
- indexed_at: 15.minutes.ago,
21
+ indexed_at: finish_time,
22
+ enqueued_at: start_time,
23
+ last_indexed_finished: finish_time,
19
24
  last_indexed_estimate: 3,
20
25
  last_indexed_count: 2,
21
26
  index_status: 1
22
27
  )
23
28
  end
24
29
  let(:resources) { [first_resource, last_resource] }
25
- subject { described_class.new(resources) }
30
+ subject { described_class.new(Spotlight::Resource.all) }
26
31
  let(:json) { JSON.parse(subject.to_json) }
27
32
 
28
33
  before do
29
34
  allow(subject).to receive_messages(completed_resources: resources)
30
35
  end
31
36
 
32
- describe '#in_progress' do
37
+ describe '#recently_in_progress?' do
33
38
  context 'when the last resource has been updated within the allotted time' do
34
39
  it 'is true' do
35
- expect(subject).to be_in_progress
40
+ expect(subject).to be_recently_in_progress
36
41
  end
37
42
  end
38
43
 
39
44
  context 'when any of the resources is makred as waiting' do
40
45
  before do
41
- expect(last_resource).to receive_messages(updated_at: 12.minutes.ago)
42
46
  first_resource.waiting!
43
47
  end
44
48
  it 'is true' do
45
- expect(subject).to be_in_progress
49
+ expect(subject).to be_recently_in_progress
46
50
  end
47
51
  end
48
52
 
49
53
  context 'when the last resources has been updated outside of the allotted time ' do
50
54
  before do
51
- expect(last_resource).to receive_messages(updated_at: 12.minutes.ago)
55
+ expect(last_resource).to receive_messages(last_indexed_finished: 12.minutes.ago)
52
56
  end
53
57
  it 'is false' do
54
- expect(subject).not_to be_in_progress
58
+ expect(subject).not_to be_recently_in_progress
55
59
  end
56
60
  end
57
61
 
58
62
  it 'is included in the json' do
59
- expect(json['in_progress']).to be true
63
+ expect(json['recently_in_progress']).to be true
60
64
  end
61
65
  end
62
66
 
63
- describe '#started' do
67
+ describe '#started_at' do
64
68
  it 'returns the indexed_at attribute of the first resource' do
65
- expect(subject.started).to eq start_time
69
+ expect(subject.started_at).to eq start_time
66
70
  end
67
71
 
68
72
  it 'is included in the json as a localized string' do
69
- expect(json['started']).to eq I18n.l(start_time, format: :short)
73
+ expect(json['started_at']).to eq I18n.l(start_time, format: :short)
70
74
  end
71
75
  end
72
76
 
73
- describe '#finished' do
77
+ describe '#updated_at' do
74
78
  it 'returns the updated_at attribute of the last resource' do
75
- expect(subject.finished).to eq finish_time
79
+ expect(subject.updated_at).to eq updated_time
76
80
  end
77
81
 
78
82
  it 'is included in the json as a localized string under the updated_at attribute' do
79
- expect(json['updated_at']).to eq I18n.l(finish_time, format: :short)
83
+ expect(json['updated_at']).to eq I18n.l(updated_time, format: :short)
84
+ end
85
+ end
86
+
87
+ describe '#finished_at' do
88
+ it 'returns the updated_at attribute of the last resource' do
89
+ expect(subject.finished_at).to eq finish_time
90
+ end
91
+
92
+ it 'is included in the json as a localized string under the updated_at attribute' do
93
+ expect(json['finished_at']).to eq I18n.l(finish_time, format: :short)
80
94
  end
81
95
  end
82
96
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: blacklight-spotlight
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.2
4
+ version: 0.20.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer