Compare commits

...

2 Commits

2 changed files with 80 additions and 8 deletions

View File

@@ -6,23 +6,42 @@ A Go client and utility for interacting with the IamResponding (IaR) API, design
- API client for IaR with keep-alive and alerting support - API client for IaR with keep-alive and alerting support
- Configurable via YAML and Go structs - Configurable via YAML and Go structs
- Modular codebase for easy extension - Modular codebase for easy extension
- Logging with slog - Comprehensive test coverage
- File system watcher for MP3 files
- Event-driven architecture with custom event bus
- Structured logging with slog
- HTTP client with automatic cookie management
## Project Structure ## Project Structure
``` ```
config.yml # Example configuration file config.yml # Example configuration file
go.mod # Go module file
go.sum # Go dependencies checksum
main.go # Entry point main.go # Entry point
bus/ # Event bus logic bus/
client/ # IaR API client and helpers ├── bus.go # Custom event bus implementation
config/ # Configuration structs and loading └── bus_test.go # Event bus tests
utils/ # Utility functions client/
watcher/ # File or event watcher logic ├── client.go # IaR API client
├── response.go # API response structures
├── request.go # API request structures
├── client_test.go # Basic client tests
└── client_api_test.go # API integration tests with mocked responses
config/
├── config.go # Configuration loading and structs
└── config_test.go # Configuration tests
utils/
├── encoder.go # MP3 to base64 encoder
└── encoder_test.go # Encoder tests
watcher/
├── watcher.go # File system watcher for MP3 files
└── watcher_test.go # Watcher tests
``` ```
## Getting Started ## Getting Started
### Prerequisites ### Prerequisites
- Go 1.20 or newer - Go 1.25 or newer
- Access to the IamResponding API (credentials required) - Access to the IamResponding API (credentials required)
### Installation ### Installation
@@ -38,7 +57,24 @@ go mod tidy
``` ```
### Configuration ### Configuration
Edit `config.yml` with your IaR credentials and settings. Create a `config.yml` file with your IaR credentials and settings:
```yaml
credentials:
secret_key: "your_secret_key"
ttd_api_key: "your_ttd_api_key"
directory: "/path/to/watch/for/mp3/files"
watch_debounce_seconds: 5
logging:
level: "INFO"
```
Configuration options:
- `credentials.secret_key`: IaR API secret key
- `credentials.ttd_api_key`: IaR API key
- `directory`: Directory to watch for MP3 files
- `watch_debounce_seconds`: Debounce time for file events (default: 1)
- `logging.level`: Log level (DEBUG, INFO, WARN, ERROR)
### Usage ### Usage
Build and run the main application: Build and run the main application:
@@ -52,12 +88,48 @@ go build -o iar-notificator main.go
./iar-notificator ./iar-notificator
``` ```
The application will:
1. Load configuration from `config.yml`
2. Start watching the specified directory for MP3 files
3. Send keep-alive signals to IaR API at regular intervals
4. Automatically upload MP3 files as alerts when detected
## API Integration
The client integrates with the IaR API using GraphQL queries and mutations:
- **KeepAlive**: Retrieves pager group information and maintains connection
- **PreAlert**: Creates an alert entry
- **Alert**: Uploads audio data to an existing alert
API responses are parsed and used to populate internal state for subsequent requests.
## Testing ## Testing
Run all tests: Run all tests:
```sh ```sh
go test ./... go test ./...
``` ```
Run tests for specific packages:
```sh
go test ./client
go test ./config
go test ./bus
go test ./watcher
go test ./utils
```
The test suite includes:
- Unit tests for all core functionality
- Integration tests with mocked HTTP responses
- File system watcher tests
- Configuration loading tests
- Event bus concurrency tests
## Dependencies
- `resty.dev/v3`: HTTP client for API requests
- `github.com/fsnotify/fsnotify`: File system watching
- `gopkg.in/yaml.v3`: YAML configuration parsing
## License ## License
MIT License MIT License