Rhythm is a service made to support the initiation of repeating unique events. Other services request a "beat" that occurs once and only once per day for a tenant at a specific hour. Times are requested as an integer 0-23 with 0 being midnight.
This is more complicated than it might seem at first blush for several reasons:
- There might be multiple instances of a rhythm service, but only one event should be sent. (Currently, this use case is prepared for, but not completely implemented.)
- Unlike most other services, the tenant is not part of the request which causes an action to be started. Only the time of day is. For this reason, the beat specifications cannot be saved in a tenant-specific table. Since we don't want to set up one rhythm service per tenant, internally there must be one table for all tenants.
- Calls to the other services should be made in a secure fashion. The "beat" is clock-initiated not user-initiated. A user token cannot be used to authorize the action.