Update README.md
This commit is contained in:
@@ -0,0 +1,153 @@
|
|||||||
|
|
||||||
|
# Notifier Module
|
||||||
|
|
||||||
|
The **Notifier** module provides a flexible notification system that supports multiple notification modes (e.g., SMTP, SMS, Slack, Ntfy, and Stdout). It can operate as a standalone gRPC or REST microservice, or be used as an imported module in other projects.
|
||||||
|
|
||||||
|
## Features
|
||||||
|
|
||||||
|
- **Multi-Mode Notification**: Supports different notification methods including SMTP email, SMS, Slack, Ntfy, and standard output.
|
||||||
|
- **Extensible Design**: Add new notification modes by implementing the `Notifier` interface.
|
||||||
|
- **gRPC and REST APIs**: Accessible through both gRPC and RESTful APIs, allowing easy integration into various systems.
|
||||||
|
- **Configuration Management**: Easily configurable for different environments and API keys.
|
||||||
|
|
||||||
|
## Project Structure
|
||||||
|
|
||||||
|
```plaintext
|
||||||
|
notifier/
|
||||||
|
├── api/
|
||||||
|
│ ├── grpc/ # gRPC service definitions and generated code
|
||||||
|
│ └── rest/ # REST API handlers and router
|
||||||
|
├── cmd/
|
||||||
|
│ ├── grpcserver/ # Entrypoint for running the gRPC server
|
||||||
|
│ └── restserver/ # Entrypoint for running the REST server
|
||||||
|
├── internal/
|
||||||
|
│ ├── config/ # Configuration loading
|
||||||
|
│ └── notifier/ # Core notification logic with multiple implementations
|
||||||
|
├── pkg/
|
||||||
|
│ ├── grpcclient/ # gRPC client for interacting with the notifier service
|
||||||
|
│ └── restclient/ # REST client for interacting with the notifier service
|
||||||
|
├── Dockerfile # Docker configuration for deploying as a microservice
|
||||||
|
├── LICENSE # License file
|
||||||
|
├── README.md # Documentation
|
||||||
|
└── go.mod # Defines the module's dependencies, module path, and Go version
|
||||||
|
```
|
||||||
|
|
||||||
|
## Getting Started
|
||||||
|
|
||||||
|
### Prerequisites
|
||||||
|
|
||||||
|
- **Go**: Install Go 1.18 or higher.
|
||||||
|
- **Protocol Buffers**: Required if you want to regenerate gRPC code.
|
||||||
|
- **Docker** (optional): For containerized deployment.
|
||||||
|
|
||||||
|
### Installation
|
||||||
|
|
||||||
|
To install the notifier module as a dependency in another Go project, run:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
go get github.com/igodwin/notifier
|
||||||
|
```
|
||||||
|
|
||||||
|
### Running the Service
|
||||||
|
|
||||||
|
#### gRPC Server
|
||||||
|
|
||||||
|
To start the gRPC server:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd cmd/grpcserver
|
||||||
|
go run main.go
|
||||||
|
```
|
||||||
|
|
||||||
|
#### REST Server
|
||||||
|
|
||||||
|
To start the REST server:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd cmd/restserver
|
||||||
|
go run main.go
|
||||||
|
```
|
||||||
|
|
||||||
|
### Configuration
|
||||||
|
|
||||||
|
Configure notification modes via environment variables or a configuration file (e.g., `config.yaml`). Configuration settings may include:
|
||||||
|
|
||||||
|
- **SMTP**: SMTP server details, port, credentials.
|
||||||
|
- **SMS**: SMS provider API keys.
|
||||||
|
- **Slack**: Slack webhook URLs.
|
||||||
|
- **Ntfy**: Ntfy service URL and options.
|
||||||
|
|
||||||
|
For example, using a `config.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
smtp:
|
||||||
|
server: "smtp.example.com"
|
||||||
|
port: 587
|
||||||
|
username: "user@example.com"
|
||||||
|
password: "password"
|
||||||
|
|
||||||
|
slack:
|
||||||
|
webhook_url: "https://hooks.slack.com/services/..."
|
||||||
|
```
|
||||||
|
|
||||||
|
### Usage
|
||||||
|
|
||||||
|
#### Using gRPC API
|
||||||
|
|
||||||
|
1. Define a gRPC client using the `pkg/grpcclient` package.
|
||||||
|
2. Call `SendNotification` to send a message through a chosen notification method.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```go
|
||||||
|
client, err := grpcclient.NewClient("localhost:50051")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to create gRPC client: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
resp, err := client.SendNotification("recipient@example.com", "Hello via gRPC!")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to send notification: %v", err)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Using REST API
|
||||||
|
|
||||||
|
1. Define a REST client using the `pkg/restclient` package.
|
||||||
|
2. Call `SendNotification` via REST.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
```go
|
||||||
|
client := restclient.NewClient("http://localhost:8080")
|
||||||
|
err := client.SendNotification("recipient@example.com", "Hello via REST!")
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("Failed to send notification: %v", err)
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
### Implementing New Notification Modes
|
||||||
|
|
||||||
|
To add a new notification method, implement the `Notifier` interface in `internal/notifier/`:
|
||||||
|
|
||||||
|
```go
|
||||||
|
type Notifier interface {
|
||||||
|
Send(notification Notification) error
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Add the new mode (e.g., `sms.go`) with the `Send` method to implement custom logic.
|
||||||
|
|
||||||
|
## Contributing
|
||||||
|
|
||||||
|
Contributions are welcome! To contribute, fork the repository, make your changes, and submit a pull request.
|
||||||
|
|
||||||
|
1. Fork the repository.
|
||||||
|
2. Create a feature branch (`git checkout -b feature/NewMode`).
|
||||||
|
3. Commit your changes (`git commit -am 'Add new notification mode'`).
|
||||||
|
4. Push to the branch (`git push origin feature/NewMode`).
|
||||||
|
5. Create a new Pull Request.
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.
|
||||||
|
|||||||
Reference in New Issue
Block a user