1
1
Fork 0
debugreport/go-glitch.go

79 lines
1.9 KiB
Go

package main
import (
"bufio"
"fmt"
"os"
"strings"
"time"
"github.com/getsentry/sentry-go"
)
func main() {
// Check that exactly one argument is passed (file path)
if len(os.Args) != 2 {
fmt.Fprintf(os.Stderr, "Usage: %s <path to log file>\n", os.Args[0])
os.Exit(1)
}
filePath := os.Args[1]
// Open the file
file, err := os.Open(filePath)
if err != nil {
fmt.Fprintf(os.Stderr, "Error opening file: %s\n", err)
os.Exit(1)
}
defer file.Close()
// Read file contents into a string
scanner := bufio.NewScanner(file)
var content strings.Builder
for scanner.Scan() {
content.WriteString(scanner.Text())
content.WriteString("\n") // Preserve line breaks
}
if err := scanner.Err(); err != nil {
fmt.Fprintf(os.Stderr, "Error reading file: %s\n", err)
os.Exit(1)
}
logMessage := content.String()
dsn := os.Getenv("SENTRY_DSN")
if dsn == "" {
fmt.Fprintf(os.Stderr, "Error: SENTRY_DSN environment variable is not set.\n")
os.Exit(1)
}
// Initialize Sentry with the DSN
err = sentry.Init(sentry.ClientOptions{
Dsn: dsn,
})
if err != nil {
fmt.Fprintf(os.Stderr, "Error initializing Sentry: %s\n", err)
os.Exit(1)
}
// Defer a function to flush Sentry's buffer
defer func() {
success := sentry.Flush(5 * time.Second)
if !success {
fmt.Fprintf(os.Stderr, "Failed to flush Sentry buffer within the expected time.\n")
} else {
fmt.Println("Sentry buffer flushed successfully.")
}
}()
// Capture the message and output the event ID
eventID := sentry.CaptureMessage(logMessage)
if eventID != nil {
fmt.Printf("Sent message to Sentry with event ID: %s\n", *eventID)
} else {
fmt.Fprintf(os.Stderr, "Failed to send message to Sentry.\n")
}
}