XORC Notifications

Travis Build Status Apache licensed

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.

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:

```bash

curl https://sh.rustup.rs -sSf | sh rustup update rustup default stable ```

To check that everything works:

```bash

rustc --version rustc 1.30.0 (da5f414c2 2018-10-24) cargo --version cargo 1.30.0 (36d96825d 2018-10-24) ```

Some of the crates used in the project have dependencies to certain system libraries and tools, for Ubuntu 18.04 you get them with:

```bash

sudo apt install build-essential libssl-dev automake ca-certificates libffi-dev protobuf-compiler ```

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:

```bash

git submodule update --init ```

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:

```bash

env CONFIG=./config/apns2.toml cargo run --bin apns2 ```

Running fcm:

```bash

env CONFIG=./config/fcm.toml cargo run --bin fcm ```

Running web_push:

```bash

env CONFIG=./config/webpush.toml cargo run --bin webpush ```

Running http_requester:

```bash

env CONFIG=./config/httprequester.toml cargo run --bin httprequester ```

Example scripts for testing purposes

The examples directory contains helper scripts for testing the consumers.

To build them:

bash cargo build --release --examples

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