Learning Objective
Implement the deployment and configuration of the Adeptia process flow to enable the sending of email notifications for events that are stuck.
Guarantee prompt alerts for any events that are stuck to prevent delays.
Mitigate process flow deadlocks to ensure smooth operations.
Problem statement
In Adeptia, activating a Trigger in sequence for any event triggers the process flow or transaction sequentially. As a result, when a transaction enters a running state, the event will pause until the first process is completed. This scenario may result in a deadlock, where the event is awaiting the transaction to execute while the transaction is at a standstill. To mitigate this issue, a solution has been devised to send an email notification to the user, ensuring prompt awareness and resolution.
Introduction
This guide provides a detailed step-by-step process for deploying the Adeptia event monitoring process. This includes configuring backend database information, setting misfire and hour parameters, updating email credentials, and scheduling the calendar event for regular execution.
Prerequisites
Before you begin, ensure you have the following:
Adeptia Connect installed
Email server details
Backend database details
Solution
Step 1: Download Package ZIP
Download the deployment package ZIP from the provided location.
Step 2: Deploy Package Using Migration Utility
Run
MigrationUtility.exe
.
Step 3: Update Backend Database Credentials
Navigate to
Configure > Accounts > Database Info
.Update the database configuration with the following details:
Database URL:
jdbc:your_database_url
Username:
your_db_username
Password:
your_db_password
Click on
Test Database Connection
and ensure the connection is successful.
Step 4: Update Email Credentials
Navigate to
Configure > Target > Mail Target
.Edit
ADP_MD_sendEventDataInfo
.Update the email server details with your SMTP server information.
Update sender and receiver configuration in Mail Target.
Step 5: Set Miss Fire and Hour Parameter
Go to the
Process Flow
section.Open
ADP_PF_EventMonitoringProcessFlow
.Set the
Miss Fire
parameter to the minimum time you want the event to misfire based on your requirement.Set the
Hour
parameter to the desired value (e.g., 2 if the event should be stuck for at least 2 hours).
Step 6: Update Database Query in Mapper
Edit mapping
ADP_DM_convertEventInfoToMail
.
Edit variable
VarQuery
according to your database:For SQL Server:
Copy code
concat('select *,DATEDIFF_BIG(MILLISECOND, ',$apos,'19700101',$apos,', SYSDATETIMEOFFSET()) AS currentEpochTime from ABPM_TRIGGERS with(nolock)') concat('SELECT *, TIMESTAMPDIFF(MICROSECOND ',',', $apos,'1970-01-01 00:00:00',$apos,',',' NOW()) / 1000 AS currentEpochTime FROM ABPM_TRIGGERS')
For Oracle:
Copy code
concat('SELECT a.*,(CAST(SYS_EXTRACT_UTC(SYSTIMESTAMP) AS DATE) - TO_DATE(',$apos,'1970-01-01',$apos,$apos, 'YYYY-MM-DD',$apos,')) * 86400000 AS currentEpochTime FROM ABPM_TRIGGERS a');
For MySQL:
Copy code
'SELECT *, UNIX_TIMESTAMP(NOW()) * 1000 AS currentEpochTime FROM ABPM_TRIGGERS
Step 7: Update Calendar Event to Run Flow Every 2 Hours
Navigate to
Configure > Event > Calendar Event
.Select the event
ADP_CE_eventMonitoringFlow
.Update the event to trigger every 2 hours.
Process Flow Activities Description:
Navigate to
Configure > Process flow > ADP_PF_EventMonitoringProcessFlow
Edit Process Flow
ADP_PF_EventMonitoringProcessFlow
.
This Process flow contains the following activities:
Data Mapping and Query: The data mapping is utilized to query the backend database for a list of events that have been blocked for a duration exceeding the time specified in the process flow variable.
DataMapping ForEach Description:
$varExecuteQuery//Root/Record[(number(format-number(number(currentEpochTime ) - number( PREV_FIRE_TIME),'#')) > $varComparison and normalize-space(substring-after( TRIGGER_NAME,':' )) != '' and number(format-number(number(NEXT_FIRE_TIME ) - number( PREV_FIRE_TIME),'#')) < $varComparison) or (number(format-number(number(NEXT_FIRE_TIME ) - number( PREV_FIRE_TIME),'#')) > $varComparison and ((format-number(number(currentEpochTime ) - number( PREV_FIRE_TIME),'#') div format-number(number(NEXT_FIRE_TIME ) - number( PREV_FIRE_TIME),'#')) > (number($vargetMissFire) + 1)))]
Gateway Condition: A gateway condition is implemented to verify if there is at least one event that satisfies the specified condition.
Text Layout for Mail Notification: A structured text layout is utilized to encompass all necessary fields for the email notification. This layout is selected for its adaptability, facilitating the inclusion of additional fields as required in the future.
Custom Plugin for XML to HTML Conversion: A custom plugin is employed to transform the XML stream into HTML format, enabling seamless integration with the mail notification system.
Custom code:
import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import com.adeptia.indigo.services.ServiceException; try { String hour = (String)context.get("hour"); BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); StringBuffer sb = new StringBuffer(); sb.append("Hi,<br><br>This email is to notify you that some events have not been triggering for the past " + hour +" Hours.<br><br>The following events are currently stuck:<br><br>"); sb.append("<table \"width:70%\" border = \"1\">"); sb.append("<tr><th style=\"background-color:lightgrey;\">Event Name</th>" + "<th style=\"background-color:lightgrey;\">Last Fire Time</th>"+ "<th style=\"background-color:lightgrey;\">Action</th>"); sb.append("</tr>"); String line = reader.readLine(); while(line != null){ String []str=line.split(","); if(str.length != 0){ sb.append("<tr><td>"); sb.append(str[0]); sb.append("</td><td>"); sb.append(str[1] ); sb.append("</td><td>"); sb.append(str[2] ); sb.append("</td><td>"); sb.append("</tr>"); } line = reader.readLine(); } sb.append("</table>"); sb.append("<br>Thanks,<br>Adeptia Monitoring<br>"); // System.out.println(sb.toString()); service.write(sb.toString().getBytes(), "default"); }catch(Exception e) { e.printStackTrace(); throw new ServiceException(e); }
Mail Target for Email Notification: A mail target is configured to dispatch the email notification to the intended recipient efficiently and reliably.
Conclusion
Following these steps will allow you to successfully deploy and configure the Adeptia process flow for sending email notifications for stuck events. For further assistance, please reach out to the Adeptia support team.