47 lines
1.1 KiB
Go
47 lines
1.1 KiB
Go
//go:build !windows
|
|
|
|
package server
|
|
|
|
import (
|
|
"os"
|
|
"os/signal"
|
|
"syscall"
|
|
|
|
"github.com/eleksir/pekoe/internal/logger"
|
|
)
|
|
|
|
// signalSetup configures signal handlers for Unix systems.
|
|
// Returns a channel that receives incoming signals.
|
|
func signalSetup() chan os.Signal {
|
|
sigCh := make(chan os.Signal, 1)
|
|
signal.Notify(sigCh, syscall.SIGINT, syscall.SIGTERM, syscall.SIGHUP, syscall.SIGUSR1)
|
|
return sigCh
|
|
}
|
|
|
|
// handleSignal processes a received signal and returns true if the server should shutdown.
|
|
func (s *Server) handleSignal(sig os.Signal) bool {
|
|
switch sig {
|
|
case syscall.SIGUSR1:
|
|
// Reopen log files for log rotation
|
|
if err := logger.Reopen(); err != nil {
|
|
logger.Error("event=log_reopen_error error=%v", err)
|
|
} else {
|
|
logger.Info("event=log_reopened")
|
|
}
|
|
return false // Continue listening
|
|
|
|
case syscall.SIGINT, syscall.SIGTERM:
|
|
// Graceful shutdown
|
|
logger.Info("event=shutdown signal=%v", sig)
|
|
return true // Shutdown
|
|
|
|
case syscall.SIGHUP:
|
|
// Reserved for future config reload functionality
|
|
logger.Info("event=sighup_ignored message=reload not implemented")
|
|
return false // Continue listening
|
|
|
|
default:
|
|
return false
|
|
}
|
|
}
|