Skip to content

Notifications

Rubhan Azeem edited this page Oct 7, 2021 · 28 revisions

Details about our notification sub-system.

This sub-system is based on the Event::Base, EventSubscription and Notification classes.

Workflow

  • An Event gets stored in the database
  • clockwork periodically schedules a SendEventEmailsJob every 30 seconds.
  • SendEventEmailsJob goes over the Event table and
    • sends e-mail for all Event that have email subscribers
    • creates Notification for all Event that have web/rss subscribers

Event And Subscription

An Event describes things that happen throughout the whole OBS (backend+frontend). For instance:

  • A comment is added to a package
  • Someone sent a submit request for a package

A Subscription is specific for a User, a Group, a type of Event (eventtype=Event::CommentForPackage), a Role the User might have (receiver_role="maintainer") and the place where it should be displayed (channel=web, channel=instant_email)

See the Events page for deeper information about Event & Subscription.

Notifications

A Notification is for a specific Event, a User (subscriber_id=1) and one or more places where it should be displayed (rss=true, web=false). There are mainly three types of notifications in OBS (Email, Web, and RSS).

Notifications for Web and RSS

These events generate notifications for Web and RSS.

  • Event::ReviewWanted
  • Event::RequestCreate
  • Event::RequestStatechange
  • Event::CommentForProject
  • Event::CommentForPackage
  • Event::CommentForRequest

Notifications for Email

In addition to the events mentioned above, email notifications use two addtional events.

  • Event::BuildFail
  • Event::ServiceFail

Triggering a Notification

All notifications are triggered with the help of SendEventEmailsJob. This job depends on:

  • NotificationService::Notifier for Web and RSS feeds
  • EventMailer for emails

NotificationService::Notifier takes the event object and notify the subscribers for Web and RSS feeds.

Avoiding Duplicate Notifications

OBS use mails_sent column in events table to keep track of the events that are notified, regardless of the channel (Web/RSS/Email). Once an event is notified mails_sent is set to true.

Clone this wiki locally