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:
Infineon\StieberD
2025-11-11 12:14:58 -07:00
parent 39bdf5f9cb
commit 60e70b9958

View File

@ -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