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 = Datetime() MonaQRec = MonitorName MonaQRec = StatusName MonaQRec = 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 = Datetime() MonaQRec = MonitorName MonaQRec = MetricName MonaQRec = Number MonaQRec = '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 = Datetime() MonaQRec = MonitorName MonaQRec = MetricName MonaQRec = Number MonaQRec = '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 NE '') and (MonaQueueRec 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 NE '') and (MonaQueueRec NE '') and (MonaQueueRec 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 NE '') and (MonaQueueRec NE '') and (MonaQueueRec 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 NE '') and (MonaQueueRec NE '') ) objStatus = '' If SRP_Json(objStatus, 'New', 'Object') then RequestDtm = MonaQueueRec RequestDtmMonaFmt = Mona_Services('GetMonaDatetimeFormat', RequestDtm) If Error_Services('NoError') then If MonaQueueRec NE '' then MonitorName = MonaQueueRec end else MonitorName = DefaultMonitorName end StatusName = MonaQueueRec StatusState = MonaQueueRec 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 NE '') and (MonaQueueRec NE '') and (MonaQueueRec EQ 'AVERAGE') ) objAverage = '' If SRP_Json(objAverage, 'New', 'Object') then RequestDtm = MonaQueueRec RequestDtmMonaFmt = Mona_Services('GetMonaDatetimeFormat', RequestDtm) If Error_Services('NoError') then If MonaQueueRec NE '' then MonitorName = MonaQueueRec end else MonitorName = DefaultMonitorName end MetricName = MonaQueueRec MetricValue = MonaQueueRec 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 NE '') and (MonaQueueRec NE '') and (MonaQueueRec EQ 'COUNT') ) objCount = '' If SRP_Json(objCount, 'New', 'Object') then RequestDtm = MonaQueueRec RequestDtmMonaFmt = Mona_Services('GetMonaDatetimeFormat', RequestDtm) If Error_Services('NoError') then If MonaQueueRec NE '' then MonitorName = MonaQueueRec end else MonitorName = DefaultMonitorName end MetricName = MonaQueueRec MetricValue = MonaQueueRec 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