52 lines
1.0 KiB
Go
52 lines
1.0 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/signal"
|
|
"strconv"
|
|
"syscall"
|
|
)
|
|
|
|
func main() {
|
|
watchedDir := os.Getenv("WATCHED_DIR")
|
|
|
|
numChildProcesses := 1
|
|
if n, err := strconv.Atoi(os.Getenv("NUM_CHILD_PROCESSES")); err == nil && n > 0 {
|
|
numChildProcesses = n
|
|
}
|
|
|
|
basePort := 3000
|
|
if p, err := strconv.Atoi(os.Getenv("BASE_PORT")); err == nil && p > 0 {
|
|
basePort = p
|
|
}
|
|
|
|
listenPort := 8080
|
|
if p, err := strconv.Atoi(os.Getenv("LISTEN_PORT")); err == nil && p > 0 {
|
|
listenPort = p
|
|
}
|
|
|
|
// Create worker pool
|
|
pool := NewWorkerPool()
|
|
|
|
// Setup signal handling
|
|
sigCh := make(chan os.Signal, 1)
|
|
signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM)
|
|
|
|
fileChanges := make(chan FileChange, 10)
|
|
|
|
go watchFiles(watchedDir, fileChanges)
|
|
|
|
go runExpress(fileChanges, numChildProcesses, basePort, pool)
|
|
|
|
// Start the reverse proxy
|
|
listenAddr := fmt.Sprintf(":%d", listenPort)
|
|
go startProxy(listenAddr, pool)
|
|
|
|
// Wait for interrupt signal
|
|
<-sigCh
|
|
fmt.Println("\nReceived interrupt signal, shutting down...")
|
|
|
|
fmt.Println("All processes terminated cleanly")
|
|
}
|