This commit is contained in:
parent
cfd611103c
commit
6abbddf4a6
98
README.md
98
README.md
@ -1,3 +1,97 @@
|
||||
# backend-api-internal
|
||||
# Internal Notifier API
|
||||
|
||||
The internal part of the API. Duh!
|
||||
A FastAPI-based internal service that receives notification requests and forwards them to RabbitMQ for asynchronous processing and delivery to end users.
|
||||
|
||||
## Features
|
||||
|
||||
- **RabbitMQ Integration**: Asynchronous message queuing for reliable notification delivery
|
||||
- **Internal API Key Authentication**: Secure service-to-service communication
|
||||
- **MySQL Connection Pooling**: Database connection management with automatic health checks
|
||||
- **Prometheus Metrics**: Built-in request monitoring and tracking
|
||||
|
||||
## Architecture
|
||||
|
||||
This service acts as a gateway between internal services and the notification delivery system:
|
||||
|
||||
```
|
||||
Internal Services → Internal Notifier API → RabbitMQ → Notification Workers → End Users
|
||||
```
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Python 3.8+
|
||||
- MySQL database
|
||||
- RabbitMQ server
|
||||
- Required Python packages (see Installation)
|
||||
|
||||
## Installation
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
## Running the Application
|
||||
|
||||
```bash
|
||||
python main.py
|
||||
```
|
||||
|
||||
This starts two servers:
|
||||
- **Main API**: `http://0.0.0.0:8101`
|
||||
- **Metrics Server**: `http://0.0.0.0:9000`
|
||||
|
||||
## API Endpoints
|
||||
|
||||
### Receive Notifications
|
||||
```
|
||||
POST /internal/receive-notifications
|
||||
```
|
||||
|
||||
Receives notification data from internal services and queues it to RabbitMQ for delivery.
|
||||
|
||||
**Headers:**
|
||||
- `X-API-Key-Internal`: Your internal API key
|
||||
|
||||
**Request Body:**
|
||||
```json
|
||||
{
|
||||
"receipent_user_id": 12345,
|
||||
"message": {
|
||||
"title": "New Message",
|
||||
"body": "You have a new notification",
|
||||
"data": {
|
||||
"category": "utility",
|
||||
"link": "https://example.com",
|
||||
"timestamp": "1760734800"
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- `category` - Optional.
|
||||
- `link` - Optional.
|
||||
- `timestamp` - Optional.
|
||||
|
||||
**Response:**
|
||||
```json
|
||||
{
|
||||
"status": "queued"
|
||||
}
|
||||
```
|
||||
|
||||
**Success:** Returns 200 status code when message is successfully queued to RabbitMQ
|
||||
|
||||
## Error Responses
|
||||
|
||||
- `403 Forbidden`: Invalid, missing, or inactive API key
|
||||
- `500 Internal Server Error`: Database, RabbitMQ, or server error
|
||||
|
||||
## Monitoring
|
||||
|
||||
### Prometheus Metrics
|
||||
|
||||
Prometheus metrics are exposed on port 9000 and include:
|
||||
- HTTP request counters by method, path, and status code
|
||||
- Custom metrics from the metrics server
|
||||
|
||||
Access metrics at: `http://0.0.0.0:9000/metrics`
|
||||
Loading…
x
Reference in New Issue
Block a user