go-sink/README.md

145 lines
3.9 KiB
Markdown

You can stream and read files to a BugSink DSN, GlitchTip, or Sentry. I was fed up with how brittle sentry-cli was so I made this.
I might get around to making a whole CI/CD process for this which will upload the executables properly at some point and make this public.
# Go Sink
Go Sink is a command-line utility that reads log messages from a file or stdin and sends them to BugSink, GlitchTip, or any compatible error tracking system.
## Installation
To install the binary locally, you can use the provided installation script. Run the following command in your terminal:
```sh
# For the latest stable version
curl -sSL https://git.nixc.us/Nixius/go-sink/raw/tag/v0.0.1/install.sh | bash
# Or to install a specific version (replace v0.0.1 with your desired version)
curl -sSL https://git.nixc.us/Nixius/go-sink/raw/tag/v0.0.1/install.sh | bash
```
This will download and install the Go Sink binary to your local machine.
## Usage
You can use Go Sink by specifying a log file as an argument or by piping input to it.
### Using a Log File
```sh
go-sink /path/to/logfile
```
### Using Piped Input
```sh
cat /path/to/logfile | go-sink
```
### Server Mode
You can also run Go Sink in server mode, which starts a webhook server that accepts log messages via HTTP requests:
```sh
go-sink server
```
The server listens on port 5050 by default. You can send log messages to the webhook endpoint:
```sh
curl -X POST -H "Content-Type: application/json" \
-d '{"log_level": "error", "message": "Error message", "service": "my-service"}' \
http://localhost:5050/webhook
```
## Configuration
Go Sink supports multiple environment variables for the DSN. You can use any of the following:
- `BUGSINK_DSN`: For BugSink instances
- `GLITCHTIP_DSN`: For GlitchTip instances
- `SENTRY_DSN`: For Sentry instances
If multiple environment variables are set, they are checked in the order listed above, and the first one found is used.
### Setting the DSN
#### Shell Environment
Add one of the following lines to your `.zshrc` or `.bashrc` file:
```sh
export BUGSINK_DSN="your-dsn"
# OR
export GLITCHTIP_DSN="your-dsn"
# OR
export SENTRY_DSN="your-dsn"
```
After adding the line, reload your shell configuration:
```sh
source ~/.zshrc # for zsh users
source ~/.bashrc # for bash users
```
#### Dockerfile
If you are using a Docker container, add the environment variable in your `Dockerfile`:
```Dockerfile
ENV BUGSINK_DSN=your-dsn
# OR
ENV GLITCHTIP_DSN=your-dsn
# OR
ENV SENTRY_DSN=your-dsn
```
#### docker-compose.yml
If you are using Docker Compose, add the environment variable in your `docker-compose.yml` file:
```yaml
services:
go-sink:
image: your-docker-image
environment:
- BUGSINK_DSN=your-dsn
# OR
# - GLITCHTIP_DSN=your-dsn
# OR
# - SENTRY_DSN=your-dsn
```
## Development
### Testing Protocol
Go Sink includes a comprehensive test suite in `build-run-test.sh` that ensures all functionality works correctly:
1. **Build and Verification**: The script builds the application for all supported platforms and verifies that the binaries are created.
2. **Environment Variable Tests**: Each supported DSN environment variable is tested with both plain text and JSON input:
- `BUGSINK_DSN`
- `GLITCHTIP_DSN`
- `SENTRY_DSN`
3. **Priority Tests**: The script tests that when multiple environment variables are set, the correct order of precedence is followed.
4. **Webhook Tests**: The server mode is tested with both single and batch webhook requests.
To run the tests, simply execute:
```sh
./build-run-test.sh
```
The script provides clear, color-coded output with pass/fail indicators for each test.
### Contributing
Before submitting changes, please ensure that:
1. You have run `./build-run-test.sh` to verify that all tests pass
2. Your changes maintain compatibility with all supported DSN environment variables
3. Any new features include appropriate tests in the test suite