diff --git a/Makefile b/Makefile index 2d2b3ba..15ea234 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,12 @@ +PORT=15521 + .PHONY: run-batched run-sqlite setup-sqlite run-batched: - cd batched-server && go run main.go + cd batched-server && go run main.go $(PORT) run-sqlite: setup-sqlite - cd sqlite-server && go run main.go + cd sqlite-server && go run main.go $(PORT) setup-sqlite: @if [ ! -f sqlite-server/go.mod ]; then \ diff --git a/batched-server/main.go b/batched-server/main.go index f207964..3be398a 100644 --- a/batched-server/main.go +++ b/batched-server/main.go @@ -3,6 +3,7 @@ package main import ( "encoding/csv" "encoding/json" + "log" "net/http" "os" "strings" @@ -10,14 +11,11 @@ import ( "time" ) -const PORT = ":3000" - var ( emailQueue []string queueLock sync.Mutex ) - func saveEmails() { queueLock.Lock() defer queueLock.Unlock() @@ -33,6 +31,7 @@ func saveEmails() { f, err := os.OpenFile("emails.csv", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { + log.Println("Failed to open file:", err) return } defer f.Close() @@ -40,22 +39,24 @@ func saveEmails() { writer := csv.NewWriter(f) defer writer.Flush() - // write header if file is new + // Write header if file is new if !fileExists { if err := writer.Write([]string{"email", "timestamp"}); err != nil { + log.Println("Failed to write header:", err) return } } - // write each email with timestamp + // Write each email with timestamp for _, email := range emailQueue { timestamp := time.Now().Format(time.RFC3339) if err := writer.Write([]string{email, timestamp}); err != nil { + log.Println("Failed to write email:", err) return } } - // clear queue + // Clear queue emailQueue = emailQueue[:0] } @@ -63,18 +64,18 @@ func saveEmails() { func init() { go func() { for { - time.Sleep(5 * time.Second); - queueLock.Lock(); - hasEmails := len(emailQueue) > 0; - queueLock.Unlock(); + time.Sleep(5 * time.Second) + queueLock.Lock() + hasEmails := len(emailQueue) > 0 + queueLock.Unlock() if hasEmails { - saveEmails(); + log.Println("Flushing email queue...") + saveEmails() } } - }(); + }() } - func submitHandler(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { http.Error(w, "Method not allowed", http.StatusMethodNotAllowed) @@ -102,10 +103,19 @@ func submitHandler(w http.ResponseWriter, r *http.Request) { func main() { + var PORT string + if len(os.Args) > 1 { + PORT = os.Args[1] + } else { + PORT = "15521" + } + http.HandleFunc("/submit", submitHandler) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) w.Write([]byte("Batched Write Server is running")) }) - http.ListenAndServe(PORT, nil) -} + + log.Println("Starting server on port", PORT) + log.Fatal(http.ListenAndServe(":"+PORT, nil)) +} \ No newline at end of file diff --git a/sqlite-server/go.mod b/sqlite-server/go.mod index 56f594e..963bce2 100644 --- a/sqlite-server/go.mod +++ b/sqlite-server/go.mod @@ -8,9 +8,10 @@ require ( github.com/mattn/go-isatty v0.0.20 // indirect github.com/ncruces/go-strftime v0.1.9 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect - golang.org/x/sys v0.22.0 // indirect - modernc.org/libc v1.55.3 // indirect - modernc.org/mathutil v1.6.0 // indirect - modernc.org/memory v1.8.0 // indirect - modernc.org/sqlite v1.34.5 // indirect + golang.org/x/exp v0.0.0-20230315142452-642cacee5cc0 // indirect + golang.org/x/sys v0.28.0 // indirect + modernc.org/libc v1.61.13 // indirect + modernc.org/mathutil v1.7.1 // indirect + modernc.org/memory v1.8.2 // indirect + modernc.org/sqlite v1.35.0 // indirect ) diff --git a/sqlite-server/main.go b/sqlite-server/main.go index cd65e62..04deec5 100644 --- a/sqlite-server/main.go +++ b/sqlite-server/main.go @@ -3,15 +3,22 @@ package main import ( "database/sql" "encoding/json" + "log" "net/http" + "os" "strings" _ "modernc.org/sqlite" ) -const PORT = ":3000" - func main() { + var PORT string + if len(os.Args) > 1 { + PORT = os.Args[1] + } else { + PORT = "15521" + } + db, _ := sql.Open("sqlite", "emails.db") db.Exec(`CREATE TABLE IF NOT EXISTS emails ( email TEXT PRIMARY KEY, @@ -40,5 +47,6 @@ func main() { w.Write([]byte("SQLite Write Server is running")) }) - http.ListenAndServe(PORT, nil) + log.Println("Starting server on port", PORT) + log.Fatal(http.ListenAndServe(":"+PORT, nil)) }