@@ -7,89 +7,19 @@ class RegistryConnector
77 attr_accessor :request
88
99 def self . perform_request ( request , url )
10- response = Net ::HTTP . start ( url . host , url . port ,
11- use_ssl : url . scheme == 'https' ) do |http |
10+ response = Net ::HTTP . start ( url . host , url . port , use_ssl : url . scheme == 'https' ) do |http |
1211 http . request ( request )
1312 end
1413
15- body_as_string = response . body
16- code_as_string = response . code . to_s
17-
18- if [ HTTP_CREATED , HTTP_SUCCESS ] . include? ( code_as_string )
19- JSON . parse ( body_as_string )
20- else
21- raise CommunicationError . new ( request , code_as_string )
22- end
14+ handle_response ( response , request )
2315 rescue Timeout ::Error , SocketError , Errno ::ECONNREFUSED => e
24- logger . error ( {
25- timestamp : Time . current . utc . iso8601 ( 3 ) ,
26- level : 'error' ,
27- message : 'Registry API network connection failed' ,
28- event : 'registry.api.network_error' ,
29- service : 'rest-whois' ,
30- environment : Rails . env ,
31- host : Socket . gethostname ,
32- pid : Process . pid ,
33- error : {
34- type : e . class . name ,
35- message : e . message
36- } ,
37- details : {
38- url : url . to_s ,
39- request_method : request . method ,
40- request_uri : request . uri
41- } ,
42- schema_version : '1.0.0' ,
43- log_version : '1.0.0'
44- } . to_json )
16+ log_error ( e , request , url , 'network_error' )
4517 false
4618 rescue CommunicationError => e
47- logger . error ( {
48- timestamp : Time . current . utc . iso8601 ( 3 ) ,
49- level : 'error' ,
50- message : 'Registry API communication error' ,
51- event : 'registry.api.communication_error' ,
52- service : 'rest-whois' ,
53- environment : Rails . env ,
54- host : Socket . gethostname ,
55- pid : Process . pid ,
56- error : {
57- type : e . class . name ,
58- message : e . message
59- } ,
60- details : {
61- url : url . to_s ,
62- request_method : request . method ,
63- request_uri : request . uri ,
64- response_body : response &.body
65- } ,
66- schema_version : '1.0.0' ,
67- log_version : '1.0.0'
68- } . to_json )
19+ log_error ( e , request , url , 'communication_error' , e . response )
6920 false
7021 rescue StandardError => e
71- logger . error ( {
72- timestamp : Time . current . utc . iso8601 ( 3 ) ,
73- level : 'error' ,
74- message : 'Registry API unexpected error' ,
75- event : 'registry.api.unexpected_error' ,
76- service : 'rest-whois' ,
77- environment : Rails . env ,
78- host : Socket . gethostname ,
79- pid : Process . pid ,
80- error : {
81- type : e . class . name ,
82- message : e . message ,
83- stack : e . backtrace &.first ( 5 ) &.join ( ' | ' )
84- } ,
85- details : {
86- url : url . to_s ,
87- request_method : request . method ,
88- request_uri : request . uri
89- } ,
90- schema_version : '1.0.0' ,
91- log_version : '1.0.0'
92- } . to_json )
22+ log_error ( e , request , url , 'unexpected_error' )
9323 false
9424 end
9525
@@ -127,4 +57,50 @@ def self.request_by_type(type)
12757 def self . logger
12858 Rails . logger
12959 end
60+
61+ private_class_method
62+
63+ def self . handle_response ( response , request )
64+ if [ HTTP_CREATED , HTTP_SUCCESS ] . include? ( response . code . to_s )
65+ JSON . parse ( response . body )
66+ else
67+ raise CommunicationError . new ( request , response )
68+ end
69+ end
70+
71+ def self . log_error ( exception , request , url , event , response = nil )
72+ logger . error ( {
73+ timestamp : Time . current . utc . iso8601 ( 3 ) ,
74+ level : 'error' ,
75+ message : "Registry API #{ event . gsub ( '_' , ' ' ) } " ,
76+ event : "registry.api.#{ event } " ,
77+ service : 'rest-whois' ,
78+ environment : Rails . env ,
79+ host : Socket . gethostname ,
80+ pid : Process . pid ,
81+ error : {
82+ type : exception . class . name ,
83+ message : exception . message ,
84+ stack : exception . backtrace &.first ( 5 ) &.join ( ' | ' )
85+ } ,
86+ details : {
87+ url : url . to_s ,
88+ request_method : request &.method ,
89+ request_uri : request &.uri ,
90+ response_body : response &.body
91+ } ,
92+ schema_version : '1.0.0' ,
93+ log_version : '1.0.0'
94+ } . to_json )
95+ end
96+ end
97+
98+ class CommunicationError < StandardError
99+ attr_reader :request , :response
100+
101+ def initialize ( request = nil , response = nil )
102+ @request = request
103+ @response = response
104+ super ( "Communication failed with status #{ response &.code } " )
105+ end
130106end
0 commit comments