1+ # frozen_string_literal: true
2+
13module SearchSolrTools
24 module Errors
35 class HarvestError < StandardError
@@ -10,55 +12,65 @@ class HarvestError < StandardError
1012 ERRCODE_OTHER = 128
1113
1214 ERRCODE_DESC = {
13- ERRCODE_SOLR_PING => 'Solr instance did not return a successful ping' ,
14- ERRCODE_SOURCE_PING => 'Source to be harvested did not return a successful ping' ,
15- ERRCODE_SOURCE_NO_RESULTS => 'Source to be harvested returned no documents matching query' ,
16- ERRCODE_SOURCE_HARVEST_ERROR => 'One or more source documents returned an error when trying to retrieve or translate' ,
17- ERRCODE_DOCUMENT_INVALID => 'One or more documents to be harvested was invalid (malformed)' ,
18- ERRCODE_INGEST_ERROR => 'Solr returned an error trying to ingest one or more harvested documents' ,
19- ERRCODE_OTHER => 'General error code for non-harvest related issues'
15+ ERRCODE_SOLR_PING => 'Solr instance did not return a successful ping' ,
16+ ERRCODE_SOURCE_PING => 'Source to be harvested did not return a successful ping' ,
17+ ERRCODE_SOURCE_NO_RESULTS => 'Source to be harvested returned no documents matching query' ,
18+ ERRCODE_SOURCE_HARVEST_ERROR => 'One or more source documents returned an error when trying to retrieve or translate' ,
19+ ERRCODE_DOCUMENT_INVALID => 'One or more documents to be harvested was invalid (malformed)' ,
20+ ERRCODE_INGEST_ERROR => 'Solr returned an error trying to ingest one or more harvested documents' ,
21+ ERRCODE_OTHER => 'General error code for non-harvest related issues'
2022 } . freeze
2123
2224 PING_ERRCODE_MAP = {
23- 'ping_solr' => ERRCODE_SOLR_PING ,
24- 'ping_source' => ERRCODE_SOURCE_PING ,
25- }
25+ 'ping_solr' => ERRCODE_SOLR_PING ,
26+ 'ping_source' => ERRCODE_SOURCE_PING
27+ } . freeze
2628
2729 STATUS_ERRCODE_MAP = {
28- Helpers ::HarvestStatus ::HARVEST_NO_DOCS => ERRCODE_SOURCE_NO_RESULTS ,
29- Helpers ::HarvestStatus ::HARVEST_FAILURE => ERRCODE_SOURCE_HARVEST_ERROR ,
30- Helpers ::HarvestStatus ::INGEST_ERR_INVALID_DOC => ERRCODE_DOCUMENT_INVALID ,
31- Helpers ::HarvestStatus ::INGEST_ERR_SOLR_ERROR => ERRCODE_INGEST_ERROR ,
32- Helpers ::HarvestStatus ::OTHER_ERROR => ERRCODE_OTHER
30+ Helpers ::HarvestStatus ::HARVEST_NO_DOCS => ERRCODE_SOURCE_NO_RESULTS ,
31+ Helpers ::HarvestStatus ::HARVEST_FAILURE => ERRCODE_SOURCE_HARVEST_ERROR ,
32+ Helpers ::HarvestStatus ::INGEST_ERR_INVALID_DOC => ERRCODE_DOCUMENT_INVALID ,
33+ Helpers ::HarvestStatus ::INGEST_ERR_SOLR_ERROR => ERRCODE_INGEST_ERROR ,
34+ Helpers ::HarvestStatus ::OTHER_ERROR => ERRCODE_OTHER
3335 } . freeze
3436
3537 # If code is -1, it means display all error codes
3638 def self . describe_exit_code ( code = -1 )
39+ code_list = code_to_list ( code )
40+
41+ codes = { }
42+ code_list . each do |k |
43+ next if code == -1 && !ERRCODE_DESC . keys . include? ( k ) # skip INVALID CODE if showing all codes
44+
45+ codes [ k ] = ERRCODE_DESC . keys . include? ( k ) ? ERRCODE_DESC [ k ] : 'INVALID CODE NUMBER'
46+ end
47+
48+ codes
49+ end
50+
51+ # Loop through all bit-flag values to produce a list of integers
52+ def self . code_to_list ( code )
3753 code = code . to_i
3854 code_list = [ ]
3955
40- # Loop through all bit-flag values
4156 [ 128 , 64 , 32 , 16 , 8 , 4 , 2 , 1 ] . each do |k |
4257 if code >= k || code == -1
4358 code_list . prepend k
4459 code -= k unless code == -1
4560 end
4661 end
4762
48- codes = { }
49- code_list . each do |k |
50- next if code == -1 && !ERRCODE_DESC . keys . include? ( k ) # skip INVALID CODE if showing all codes
51- codes [ k ] = ERRCODE_DESC . keys . include? ( k ) ? ERRCODE_DESC [ k ] : 'INVALID CODE NUMBER'
52- end
53-
54- codes
63+ code_list
5564 end
5665
57- def initialize ( status , message = nil )
66+ def initialize ( status , message = nil )
5867 @status_data = status
5968 @other_message = message
69+
70+ super message
6071 end
6172
73+ # rubocop:disable Metrics/AbcSize
6274 def exit_code
6375 if @status_data . nil?
6476 puts "OTHER ERROR REPORTED: #{ @other_message } "
@@ -70,19 +82,20 @@ def exit_code
7082 code = 0
7183 code += ERRCODE_SOLR_PING unless @status_data . ping_solr
7284 code += ERRCODE_SOURCE_PING unless @status_data . ping_source
73- code += ERRCODE_SOURCE_NO_RESULTS if @status_data . status [ Helpers ::HarvestStatus ::HARVEST_NO_DOCS ] > 0
74- code += ERRCODE_SOURCE_HARVEST_ERROR if @status_data . status [ Helpers ::HarvestStatus ::HARVEST_FAILURE ] > 0
75- code += ERRCODE_DOCUMENT_INVALID if @status_data . status [ Helpers ::HarvestStatus ::INGEST_ERR_INVALID_DOC ] > 0
76- code += ERRCODE_INGEST_ERROR if @status_data . status [ Helpers ::HarvestStatus ::INGEST_ERR_SOLR_ERROR ] > 0
85+ code += ERRCODE_SOURCE_NO_RESULTS if @status_data . status [ Helpers ::HarvestStatus ::HARVEST_NO_DOCS ] . positive?
86+ code += ERRCODE_SOURCE_HARVEST_ERROR if @status_data . status [ Helpers ::HarvestStatus ::HARVEST_FAILURE ] . positive?
87+ code += ERRCODE_DOCUMENT_INVALID if @status_data . status [ Helpers ::HarvestStatus ::INGEST_ERR_INVALID_DOC ] . positive?
88+ code += ERRCODE_INGEST_ERROR if @status_data . status [ Helpers ::HarvestStatus ::INGEST_ERR_SOLR_ERROR ] . positive?
7789
78- code = ERRCODE_OTHER if code == 0
90+ code = ERRCODE_OTHER if code . zero?
7991
8092 code
8193 end
94+ # rubocop:enable Metrics/AbcSize
8295
8396 def message
84- self . class . describe_exit_code ( exit_code ) . map { | c , v | v } . join ( "\n " )
97+ self . class . describe_exit_code ( exit_code ) . map { | _c , v | v } . join ( "\n " )
8598 end
8699 end
87100 end
88- end
101+ end
0 commit comments