Update README.md

This commit is contained in:
2024-11-01 20:00:32 -07:00
parent 46d3b66feb
commit 097ca99788
+153
View File
@@ -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.