AlertTaskManager
The AlertTaskManager orchestrates the status checks of KPIs created by Atoti Limits.
When a breach or warning is detected, an incident*.csv
file is generated, which then populates the Incidents Store. For details on the alert.csv file, see Incidents file
The AlertTaskManager automatically schedules future evaluations for KPIs that contain limit definitions with an Intraday polling frequency. Intraday polling frequency is configured through the sample-rate-cron
property values.
Properties
Property | Value | Description |
---|---|---|
task-scheduler-thread-pool-size | 4 | Thread pool size for the task scheduler. |
sample-rate-cron | 0 */5 * * * * | Cron expression for the Intraday Alert task’s cron job. |
TaskScheduler
The TaskScheduler Bean allows you to schedule AlertTasks and can be found in the ThreadPoolTaskSchedulerConfig.java
class.
The quantity of threads allotted to the TaskScheduler can be configured with the task-scheduler-thread-pool-size
property value. The default value is 4 threads.
The AlertTaskManager maintains a Hashmap of future AlertTasks, which are keyed on KpiTaskKeys containing fields for serverName, cubeName, kpiName, and pollingFrequency.
When Alert tasks are scheduled, they are added to the futureAlertTasks map. This allows us to unschedule tasks if needed.
REST
Evaluation REST endpoints are available for:
- On-Demand KPI Evaluation.
- Unschedule tasks from the TaskScheduler.
On-Demand KPI Evaluation
To start the KPI evaluation against the business cubes, use the following REST endpoint:
Endpoint: http://localhost:3090/limits/rest/v2/limitEvaluation
Method: Post Example Endpoint: http://localhost:3090/limits/rest/v2/limitEvaluation/evaluate
Example:
{
"kpiName":"SA Book Limit",
"cubeName":"StandardisedApproachCube",
"serverName":"FRTB"
}
The Response sent back will contain Breach and Warning data written to breach and warning alert*.csv
files:
The generated files will update the AlertsDefinition datastore on a listening topic, and updates the Limits workflow status to BREACH and WARNING accordingly.
Example Response:
{
"status": "success",
"data": [
"ID,Name,From,To,PollingFrequency,Scope,BreachOrWarning,MeasureValue,KpiType,LimitValues,LevelMember,CubeName,ServerName,MDX,BreachCount,LastUpdateTimestamp,LimitSessionID,key",
"id_252394,SA Book Limit,2018-09-28,,INTRADAY,Book@Books@Booking=BS_MGT_FX,Breach,2751620.5866622548,Greater Than,300000.0,Book@Books@Booking=BS_MGT_FX,StandardisedApproachCube,FRTB,\"SELECT NON EMPTY { [Measures].[SA Book Limit Status], [Measures].[FX Risk Charge] } ON COLUMNS, NON EMPTY Hierarchize( Descendants( { [Booking].[Books].[AllMember] }, 1, SELF_AND_BEFORE ) ) ON ROWS FROM ( SELECT [Booking].[Books].[AllMember].[BS_MGT_FX] ON COLUMNS FROM [StandardisedApproachCube] ) WHERE [Dates].[Date].[2018-09-28]\",1,2022-09-01T10-39-21-551-0400,cfb0f250-dac3-44b2-af48-a2f2bf0e4afe,-952155168",
"id_252394,SA Book Limit,2018-09-28,,INTRADAY,Book@Books@Booking=CM_OILGAS,Breach,935632.536,Greater Than,100000.0,Book@Books@Booking=CM_OILGAS,StandardisedApproachCube,FRTB,\"SELECT NON EMPTY { [Measures].[SA Book Limit Status], [Measures].[FX Risk Charge] } ON COLUMNS, NON EMPTY Hierarchize( Descendants( { [Booking].[Books].[AllMember] }, 1, SELF_AND_BEFORE ) ) ON ROWS FROM ( SELECT [Booking].[Books].[AllMember].[CM_OILGAS] ON COLUMNS FROM [StandardisedApproachCube] ) WHERE [Dates].[Date].[2018-09-28]\",1,2022-09-01T10-39-21-551-0400,cfb0f250-dac3-44b2-af48-a2f2bf0e4afe,-952153246"
]
}
Note that there is also an endpoint to evaluate all Approved Limits:
Endpoint: http://localhost:3090/limits/rest/v2/limitEvaluation/evaluate/all
Method: Post Example Endpoint: http://localhost:3090/limits/rest/v2/limitEvaluation/evaluate/all
This will return a similar but larger response to the single KPI evaluation endpoint.
Unschedule tasks from the TaskScheduler
To unschedule a task from the AlertTaskManager use the following REST endpoint:
Endpoint: /limits/rest/v2/limitEvaluation/unschedule
Method: POST Example Endpoint: http://localhost:3090/limits/v1/rest/limitEvaluation/unschedule
Example Body:
{
"serverName":"FRTB",
"cubeName":"StandardisedApproachCube",
"kpiName":"SA Book Limit",
"pollingFrequency":"INTRADAY"
}
Example Response:
{
"response": "Successfully processed unscheduling task with key : 2018-09-28Equity Desk Hardid_252394Value-at-Risk Portfolio Limit2018-03-012021-03-31OFFICIALEODAPPROVEDUSD2000DeltaDesk=BondsSheila from Risk ControlSensitivity Cube"
}