Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
XORC Notifications
A collection of services consuming PushNotification events to send push notifications to apns2/fcm/web push and Application events to receive configuration.
The systems are by default multi-tenant for sending push notifications to multiple different applications.
- apns2 for Apple notifications
- fcm for Google notificiations
- web_push for Web push notifications
- http_requester for generic HTTP requests
- common a library used by all four consumers
Dependencies
The systems are written with Rust and it should always be possible to compile with the latest stable version. The de-facto way of getting the latest Rust is with rustup:
> curl |
> rustup
> rustup
To check that everything works:
> rustc
)
> cargo
)
Some of the crates used in the project have dependencies to certain system libraries and tools, for Ubuntu 18.04 you get them with:
> sudo
Development setup
The project uses Protocol
Buffers for event schemas.
cargo build
should generate the corresponding Rust structs to be used in the
code. By default the protobuf classes are included as a submodule, which must be
imported to the project tree:
> git
Configuration examples for all the consumers are in config. Create a copy from an example config removing the ending, and modify it to suit your test setup.
Running apns2:
> env CONFIG=./config/apns2.toml
Running fcm:
> env CONFIG=./config/fcm.toml
Running web_push:
> env CONFIG=./config/web_push.toml
Running http_requester:
> env CONFIG=./config/http_requester.toml
Example scripts for testing purposes
The examples directory contains helper scripts for testing the consumers.
To build them:
The executables are in target/release
directory.
Configuration
The system is configuration is handled through a toml file and a environment variable.
Environment variables
variable | description | example |
---|---|---|
CONFIG |
The configuration file location | /etc/xorc-notifications/config.toml |
LOG_FORMAT |
Log output format | text or json , default: text |
RUST_ENV |
The program environment | test , development , staging or production , default: development |
Required options
section | key | description | example |
---|---|---|---|
[kafka] |
input_topic |
Notification input topic | "production.notifications.apns" |
[kafka] |
config_topic |
Application configuration topic | "production.applications" |
[kafka] |
output_topic |
Notification response topic | "production.oam" |
[kafka] |
group_id |
Consumer group ID | "production.consumers.apns" |
[kafka] |
brokers |
Comma-separated list of Kafka brokers | "kafka1:9092,kafka2:9092" |
[kafka] |
consumer_type |
Decides the input protobuf deserialization | push_notification for PushNotification , http_request for HttpRequest |
Code Architecture
- All four systems use an asynchronous Kafka consumer consuming the
input_topic
, requesting the external service with a client, parsing the response and responding back to the caller. - System should implement the
EventHandler
(request_consumer.rs) and respond withResponseProducer
(response_producer.rs). - Consumer should keep track of connections for different applications using
the configuration values from the
config_topic
. - In general none of the main code should never block.
- All consumers talk HTTP and when requested, return Prometheus statistics