Modfied NICA_ORDERS_SERVICES to back off exponentially when it encounters an HTTP error response. Added 200 response status code check. Added additional logging.
Modified services to ensure NICA_ORDERS record is always unlocked after canceling or updating the status
This commit is contained in:
@ -448,9 +448,9 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
|
||||
OrderId = ''
|
||||
|
||||
Loop
|
||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||
WaitSeconds = (3 - retries) * BackoffSeconds
|
||||
Delay(WaitSeconds)
|
||||
While (IsSuccessful EQ False$ and Retries GT 0)
|
||||
WaitSeconds = ( (3 - Retries) * BackoffSeconds ) ** 2
|
||||
If WaitSeconds GT 0 then Delay(WaitSeconds)
|
||||
|
||||
Retries = Retries - 1
|
||||
If Body NE '' then
|
||||
@ -472,6 +472,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
|
||||
end
|
||||
|
||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', NicaURL, Headers, Body, '', '', False$, False$, '', IgnoreCertErrors)
|
||||
HttpResponseStatusCode = Httpclient_Services('GetResponseStatusCode')
|
||||
|
||||
LogData<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
|
||||
LogData<2> = Machine
|
||||
@ -484,7 +485,8 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
|
||||
OSWrite LogBytes to LogPath:'\':LogFileName
|
||||
end
|
||||
|
||||
If HttpResponseJson NE '' then
|
||||
If (HttpResponseStatusCode EQ 200) then
|
||||
If (HttpResponseJson NE '') then
|
||||
ObjResponseJson = ''
|
||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||
OrderId = SRP_JSON(ObjResponseJson, 'GetValue', 'id')
|
||||
@ -552,14 +554,18 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null OrderId returned from MesaProveInAPI.'
|
||||
ErrorMsg = 'Error in ':Service:' service. Null OrderId returned from NicaIntegrationService.'
|
||||
end
|
||||
SRP_JSON(ObjResponseJson, 'Release')
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Error parsing JSON response from MesaProveInAPI.'
|
||||
ErrorMsg = 'Error in ':Service:' service. Error parsing JSON response from NicaIntegrationService.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null JSON response returned from MesaProveInAPI.'
|
||||
ErrorMsg = 'Error in ':Service:' service. Null JSON response returned from NicaIntegrationService.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Expected 200 http response status code from NicaIntegrationService. ':HttpResponseStatusCode:' returned. '
|
||||
ErrorMsg := 'Http Response Status Phrase: ':HttpClient_Services('GetResponseStatusPhrase')
|
||||
end
|
||||
Repeat
|
||||
end
|
||||
@ -574,7 +580,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
Mona_Services('PostStatus', MonaResource, StatusName, 'Ok')
|
||||
end else
|
||||
ErrorMsg = 'Error encountered when attempting to create Nica in order for reactor ':ReactNo:' of type ':OrderType
|
||||
ErrorMsg = 'Error encountered when attempting to create Nica in order for reactor ':ReactNo:' of type ':OrderType:'. Error message: ':ErrorMsg
|
||||
Mona_Services('PostStatus', MonaResource, StatusName, 'Critical')
|
||||
end
|
||||
end
|
||||
@ -624,8 +630,8 @@ Service CancelOrder(OrderId)
|
||||
HaveLock = False$
|
||||
Loop
|
||||
While (HaveLock EQ False$ and LockRetries GT 0)
|
||||
WaitSeconds = (3 - LockRetries) * LockBackoffSeconds
|
||||
Delay(WaitSeconds)
|
||||
WaitSeconds = ( (3 - LockRetries) * LockBackoffSeconds ) ** 2
|
||||
If WaitSeconds GT 0 then Delay(WaitSeconds)
|
||||
LockRetries = LockRetries - 1
|
||||
HaveLock = Database_Services('GetKeyIDLock', 'NICA_ORDERS', OrderId, True$)
|
||||
Repeat
|
||||
@ -667,11 +673,13 @@ Service CancelOrder(OrderId)
|
||||
|
||||
Loop
|
||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||
WaitSeconds = (3 - Retries) * BackoffSeconds
|
||||
Delay(WaitSeconds)
|
||||
WaitSeconds = ( (3 - Retries) * BackoffSeconds) ** 2
|
||||
If WaitSeconds GT 0 then Delay(WaitSeconds)
|
||||
Retries = Retries - 1
|
||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'PUT', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '', IgnoreCertErrors)
|
||||
If HttpResponseJson NE '' then
|
||||
HttpResponseStatusCode = Httpclient_Services('GetResponseStatusCode')
|
||||
If (HttpResponseStatusCode EQ 200) then
|
||||
If (HttpResponseJson NE '') then
|
||||
ObjResponseJson = ''
|
||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||
@ -714,7 +722,15 @@ Service CancelOrder(OrderId)
|
||||
end else
|
||||
Response = False$
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Error parsing JSON response from NICAIntegrationService.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null response returned from NICAIntegrationService.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Expected 200 http response status code from NICAIntegrationService. Received ':HttpResponseStatusCode
|
||||
ErrorMsg := 'Http response status phrase: ':HttpClient_Services('GetResponseStatusPhrase')
|
||||
end
|
||||
SRP_JSON(ObjResponseJson, 'Release')
|
||||
Repeat
|
||||
@ -728,13 +744,13 @@ Service CancelOrder(OrderId)
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
Mona_Services('PostStatus', MonaResource, StatusName, 'Ok')
|
||||
end else
|
||||
ErrorMsg = 'Error encountered cancelling Nica order ' : OrderId : ' for reactor ' : ReactNo
|
||||
ErrorMsg = 'Error encountered cancelling Nica order ' : OrderId : ' for reactor ' : ReactNo : 'Error message: ':ErrorMsg
|
||||
Mona_Services('PostStatus', MonaResource, StatusName, 'Critical')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
|
||||
end
|
||||
If Database_Services('IsKeyIDSelfLocked', 'NICA_ORDERS', OrderId) then Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Failed to lock NICA_ORDERS ':OrderId:' for cancellation.'
|
||||
end
|
||||
@ -831,12 +847,13 @@ Service GetOrderStatusUpdate(OrderId)
|
||||
|
||||
Loop
|
||||
while (IsSuccessful EQ False$ and Retries GT 0)
|
||||
WaitSeconds = (3 - Retries) * BackoffSeconds
|
||||
Delay(WaitSeconds)
|
||||
WaitSeconds = ( (3 - Retries) * BackoffSeconds ) ** 2
|
||||
If WaitSeconds GT 0 then Delay(WaitSeconds)
|
||||
Retries = Retries - 1
|
||||
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '', IgnoreCertErrors)
|
||||
|
||||
If HttpResponseJson NE '' then
|
||||
HttpResponseStatusCode = Httpclient_Services('GetResponseStatusCode')
|
||||
If (HttpResponseStatusCode EQ 200) then
|
||||
If (HttpResponseJson NE '') then
|
||||
ObjResponseJson = ''
|
||||
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
|
||||
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
|
||||
@ -931,8 +948,16 @@ Service GetOrderStatusUpdate(OrderId)
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Error parsing JSON response from NicaIntegrationService.'
|
||||
end
|
||||
SRP_JSON(ObjResponseJson, 'Release')
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Null JSON response returned from NicaIntegrationService.'
|
||||
end
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Expected 200 http response status code from NicaIntegrationService. ':HttpResponseStatusCode:' returned. '
|
||||
ErrorMsg := 'Http Response Status Phrase: ':HttpClient_Services('GetResponseStatusPhrase')
|
||||
end
|
||||
Repeat
|
||||
|
||||
@ -945,14 +970,14 @@ Service GetOrderStatusUpdate(OrderId)
|
||||
Mona_Services('PostStatus', MonaResource, StatusName, 'Ok')
|
||||
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
|
||||
end else
|
||||
Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
|
||||
ErrorMsg = 'Error encountered updating Nica order ':OrderId:' for reactor ':ReactNo:'.'
|
||||
ErrorMsg = 'Error encountered updating Nica order ':OrderId:' for reactor ':ReactNo:'. Error message: ':ErrorMsg
|
||||
Mona_Services('PostStatus', MonaResource, StatusName, 'Critical')
|
||||
end
|
||||
end
|
||||
end else
|
||||
ErrorMsg = Error_Services('GetMessage')
|
||||
end
|
||||
If Database_Services('IsKeyIDSelfLocked', 'NICA_ORDERS', OrderId) then Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
|
||||
end else
|
||||
ErrorMsg = 'Error in ':Service:' service. Failed to lock NICA_ORDERS ':OrderId:'.'
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user