Sending Custom Notifications

User notifications

Atoti Limits uses the Notification Service to send notifications to the UI. Out of the box, Atoti Limits sends notifications:

  • to users with the role ROLE_ADMIN when the initial data load completes. This is configurable in the application.yml file using the limits.notification.server-started-notification-user-role property.
  • to all users when limit evaluations complete. This is configurable in the application.yml file using the limits.notification.evaluation-completed-notification-user-role property.
  • to users specified as Approvers when a FourEyes limit is created or updated

Technical notifications

Atoti Limits also sends technical notifications. These are notifications that are used to communicate information to the UI and are not shown to users. See the Notification Service documentation for more information on technical notifications.

The following technical notifications are included out of the box:

  • When Limits KPIs are updated, a technical notification with classifier refresh-datamodel is sent to the user who triggered the update. This notification will also have classifiers that contain the names of application servers which contain the KPIs that were updated. Upon receiving this technical notification, the UI will refresh the data models of these application servers.

Send a custom notification

To send custom notifications, follow these steps.

1. Inject the INotificationService bean into your class

The INotificationService is responsible for all management of notifications, including publishing, retrieving, and executing actions. To use it, inject the service into the component that needs to send notifications:

@Autowired private INotificationService notificationService;

OR

@Component
@RequiredArgsConstructor
public class MyComponent {
    private final INotificationService notificationService;
}

2. Create and publish your notifications

With the service wired up, you can now create and publish notifications.

The Notification class is a simple POJO that represents a notification. Use one of the class’s builder methods to create Notification objects:

  • Notification.notificationWithDefaultActionsBuilder(): Creates a notification with the default actions. For more information see the actions section. This is the recommended builder to use in most scenarios.
  • Notification.builder(): Creates a bare notification with no actions.

Once you have chosen the builder method to use, create the notification:

Notification notification = Notification.notificationWithDefaultActionsBuilder()
    .title("My Custom Limits Notification")                     // This will be the headline for the notification in the UI
    .description("This is a sample notification")               // This will be the body of the notification in the UI
    .severity(NotificationSeverity.MEDIUM)                      // Determines the color of the severity indicator for the notification (LOW - green, MEDIUM - yellow, HIGH - red)
    .classifiers(List.of("category 1", "custom-classifier"))    // Classifiers that can be used to filter notifications in the UI
    .build();

With your notification created, you can now publish it using the INotificationService:

notificationService.publishNotification(notification);

That’s it - your notification has been published and will be visible in the Atoti Limits UI.

Notification actions

Notifications can have actions that users can take when they receive them. Instances of the NotificationAction class represent one of these actions that can be taken on a notification. There are three default actions that are provided when using the Notification.notificationWithDefaultActionsBuilder() method:

  • MARK_READ: Marks the notification as read. Only enabled if the notification is unread (isRead=false).
  • MARK_UNREAD: Marks the notification as unread. Only enabled if the notification is read (isRead=true).
  • DELETE: Deletes the notification.

Restricting notifications to specific users

By default, notifications are sent to all users. If you want to restrict a notification to only be sent to specific users, you can do so by setting the users or userRoles fields:

Notification notification = Notification.notificationWithDefaultActionsBuilder()
    ...
    .users(List.of("user1", "user2"))    // Only these users will receive the notification
    .userRoles(List.of("ROLE_MANAGERS")) // Only users with this role will receive the notification
    .build();

Most use cases should only use one of these fields. If both are set, the notification will only be sent to users who are in the users list AND have one of the roles in userRoles.

Notification Service properties

The Notification Service contains the following properties that can be configured in your application.yml file:

Property Default Value Description
notification-service.emitter-timeout 8h The maximum time to keep the connection to the UI open.
notification-service.initial-notification-mode SEND_ALL Controls the notifications that are sent in the initial event after a subscription is created. Available modes:
  • SEND_ALL - all notifications applicable to the user that were created since the application started will be sent in the initial event. This is the default mode.
  • DONT_SEND - no notifications will be sent in the initial event.