mirror of
https://github.com/hcengineering/platform.git
synced 2026-08-17 18:05:42 +02:00
* feat: Add ability to schedule notifications Signed-off-by: Artem Savchenko <armisav@gmail.com> * Clean up Signed-off-by: Artem Savchenko <armisav@gmail.com> * Clean up Signed-off-by: Artem Savchenko <armisav@gmail.com> * Add docker file Signed-off-by: Artem Savchenko <armisav@gmail.com> * Rename pod Signed-off-by: Artem Savchenko <armisav@gmail.com> * Add debug logging Signed-off-by: Artem Savchenko <armisav@gmail.com> * Reminder fixes Signed-off-by: Artem Savchenko <armisav@gmail.com> * Fix reminders Signed-off-by: Artem Savchenko <armisav@gmail.com> * Support reminders for all events Signed-off-by: Artem Savchenko <armisav@gmail.com> * Clean up Signed-off-by: Artem Savchenko <armisav@gmail.com> * Support for project todo Signed-off-by: Artem Savchenko <armisav@gmail.com> * Fix mismatched dependency Signed-off-by: Artem Savchenko <armisav@gmail.com> * Use base event class Signed-off-by: Artem Savchenko <armisav@gmail.com> --------- Signed-off-by: Artem Savchenko <armisav@gmail.com>
Time Machine Service
The Time Machine service is an autonomous, generic service responsible for handling delayed events (timers). It replaces the previous Temporal implementation with a database-backed polling mechanism and Kafka-based communication.
How it works
- Commands: The service consumes commands from the
TimeMachineKafka topic. - Storage: Scheduled events are stored in a PostgreSQL table
time_machine.delayed_events. - Polling: The service periodically polls the database for expired events.
- Events: When an event expires, the service sends the stored
datato the specifiedtopicvia Kafka and removes the record from its database.
Kafka Interactions
Consumed (Incoming)
Topic: TimeMachine (timeMachine)
Message Type: TimeMachineMessage
| Type | Description |
|---|---|
schedule |
Schedules a new timer or updates an existing one. Requires id, targetDate, topic, and data. |
cancel |
Removes scheduled timers. The id supports pattern matching via ILIKE (e.g., prefix_%). |
Produced (Outgoing)
Topic: Dynamic (specified in schedule command)
Message Type: Arbitrary JSON (stored in data)
When a timer expires, the service relays the exact data payload to the target topic.
Environment Variables
| Variable | Default | Description |
|---|---|---|
DB_URL |
postgres://localhost:5432/huly |
Connection string for the PostgreSQL database. |
POLL_INTERVAL |
5000 |
Polling interval for expired events in milliseconds. |
QUEUE_CONFIG |
- | Kafka bootstrap servers configuration. |
QUEUE_REGION |
(empty) | Kafka topic prefix; must match transactor REGION / other services QUEUE_REGION. |
LOG_LEVEL |
info |
Set to debug for verbose diagnostic logs (ctx.debug) on TimeMachine consumes and poll batches. |
Database Schema
The service automatically initializes its own schema if it doesn't exist:
- Schema:
time_machine - Table:
delayed_events - Columns:
id(text),workspace(uuid),target_date(int8),topic(text),data(jsonb). - Primary Key:
(id, workspace)