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"
}