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 = '' OrderId = ''
Loop Loop
while (IsSuccessful EQ False$ and Retries GT 0) While (IsSuccessful EQ False$ and Retries GT 0)
WaitSeconds = (3 - retries) * BackoffSeconds WaitSeconds = ( (3 - Retries) * BackoffSeconds ) ** 2
Delay(WaitSeconds) If WaitSeconds GT 0 then Delay(WaitSeconds)
Retries = Retries - 1 Retries = Retries - 1
If Body NE '' then If Body NE '' then
@ -472,6 +472,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
end end
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'POST', NicaURL, Headers, Body, '', '', False$, False$, '', IgnoreCertErrors) 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<1> = Oconv(Date(), 'D4/') : ' ' : Oconv(Time(), 'MTS') ; // Logging DTM
LogData<2> = Machine LogData<2> = Machine
@ -484,7 +485,8 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
OSWrite LogBytes to LogPath:'\':LogFileName OSWrite LogBytes to LogPath:'\':LogFileName
end end
If HttpResponseJson NE '' then If (HttpResponseStatusCode EQ 200) then
If (HttpResponseJson NE '') then
ObjResponseJson = '' ObjResponseJson = ''
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
OrderId = SRP_JSON(ObjResponseJson, 'GetValue', 'id') OrderId = SRP_JSON(ObjResponseJson, 'GetValue', 'id')
@ -552,14 +554,18 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
end end
end else end else
ErrorMsg = 'Error in ':Service:' service. Null OrderId returned from MesaProveInAPI.' ErrorMsg = 'Error in ':Service:' service. Null OrderId returned from NicaIntegrationService.'
end end
SRP_JSON(ObjResponseJson, 'Release') SRP_JSON(ObjResponseJson, 'Release')
end else 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
end else 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 end
Repeat Repeat
end end
@ -574,7 +580,7 @@ Service CreateNewOrder(EntityType=ENTITY_TYPES, EntityID, OrderType=ORDER_TYPES,
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
Mona_Services('PostStatus', MonaResource, StatusName, 'Ok') Mona_Services('PostStatus', MonaResource, StatusName, 'Ok')
end else 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') Mona_Services('PostStatus', MonaResource, StatusName, 'Critical')
end end
end end
@ -624,8 +630,8 @@ Service CancelOrder(OrderId)
HaveLock = False$ HaveLock = False$
Loop Loop
While (HaveLock EQ False$ and LockRetries GT 0) While (HaveLock EQ False$ and LockRetries GT 0)
WaitSeconds = (3 - LockRetries) * LockBackoffSeconds WaitSeconds = ( (3 - LockRetries) * LockBackoffSeconds ) ** 2
Delay(WaitSeconds) If WaitSeconds GT 0 then Delay(WaitSeconds)
LockRetries = LockRetries - 1 LockRetries = LockRetries - 1
HaveLock = Database_Services('GetKeyIDLock', 'NICA_ORDERS', OrderId, True$) HaveLock = Database_Services('GetKeyIDLock', 'NICA_ORDERS', OrderId, True$)
Repeat Repeat
@ -667,11 +673,13 @@ Service CancelOrder(OrderId)
Loop Loop
while (IsSuccessful EQ False$ and Retries GT 0) while (IsSuccessful EQ False$ and Retries GT 0)
WaitSeconds = (3 - Retries) * BackoffSeconds WaitSeconds = ( (3 - Retries) * BackoffSeconds) ** 2
Delay(WaitSeconds) If WaitSeconds GT 0 then Delay(WaitSeconds)
Retries = Retries - 1 Retries = Retries - 1
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'PUT', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '', IgnoreCertErrors) 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 = '' ObjResponseJson = ''
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete') IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
@ -714,7 +722,15 @@ Service CancelOrder(OrderId)
end else end else
Response = False$ Response = False$
end end
end else
ErrorMsg = 'Error in ':Service:' service. Error parsing JSON response from NICAIntegrationService.'
end 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 end
SRP_JSON(ObjResponseJson, 'Release') SRP_JSON(ObjResponseJson, 'Release')
Repeat Repeat
@ -728,13 +744,13 @@ Service CancelOrder(OrderId)
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
Mona_Services('PostStatus', MonaResource, StatusName, 'Ok') Mona_Services('PostStatus', MonaResource, StatusName, 'Ok')
end else 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') Mona_Services('PostStatus', MonaResource, StatusName, 'Critical')
end end
end else end else
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
end end
If Database_Services('IsKeyIDSelfLocked', 'NICA_ORDERS', OrderId) then Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
end else end else
ErrorMsg = 'Error in ':Service:' service. Failed to lock NICA_ORDERS ':OrderId:' for cancellation.' ErrorMsg = 'Error in ':Service:' service. Failed to lock NICA_ORDERS ':OrderId:' for cancellation.'
end end
@ -831,12 +847,13 @@ Service GetOrderStatusUpdate(OrderId)
Loop Loop
while (IsSuccessful EQ False$ and Retries GT 0) while (IsSuccessful EQ False$ and Retries GT 0)
WaitSeconds = (3 - Retries) * BackoffSeconds WaitSeconds = ( (3 - Retries) * BackoffSeconds ) ** 2
Delay(WaitSeconds) If WaitSeconds GT 0 then Delay(WaitSeconds)
Retries = Retries - 1 Retries = Retries - 1
HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '', IgnoreCertErrors) HttpResponseJson = Httpclient_Services('SendHTTPRequest', 'GET', ProveInUrl, 'Accept':@VM:'*/*', '', '', '', False$, False$, '', IgnoreCertErrors)
HttpResponseStatusCode = Httpclient_Services('GetResponseStatusCode')
If HttpResponseJson NE '' then If (HttpResponseStatusCode EQ 200) then
If (HttpResponseJson NE '') then
ObjResponseJson = '' ObjResponseJson = ''
If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then If SRP_JSON(ObjResponseJson, 'Parse', HttpResponseJson) EQ '' then
IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete') IsComplete = SRP_JSON(ObjResponseJson, 'GetValue', 'isComplete')
@ -931,8 +948,16 @@ Service GetOrderStatusUpdate(OrderId)
end else end else
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
end end
end else
ErrorMsg = 'Error in ':Service:' service. Error parsing JSON response from NicaIntegrationService.'
end end
SRP_JSON(ObjResponseJson, 'Release') 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 end
Repeat Repeat
@ -945,14 +970,14 @@ Service GetOrderStatusUpdate(OrderId)
Mona_Services('PostStatus', MonaResource, StatusName, 'Ok') Mona_Services('PostStatus', MonaResource, StatusName, 'Ok')
Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$) Logging_Services('AppendLog', objLog, LogData, @RM, @FM, False$)
end else end else
Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId) ErrorMsg = 'Error encountered updating Nica order ':OrderId:' for reactor ':ReactNo:'. Error message: ':ErrorMsg
ErrorMsg = 'Error encountered updating Nica order ':OrderId:' for reactor ':ReactNo:'.'
Mona_Services('PostStatus', MonaResource, StatusName, 'Critical') Mona_Services('PostStatus', MonaResource, StatusName, 'Critical')
end end
end end
end else end else
ErrorMsg = Error_Services('GetMessage') ErrorMsg = Error_Services('GetMessage')
end end
If Database_Services('IsKeyIDSelfLocked', 'NICA_ORDERS', OrderId) then Database_Services('ReleaseKeyIDLock', 'NICA_ORDERS', OrderId)
end else end else
ErrorMsg = 'Error in ':Service:' service. Failed to lock NICA_ORDERS ':OrderId:'.' ErrorMsg = 'Error in ':Service:' service. Failed to lock NICA_ORDERS ':OrderId:'.'
end end