Files
open-insight/LSL2/STPROC/MONA_SERVICES.txt
2025-06-26 16:17:00 -07:00

805 lines
34 KiB
Plaintext

Compile subroutine MONA_SERVICES(@Service, @Params)
/***********************************************************************************************************************
This subroutine is used to send messages to MonA directly from
within OpenInsight. It utilizes a C# DotNet DLL MonAOIApi.dll
which contains two classes, one for sending status updates, and
one for sending metrics. Also requires the Infineon.Monitoring.Mona.dll which contains the needed dotnet libraries.
Parameters:
Instruction: Used to determine which subroutine to execute.
Parm1:
-For Status updates represents the name of the monitor
-For Metrics updates represents the name of the monitor
Parm2:
-For Status updates represents the name of the status
-For Metric updates represents the name of the metric
Parm3:
-For status updates this represents the state of the object you are sending(Ok, Warning, Critical)
-For Metric updates this represents the numeric data that you wish to send.
***********************************************************************************************************************/
#pragma precomp SRP_PreCompiler
$Insert APP_INSERTS
$Insert SERVICE_SETUP
$Insert MONA_QUEUE_EQUATES
Equ MAX_REQUESTS$ to 2000
Equ COMMA$ to ','
Declare Subroutine Errmsg, Error_Services, Delay, Mona_Services, Service_Services, Database_Services, Logging_Services
Declare subroutine SRP_Json, obj_Notes
Declare function Get_Status, SRP_Datetime, Environment_Services, Httpclient_Services, Datetime, RTI_CreateGuid
Declare function Database_Services, Logging_Services, SRP_Json, Mona_Services
GoToService else
Error_Services('Add', Service : ' is not a valid service request within the ' : ServiceModule : ' services module.')
end
return Response else ''
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Service Parameter Options
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Options MONITORS = 'SQL_BACKLOG', 'SQL_BACKLOG_WO_MAT', 'SQL_BACKLOG_WO_LOG'
Options STATES = 'OK', 'WARNING', 'CRITICAL'
Options REQUEST_TYPE = 'status', 'average', 'count', 'status/bulk', 'average/bulk', 'count/bulk'
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Services
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Service SendStatus(MonitorName=MONITORS, StatusName, CurrentState=STATES)
Mona_Services("PostStatus", MonitorName, StatusName, CurrentState)
end service
Service PostStatus(MonitorName, StatusName, CurrentState=STATES)
MonaQId = RTI_CreateGuid()
MonaQRec = ''
MonaQRec<MONA_QUEUE.REQUEST_DTM$> = Datetime()
MonaQRec<MONA_QUEUE.MONITOR_NAME$> = MonitorName
MonaQRec<MONA_QUEUE.STATUS_NAME$> = StatusName
MonaQRec<MONA_QUEUE.STATUS_STATE$> = CurrentState
Database_Services('WriteDataRow', 'MONA_QUEUE', MonaQId, MonaQRec)
end service
Service SendMetric(MonitorName=MONITORS, MetricName, Number)
Mona_Services("PostAverageMetric", MonitorName, MetricName, Number)
end Service
Service PostAverageMetric(MonitorName, MetricName, Number)
MonaQId = RTI_CreateGuid()
MonaQRec = ''
MonaQRec<MONA_QUEUE.REQUEST_DTM$> = Datetime()
MonaQRec<MONA_QUEUE.MONITOR_NAME$> = MonitorName
MonaQRec<MONA_QUEUE.METRIC_NAME$> = MetricName
MonaQRec<MONA_QUEUE.METRIC_NUMBER$> = Number
MonaQRec<MONA_QUEUE.METRIC_TYPE$> = 'AVERAGE'
Database_Services('WriteDataRow', 'MONA_QUEUE', MonaQId, MonaQRec)
end service
Service SendCountMetric(MonitorName=MONITORS, MetricName, Number)
Mona_Services("PostCountMetric", MonitorName, MetricName, Number)
end Service
Service PostCountMetric(MonitorName, MetricName, Number)
MonaQId = RTI_CreateGuid()
MonaQRec = ''
MonaQRec<MONA_QUEUE.REQUEST_DTM$> = Datetime()
MonaQRec<MONA_QUEUE.MONITOR_NAME$> = MonitorName
MonaQRec<MONA_QUEUE.METRIC_NAME$> = MetricName
MonaQRec<MONA_QUEUE.METRIC_NUMBER$> = Number
MonaQRec<MONA_QUEUE.METRIC_TYPE$> = 'COUNT'
Database_Services('WriteDataRow', 'MONA_QUEUE', MonaQId, MonaQRec)
end service
Service SendBufferedStatus(MonaResource, StatusName, StatusValue)
If MonaResource EQ '' then
MonaResource = Environment_Services("GetMonaResource")
end
Prod = Environment_Services('IsProd')
If Not(Prod) then GoSub SwapResourceNames
DateTime = SRP_DateTime('Now')
Year = SRP_Datetime("Year", DateTime)
Month = SRP_Datetime("Month", DateTime)
If Len(Month) EQ 1 then
Month = '0':Month
end
Day = SRP_Datetime("Day", DateTime)
If Len(Day) EQ 1 then
Day = '0':Day
end
Hour = SRP_Datetime("Hour", DateTime)
If Len(Hour) EQ 1 then
Hour = '0':Hour
end
Minute = SRP_Datetime("Minute", DateTime)
If Len(Minute) EQ 1 then
Minute = '0':Minute
end
Second = SRP_Datetime("Second", DateTime)
If Len(Second) EQ 1 then
Second = '0':Second
end
RequestBodyJson = '{ "resource": "':MonaResource:'"'
RequestBodyJson = RequestBodyJson:', "dateTime": "':Year:'-':Month:'-':Day:'T':Hour:':':Minute:':':Second:'Z"'
RequestBodyJson = RequestBodyJson:', "statusName": "':StatusName:'"'
RequestBodyJson = RequestBodyJson:', "statusValue": "':StatusValue:'" }'
ApiUrl = Environment_Services("GetMonInBufferedWorkerApiUrl"):'/status'
retries = 3
backoffSeconds = 1
isSuccessful = False$
Loop
while (isSuccessful EQ False$ and retries GT 0)
waitSeconds = (3 - retries) * backoffSeconds
Delay(waitSeconds)
retries = retries - 1
response = Httpclient_Services('SendHTTPRequest', 'POST', ApiUrl, 'Content-Type':@VM:'application/json':@FM:'Accept':@VM:'*/*', RequestBodyJson, '', '', False$, False$, '')
If response EQ '"Request queued for processing"' then
isSuccessful = True$
end
Repeat
end service
Service SendBufferedAverageMetric(MonaResource, MetricName, MetricValue)
If MonaResource EQ '' then
MonaResource = Environment_Services("GetMonaResource")
end
DateTime = SRP_DateTime('Now')
Year = SRP_Datetime("Year", DateTime)
Month = SRP_Datetime("Month", DateTime)
If Len(Month) EQ 1 then
Month = '0':Month
end
Day = SRP_Datetime("Day", DateTime)
If Len(Day) EQ 1 then
Day = '0':Day
end
Hour = SRP_Datetime("Hour", DateTime)
If Len(Hour) EQ 1 then
Hour = '0':Hour
end
Minute = SRP_Datetime("Minute", DateTime)
If Len(Minute) EQ 1 then
Minute = '0':Minute
end
Second = SRP_Datetime("Second", DateTime)
If Len(Second) EQ 1 then
Second = '0':Second
end
RequestBodyJson = '{ "resource": "':MonaResource:'"'
RequestBodyJson = RequestBodyJson:', "dateTime": "':Year:'-':Month:'-':Day:'T':Hour:':':Minute:':':Second:'Z"'
RequestBodyJson = RequestBodyJson:', "metricName": "':MetricName:'"'
RequestBodyJson = RequestBodyJson:', "metricValue": "':MetricValue:'" }'
ApiUrl = Environment_Services("GetMonInBufferedWorkerApiUrl"):'/average'
retries = 3
backoffSeconds = 1
isSuccessful = False$
Loop
while (isSuccessful EQ False$ and retries GT 0)
waitSeconds = (3 - retries) * backoffSeconds
Delay(waitSeconds)
retries = retries - 1
response = Httpclient_Services('SendHTTPRequest', 'POST', ApiUrl, 'Content-Type':@VM:'application/json':@FM:'Accept':@VM:'*/*', RequestBodyJson, '', '', False$, False$, '')
If response EQ '"Request queued for processing"' then
isSuccessful = True$
end
Repeat
end service
Service SendBufferedCountMetric(MonaResource, MetricName, MetricValue)
If MonaResource EQ '' then
MonaResource = Environment_Services("GetMonaResource")
end
DateTime = SRP_DateTime('Now')
Year = SRP_Datetime("Year", DateTime)
Month = SRP_Datetime("Month", DateTime)
If Len(Month) EQ 1 then
Month = '0':Month
end
Day = SRP_Datetime("Day", DateTime)
If Len(Day) EQ 1 then
Day = '0':Day
end
Hour = SRP_Datetime("Hour", DateTime)
If Len(Hour) EQ 1 then
Hour = '0':Hour
end
Minute = SRP_Datetime("Minute", DateTime)
If Len(Minute) EQ 1 then
Minute = '0':Minute
end
Second = SRP_Datetime("Second", DateTime)
If Len(Second) EQ 1 then
Second = '0':Second
end
RequestBodyJson = '{ "resource": "':MonaResource:'"'
RequestBodyJson = RequestBodyJson:', "dateTime": "':Year:'-':Month:'-':Day:'T':Hour:':':Minute:':':Second:'Z"'
RequestBodyJson = RequestBodyJson:', "metricName": "':MetricName:'"'
RequestBodyJson = RequestBodyJson:', "metricValue": "':MetricValue:'" }'
ApiUrl = Environment_Services("GetMonInBufferedWorkerApiUrl"):'/count'
retries = 3
backoffSeconds = 1
isSuccessful = False$
Loop
while (isSuccessful EQ False$ and retries GT 0)
waitSeconds = (3 - retries) * backoffSeconds
Delay(waitSeconds)
retries = retries - 1
response = Httpclient_Services('SendHTTPRequest', 'POST', ApiUrl, 'Content-Type':@VM:'application/json':@FM:'Accept':@VM:'*/*', RequestBodyJson, '', '', False$, False$, '')
If response EQ '"Request queued for processing"' then
isSuccessful = True$
end
Repeat
end service
Service QueueLatencyAndCountMetrics(MonaResource, MetricName, StartTick, EndTick)
Diff = EndTick - StartTick
Mona_Services('SendMetric', MonaResource, MetricName:'_LATENCY', Diff)
Mona_Services('SendCountMetric', MonaResource, MetricName:'_COUNT', 1)
end service
Service ProcessMonaQueue(NumRequests)
hSysLists = Database_Services('GetTableHandle', 'SYSLISTS')
Lock hSysLists, ServiceKeyID then
LogPath = Environment_Services('GetApplicationRootPath') : '\LogFiles\MonA'
LogDate = Oconv(Date(), 'D4/')
LogTime = Oconv(Time(), 'MTS')
LogFileName = LogDate[7, 4] : '-' : LogDate[1, 2] : '-' : LogDate[4, 2] : ' MonA Queue Log.csv'
Headers = 'Logging DTM':@FM:'Log Data'
objMonaQueueLog = Logging_Services('NewLog', LogPath, LogFileName, CRLF$, COMMA$, Headers, '', False$, False$)
LoggingDTM = LogDate : ' ' : LogTime ; // Logging DTM
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Begin ProcessMonaQueue'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
ErrorMsg = ''
If NumRequests NE '' then
If Num(NumRequests) then
NumRequests = Abs(Int(NumRequests))
If NumRequests GT MAX_REQUESTS$ then
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Requested NumRequests ':NumRequests:' is above predefined limit. Overriding NumRequests and setting to ':MAX_REQUESTS$:'.'
NumRequests = MAX_REQUESTS$
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Attempting to process up to ':NumRequests:' MONA_QUEUE requests.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
Open 'MONA_QUEUE' to hMonaQueue then
objMonaStatusJsonArray = ''
MonaStatusJson = ''
objMonaMetricAvgJsonArray = ''
MonaMetricAvgJson = ''
objMonaMetricCountJsonArray = ''
MonaMetricCountJson = ''
If SRP_Json(objMonaStatusJsonArray, 'New', 'Array') then
If SRP_Json(objMonaMetricAvgJsonArray, 'New', 'Array') then
If SRP_Json(objMonaMetricCountJsonArray, 'New', 'Array') then
DefaultMonitorName = Environment_Services("GetMonaResource")
EOF = False$
RequestCount = 0
InvalidRequests = ''
StatusRequests = ''
AverageRequests = ''
CountRequests = ''
GoSub ClearCursors
Select hMonaQueue
Loop
Readnext MonaQueueId else EOF = True$
Until (EOF or (RequestCount GE NumRequests) or (ErrorMsg NE '') )
RequestCount += 1
Read MonaQueueRec from hMonaQueue, MonaQueueId then
Begin Case
Case ( (MonaQueueRec<MONA_QUEUE.STATUS_NAME$> NE '') and (MonaQueueRec<MONA_QUEUE.STATUS_STATE$> NE '') )
// Add status object
objStatus = ''
StatusJson = Mona_Services('ConvertRecordToJson', MonaQueueId)
If Error_Services('NoError') then
If (SRP_Json(objStatus, 'Parse', StatusJson) EQ '') then
SRP_Json(objMonaStatusJsonArray, 'Add', objStatus)
SRP_Json(objStatus, 'Release')
StatusRequests<-1> = MonaQueueId
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully added MONA_QUEUE ':MonaQueueId:' to objMonaStatusJsonArray.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end else
ErrorMsg = 'Error in ':Service:' service. Error parsing StatusJson json.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
end
Case ( (MonaQueueRec<MONA_QUEUE.METRIC_NAME$> NE '') and (MonaQueueRec<MONA_QUEUE.METRIC_NUMBER$> NE '') and (MonaQueueRec<MONA_QUEUE.METRIC_TYPE$> EQ 'AVERAGE') )
// Add average metric object
objAverage = ''
AverageJson = Mona_Services('ConvertRecordToJson', MonaQueueId)
If Error_Services('NoError') then
If (SRP_Json(objAverage, 'Parse', AverageJson) EQ '') then
SRP_Json(objMonaMetricAvgJsonArray, 'Add', objAverage)
SRP_Json(objAverage, 'Release')
AverageRequests<-1> = MonaQueueId
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully added MONA_QUEUE ':MonaQueueId:' to objMonaMetricAvgJsonArray.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end else
ErrorMsg = 'Error in ':Service:' service. Error parsing AverageJson json.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
end
Case ( (MonaQueueRec<MONA_QUEUE.METRIC_NAME$> NE '') and (MonaQueueRec<MONA_QUEUE.METRIC_NUMBER$> NE '') and (MonaQueueRec<MONA_QUEUE.METRIC_TYPE$> EQ 'COUNT') )
// Add count metric object
objCount = ''
CountJson = Mona_Services('ConvertRecordToJson', MonaQueueId)
If Error_Services('NoError') then
If (SRP_Json(objCount, 'Parse', CountJson) EQ '') then
SRP_Json(objMonaMetricCountJsonArray, 'Add', objCount)
SRP_Json(objCount, 'Release')
CountRequests<-1> = MonaQueueId
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully added MONA_QUEUE ':MonaQueueId:' to objMonaMetricCountJsonArray.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end else
ErrorMsg = 'Error in ':Service:' service. Error parsing CountJson json.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
end
Case Otherwise$
// Invalid request
InvalidRequests<-1> = MonaQueueId
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Encountered invalid MONA_QUEUE ':MonaQueueId:' request. Marking request for deletion.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
End Case
end else
ErrorMsg = 'Error in ':Service:' service. Error reading MONA_QUEUE ':MonaQueueId:'.'
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Error reading MONA_QUEUE ':MonaQueueId:' request.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
Repeat
GoSub ClearCursors
// Send requests and remove them from the queue
If ErrorMsg EQ '' then
StatusArraySize = SRP_Json(objMonaStatusJsonArray, "GetCount")
If StatusArraySize GT 0 then
// Send bulk status request
MonaStatusJson = SRP_Json(objMonaStatusJsonArray, 'Stringify', 'Fast')
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Attempting to send bulk status request to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
Mona_Services('SendMonaHttpRequest', 'status/bulk', MonaStatusJson)
If Error_Services('NoError') then
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully sent bulk status request to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
// Delete status requests from queue
For each MonaStatusQueueId in StatusRequests using @FM
Delete hMonaQueue, MonaStatusQueueId then
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully deleted MONA_QUEUE ':MonaStatusQueueId:' request.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end else
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Error in ':Service:' service. Error deleting MONA_QUEUE ':MonaStatusQueueId:'.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
Next MonaStatusQueueId
end else
ErrorMsg = Error_Services('GetMessage')
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Failed to send bulk status request to MonInBufferedWorker API. Error message: ':ErrorMsg
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
end else
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'No status requests to send to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
AverageArraySize = SRP_Json(objMonaMetricAvgJsonArray, "GetCount")
If AverageArraySize GT 0 then
// Send bulk average request
MonaMetricAvgJson = SRP_Json(objMonaMetricAvgJsonArray, 'Stringify', 'Fast')
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Attempting to send bulk average request to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
Mona_Services('SendMonaHttpRequest', 'average/bulk', MonaMetricAvgJson)
If Error_Services('NoError') then
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully sent bulk average request to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
// Delete average requests from queue
For each MonaAverageQueueId in AverageRequests using @FM
Delete hMonaQueue, MonaAverageQueueId then
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully deleted MONA_QUEUE ':MonaAverageQueueId:' request.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end else
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Error in ':Service:' service. Error deleting MONA_QUEUE ':MonaAverageQueueId:'.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
Next MonaAverageQueueId
end else
ErrorMsg = Error_Services('GetMessage')
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Failed to send bulk average request to MonInBufferedWorker API. Error message: ':ErrorMsg
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
end else
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'No average requests to send to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
CountArraySize = SRP_Json(objMonaMetricCountJsonArray, "GetCount")
If CountArraySize GT 0 then
// Send bulk count request
MonaMetricCountJson = SRP_Json(objMonaMetricCountJsonArray, 'Stringify', 'Fast')
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Attempting to send bulk count request to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
Mona_Services('SendMonaHttpRequest', 'count/bulk', MonaMetricCountJson)
If Error_Services('NoError') then
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully sent bulk count request to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
// Delete count requests from queue
For each MonaCountQueueId in CountRequests using @FM
Delete hMonaQueue, MonaCountQueueId then
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully deleted MONA_QUEUE ':MonaCountQueueId:' request.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end else
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Error in ':Service:' service. Error deleting MONA_QUEUE ':MonaCountQueueId:'.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
Next MonaCountQueueId
end else
ErrorMsg = Error_Services('GetMessage')
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Failed to send bulk count request to MonInBufferedWorker API. Error message: ':ErrorMsg
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
end else
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'No count requests to send to MonInBufferedWorker API.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
If InvalidRequests NE '' then
For each InvalidRequestQueueId in InvalidRequests using @FM
Delete hMonaQueue, InvalidRequestQueueId then
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully deleted invalid MONA_QUEUE ':InvalidRequestQueueId:' request.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end else
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Error in ':Service:' service. Error deleting invalid MONA_QUEUE ':InvalidRequestQueueId:' request.'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
Next InvalidRequestQueueId
end
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully processed ':DCount(StatusRequests, @FM): ' status requests'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully processed ':DCount(AverageRequests, @FM): ' average requests'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'Successfully processed ':DCount(CountRequests, @FM): ' count requests'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
end
end else
ErrorMsg = 'Error in ':Service:' service. Error initializing objMonaMetricCountJsonArray'
end
end else
ErrorMsg = 'Error in ':Service:' service. Error intializing objMonaMetricAvgJsonArray.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Error initializing objMonaStatusJsonArray'
end
If (objMonaStatusJsonArray NE '') then SRP_Json(objMonaStatusJsonArray, 'Release')
If (objMonaMetricAvgJsonArray NE '') then SRP_Json(objMonaMetricAvgJsonArray, 'Release')
If (objMonaMetricCountJsonArray NE '') then SRP_Json(objMonaMetricCountJsonArray, 'Release')
end else
ErrorMsg = 'Error in ':Service:' service. Error opening MONA_QUEUE table.'
end
end else
ErrorMsg = 'Error in ':Service:' service. NumRequests ':NumRequests:' is not a number.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null NumRequests passed into service.'
end
If ErrorMsg NE '' then
// Notify OI_SYSADMIN group
Recipients = ''
SentFrom = 'SYSTEM'
Subject = Service:' Error'
Message = OConv(Datetime(), 'DT2/^H')
Server = Environment_Services('GetServer')
Message<2> = 'Error on server ':Server
Message<3> = 'Error message: ':ErrorMsg
AttachWindow = ''
AttachKey = ''
SendToGroup = 'OI_SYSADMIN'
Parms = Recipients:@RM:SentFrom:@RM:Subject:@RM:Message:@RM:AttachWindow:@RM:AttachKey:@RM:SendToGroup
obj_Notes('Create',Parms)
Error_Services('Add', ErrorMsg)
end
LogData = ''
LogData<1> = OConv(Datetime(), 'DT2/^H')
LogData<2> = 'End ProcessMonaQueue'
Logging_Services('AppendLog', objMonaQueueLog, LogData, @RM, @FM)
Unlock hSysLists, ServiceKeyID else Null
end
end service
Service GetMonaDatetimeFormat(InternalDtm)
ErrorMsg = ''
MonaDtm = ''
If (InternalDtm NE '') then
If Num(InternalDtm) then
Year = SRP_Datetime("Year", InternalDtm)
Month = Fmt(SRP_Datetime("Month", InternalDtm), 'R(0)#2')
Day = Fmt(SRP_Datetime("Day", InternalDtm), 'R(0)#2')
Hour = Fmt(SRP_Datetime("Hour", InternalDtm), 'R(0)#2')
Minute = Fmt(SRP_Datetime("Minute", InternalDtm), 'R(0)#2')
Second = Fmt(SRP_Datetime("Second", InternalDtm), 'R(0)#2')
MonaDtm = Year:'-':Month:'-':Day:'T':Hour:':':Minute:':':Second:'Z'
end else
ErrorMsg = 'Error in ':Service:' service. InternalDtm is not a number.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null InternalDtm passed into service.'
end
If ErrorMsg EQ '' then
Response = MonaDtm
end else
Error_Services('Add', ErrorMsg)
end
end service
Service SendMonaHttpRequest(RequestType=REQUEST_TYPES, RequestBodyJson)
ErrorMsg = ''
If RequestType NE '' then
If RequestBodyJson NE '' then
ApiUrl = Environment_Services("GetMonInBufferedWorkerApiUrl"):'/':RequestType
Retries = 3
BackoffSeconds = 1
IsSuccessful = False$
Loop
While (IsSuccessful EQ False$ and Retries GT 0)
WaitSeconds = (3 - Retries) * BackoffSeconds
Delay(WaitSeconds)
Retries = Retries - 1
Response = Httpclient_Services('SendHTTPRequest', 'POST', ApiUrl, 'Content-Type':@VM:'application/json':@FM:'Accept':@VM:'*/*', RequestBodyJson, '', '', False$, False$, '')
If ( (Response EQ '"Request queued for processing"') or (Response EQ '"Requests queued for processing"' ) ) then IsSuccessful = True$
Repeat
If (IsSuccessful EQ False$) then ErrorMsg = 'Error in ':Service:' service. Error sending HTTP request.'
end else
ErrorMsg = 'Error in ':Service:' service. Null RequestBodyJson passed into service'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null RequestType passed into service'
end
If ErrorMsg NE '' then Error_Services('Add', ErrorMsg)
end service
Service ConvertRecordToJson(MonaQueueId)
ErrorMsg = ''
MonaQueueJson = ''
If MonaQueueId NE '' then
If RowExists('MONA_QUEUE', MonaQueueId) then
MonaQueueRec = Database_Services('ReadDataRow', 'MONA_QUEUE', MonaQueueId)
If Error_Services('NoError') then
Begin Case
Case ( (MonaQueueRec<MONA_QUEUE.STATUS_NAME$> NE '') and (MonaQueueRec<MONA_QUEUE.STATUS_STATE$> NE '') )
objStatus = ''
If SRP_Json(objStatus, 'New', 'Object') then
RequestDtm = MonaQueueRec<MONA_QUEUE.REQUEST_DTM$>
RequestDtmMonaFmt = Mona_Services('GetMonaDatetimeFormat', RequestDtm)
If Error_Services('NoError') then
If MonaQueueRec<MONA_QUEUE.MONITOR_NAME$> NE '' then
MonitorName = MonaQueueRec<MONA_QUEUE.MONITOR_NAME$>
end else
MonitorName = DefaultMonitorName
end
StatusName = MonaQueueRec<MONA_QUEUE.STATUS_NAME$>
StatusState = MonaQueueRec<MONA_QUEUE.STATUS_STATE$>
SRP_Json(objStatus, 'SetValue', 'resource', MonitorName)
SRP_Json(objStatus, 'SetValue', 'dateTime', RequestDtmMonaFmt)
SRP_Json(objStatus, 'SetValue', 'statusName', StatusName)
SRP_Json(objStatus, 'SetValue', 'statusValue', StatusState)
MonaQueueJson = SRP_Json(objStatus, 'Stringify', 'Fast')
end else
ErrorMsg = Error_Services('GetMessage')
end
SRP_Json(objStatus, 'Release')
end
Case ( (MonaQueueRec<MONA_QUEUE.METRIC_NAME$> NE '') and (MonaQueueRec<MONA_QUEUE.METRIC_NUMBER$> NE '') and (MonaQueueRec<MONA_QUEUE.METRIC_TYPE$> EQ 'AVERAGE') )
objAverage = ''
If SRP_Json(objAverage, 'New', 'Object') then
RequestDtm = MonaQueueRec<MONA_QUEUE.REQUEST_DTM$>
RequestDtmMonaFmt = Mona_Services('GetMonaDatetimeFormat', RequestDtm)
If Error_Services('NoError') then
If MonaQueueRec<MONA_QUEUE.MONITOR_NAME$> NE '' then
MonitorName = MonaQueueRec<MONA_QUEUE.MONITOR_NAME$>
end else
MonitorName = DefaultMonitorName
end
MetricName = MonaQueueRec<MONA_QUEUE.METRIC_NAME$>
MetricValue = MonaQueueRec<MONA_QUEUE.METRIC_NUMBER$>
SRP_Json(objAverage, 'SetValue', 'resource', MonitorName)
SRP_Json(objAverage, 'SetValue', 'dateTime', RequestDtmMonaFmt)
SRP_Json(objAverage, 'SetValue', 'metricName', MetricName)
SRP_Json(objAverage, 'SetValue', 'metricValue', MetricValue)
MonaQueueJson = SRP_Json(objAverage, 'Stringify', 'Fast')
end else
ErrorMsg = Error_Services('GetMessage')
end
SRP_Json(objAverage, 'Release')
end
Case ( (MonaQueueRec<MONA_QUEUE.METRIC_NAME$> NE '') and (MonaQueueRec<MONA_QUEUE.METRIC_NUMBER$> NE '') and (MonaQueueRec<MONA_QUEUE.METRIC_TYPE$> EQ 'COUNT') )
objCount = ''
If SRP_Json(objCount, 'New', 'Object') then
RequestDtm = MonaQueueRec<MONA_QUEUE.REQUEST_DTM$>
RequestDtmMonaFmt = Mona_Services('GetMonaDatetimeFormat', RequestDtm)
If Error_Services('NoError') then
If MonaQueueRec<MONA_QUEUE.MONITOR_NAME$> NE '' then
MonitorName = MonaQueueRec<MONA_QUEUE.MONITOR_NAME$>
end else
MonitorName = DefaultMonitorName
end
MetricName = MonaQueueRec<MONA_QUEUE.METRIC_NAME$>
MetricValue = MonaQueueRec<MONA_QUEUE.METRIC_NUMBER$>
SRP_Json(objCount, 'SetValue', 'resource', MonitorName)
SRP_Json(objCount, 'SetValue', 'dateTime', RequestDtmMonaFmt)
SRP_Json(objCount, 'SetValue', 'metricName', MetricName)
SRP_Json(objCount, 'SetValue', 'metricValue', MetricValue)
MonaQueueJson = SRP_Json(objCount, 'Stringify', 'Fast')
end else
ErrorMsg = Error_Services('GetMessage')
end
SRP_Json(objCount, 'Release')
end
Case Otherwise$
ErrorMsg = 'Error in ':Service:' service. MONA_QUEUE ':MonaQueueId:' is not a valid request.'
End Case
end else
ErrorMsg = 'Error in ':Service:' service. Error message: ':Error_Services('GetMessage')
end
end else
ErrorMsg = 'Error in ':Service:' service. MONA_QUEUE ':MonaQueueId:' does not exist.'
end
end else
ErrorMsg = 'Error in ':Service:' service. Null MonaQueueId passed into service.'
end
If ErrorMsg EQ '' then
Response = MonaQueueJson
end else
Error_Services('Add', ErrorMsg)
end
end service
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Internal GoSubs
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
SwapResourceNames:
// Swap out prod resource name with dev resource name
Begin Case
Case ( (MonaResource EQ 'GRP_OPENINSIGHT_MES_OP_FE_SAP_OUTBOUND') and (StatusName EQ 'SFTP-Interface-Outbound') )
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SAP_OUTBOUND'
StatusName = 'SFTP-Interface-Outbound-Dev'
Case ( (MonaResource EQ 'GRP_OPENINSIGHT_MES_OP_FE_SAP_INBOUND') and (StatusName EQ 'SetSAPBatchQueue') )
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SAP_INBOUND'
StatusName = 'SetSAPBatchQueue-Dev'
Case ( (MonaResource EQ 'GRP_OPENINSIGHT_MES_OP_FE_SAP_INBOUND') and (StatusName EQ 'SFTP-Interface-Inbound') )
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_SAP_INBOUND'
StatusName = 'SFTP-Interface-Inbound-Dev'
Case (MonaResource EQ 'GRP_OPENINSIGHT_MES_OP_FE_NICAINTEGRATIONSERVICE')
MonaResource = 'GRP_OPENINSIGHT_MES_OP_FE_DEV_NICAINTEGRATIONSERVICE_DEV'
End Case
return
ClearCursors:
For counter = 0 to 8
ClearSelect counter
Next counter
return