refactor: update Dockerfile to expose port 8080 and enhance logging middleware with detailed request and response information
All checks were successful
Release / build-image (push) Successful in 40s
All checks were successful
Release / build-image (push) Successful in 40s
This commit is contained in:
parent
d7ac488610
commit
5f99618449
3 changed files with 98 additions and 6 deletions
|
@ -29,7 +29,7 @@ FROM gcr.io/distroless/base-debian11 AS build-release-stage
|
|||
WORKDIR /
|
||||
COPY --from=builder /app /app
|
||||
|
||||
EXPOSE 8888
|
||||
EXPOSE 8080
|
||||
|
||||
USER nonroot:nonroot
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
appVersion: v0.1.0
|
||||
appVersion: v0.5.0
|
100
src/main.go
100
src/main.go
|
@ -19,11 +19,42 @@ import (
|
|||
func loggingMiddleware(next http.HandlerFunc) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
start := time.Now()
|
||||
next(w, r)
|
||||
log.Printf("%s %s %s %s", r.RemoteAddr, r.Method, r.URL.Path, time.Since(start))
|
||||
|
||||
// Add debug logging for request details
|
||||
logLevel := strings.ToLower(os.Getenv("LOG_LEVEL"))
|
||||
if logLevel == "debug" {
|
||||
log.Printf("Request received: %s %s", r.Method, r.URL.Path)
|
||||
log.Printf("Request headers: %v", r.Header)
|
||||
if r.ContentLength > 0 {
|
||||
log.Printf("Request content length: %d bytes", r.ContentLength)
|
||||
}
|
||||
}
|
||||
|
||||
// Create a response wrapper to capture status code
|
||||
rwWrapper := &responseWriterWrapper{ResponseWriter: w, statusCode: http.StatusOK}
|
||||
next(rwWrapper, r)
|
||||
|
||||
duration := time.Since(start)
|
||||
log.Printf("%s %s %s %d %s", r.RemoteAddr, r.Method, r.URL.Path, rwWrapper.statusCode, duration)
|
||||
|
||||
if logLevel == "debug" && rwWrapper.statusCode >= 400 {
|
||||
log.Printf("Warning: Request %s %s returned status code %d", r.Method, r.URL.Path, rwWrapper.statusCode)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// responseWriterWrapper captures the status code of the response
|
||||
type responseWriterWrapper struct {
|
||||
http.ResponseWriter
|
||||
statusCode int
|
||||
}
|
||||
|
||||
// WriteHeader captures the status code before writing it
|
||||
func (rww *responseWriterWrapper) WriteHeader(statusCode int) {
|
||||
rww.statusCode = statusCode
|
||||
rww.ResponseWriter.WriteHeader(statusCode)
|
||||
}
|
||||
|
||||
// corsMiddleware adds CORS headers to responses
|
||||
func corsMiddleware(next http.HandlerFunc, allowedOrigins []string) http.HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) {
|
||||
|
@ -56,6 +87,12 @@ func chainMiddleware(h http.HandlerFunc, middlewares ...func(http.HandlerFunc) h
|
|||
}
|
||||
|
||||
func main() {
|
||||
// Configure log level
|
||||
logLevel := strings.ToLower(os.Getenv("LOG_LEVEL"))
|
||||
if logLevel == "debug" {
|
||||
log.Println("Debug logging enabled")
|
||||
}
|
||||
|
||||
apiToken := os.Getenv("TOKEN")
|
||||
apiSecret := os.Getenv("SECRET")
|
||||
|
||||
|
@ -63,12 +100,22 @@ func main() {
|
|||
log.Fatal("TOKEN and SECRET environment variables must be set")
|
||||
}
|
||||
|
||||
// Debug logging for environment variables when in debug mode
|
||||
if logLevel == "debug" {
|
||||
log.Println("Environment variables:")
|
||||
log.Printf("TOKEN: %s", maskSecret(apiToken))
|
||||
log.Printf("SECRET: %s", maskSecret(apiSecret))
|
||||
}
|
||||
|
||||
// Configure port from environment or use default
|
||||
port := 8080
|
||||
if portEnv := os.Getenv("PORT"); portEnv != "" {
|
||||
if p, err := strconv.Atoi(portEnv); err == nil {
|
||||
port = p
|
||||
}
|
||||
if logLevel == "debug" {
|
||||
log.Printf("Port set to %d", port)
|
||||
}
|
||||
}
|
||||
|
||||
// TLS configuration
|
||||
|
@ -76,13 +123,25 @@ func main() {
|
|||
keyFile := os.Getenv("TLS_KEY_FILE")
|
||||
enableTLS := certFile != "" && keyFile != ""
|
||||
|
||||
if logLevel == "debug" && enableTLS {
|
||||
log.Println("TLS enabled")
|
||||
log.Printf("Using cert file: %s", certFile)
|
||||
log.Printf("Using key file: %s", keyFile)
|
||||
}
|
||||
|
||||
// Get allowed origins for CORS (default to "*" if not specified)
|
||||
allowedOriginsStr := os.Getenv("ALLOWED_ORIGINS")
|
||||
var allowedOrigins []string
|
||||
if allowedOriginsStr != "" {
|
||||
allowedOrigins = strings.Split(allowedOriginsStr, ",")
|
||||
if logLevel == "debug" {
|
||||
log.Printf("CORS allowed origins: %v", allowedOrigins)
|
||||
}
|
||||
} else {
|
||||
allowedOrigins = []string{"*"}
|
||||
if logLevel == "debug" {
|
||||
log.Println("CORS allowed origins: *")
|
||||
}
|
||||
}
|
||||
|
||||
webhook := webhook.New(apiToken, apiSecret)
|
||||
|
@ -101,12 +160,27 @@ func main() {
|
|||
mux.HandleFunc("/healthz", loggingMiddleware(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte("ok"))
|
||||
if logLevel == "debug" {
|
||||
log.Printf("Health check responded with 200 OK")
|
||||
}
|
||||
}))
|
||||
mux.HandleFunc("/readyz", loggingMiddleware(func(w http.ResponseWriter, r *http.Request) {
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write([]byte("ready"))
|
||||
if logLevel == "debug" {
|
||||
log.Printf("Readiness check responded with 200 OK")
|
||||
}
|
||||
}))
|
||||
|
||||
if logLevel == "debug" {
|
||||
log.Println("Server routes initialized:")
|
||||
log.Println("- / (Domain Filter)")
|
||||
log.Println("- /records (DNS Records)")
|
||||
log.Println("- /adjustendpoints (Adjust Endpoints)")
|
||||
log.Println("- /healthz (Health Check)")
|
||||
log.Println("- /readyz (Readiness Check)")
|
||||
}
|
||||
|
||||
// Create server
|
||||
server := &http.Server{
|
||||
Addr: fmt.Sprintf(":%d", port),
|
||||
|
@ -121,10 +195,10 @@ func main() {
|
|||
var err error
|
||||
|
||||
if enableTLS {
|
||||
fmt.Printf("Server is listening on TLS port %d...\n", port)
|
||||
log.Printf("Server is listening on TLS port %d...\n", port)
|
||||
err = server.ListenAndServeTLS(certFile, keyFile)
|
||||
} else {
|
||||
fmt.Printf("Server is listening on port %d...\n", port)
|
||||
log.Printf("Server is listening on port %d...\n", port)
|
||||
err = server.ListenAndServe()
|
||||
}
|
||||
|
||||
|
@ -133,12 +207,19 @@ func main() {
|
|||
}
|
||||
}()
|
||||
|
||||
if logLevel == "debug" {
|
||||
log.Println("Server started successfully and is ready to handle requests")
|
||||
}
|
||||
|
||||
// Wait for interrupt signal
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-quit
|
||||
|
||||
// Graceful shutdown
|
||||
if logLevel == "debug" {
|
||||
log.Println("Shutdown signal received, attempting graceful shutdown...")
|
||||
}
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
|
||||
defer cancel()
|
||||
|
||||
|
@ -147,4 +228,15 @@ func main() {
|
|||
log.Fatalf("Server forced to shutdown: %v", err)
|
||||
}
|
||||
fmt.Println("Server exited properly")
|
||||
if logLevel == "debug" {
|
||||
log.Println("Server shutdown completed successfully")
|
||||
}
|
||||
}
|
||||
|
||||
// Helper function to mask secrets in logs
|
||||
func maskSecret(secret string) string {
|
||||
if len(secret) <= 4 {
|
||||
return "****"
|
||||
}
|
||||
return secret[:2] + "****" + secret[len(secret)-2:]
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue