package main import ( "fmt" "log" "net/http" "os" "github.com/gin-gonic/gin" ) const ADDRESS = "0.0.0.0" const PORT = "3000" const LOG_FILE = "./log/api-server.log" var containerName string type HelloResponseDto struct { Message string `json:"message"` } func handleHello(ctx *gin.Context) { log.Println("Request received to handleHello") ctx.JSON( http.StatusOK, HelloResponseDto{ Message: fmt.Sprintf("Hello world from %s", containerName), }, ) } func openLogFile(path string) (*os.File, error) { logFile, err := os.OpenFile(path, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0644) if err != nil { return nil, err } return logFile, nil } func initLogging() { file, err := openLogFile(LOG_FILE) if err != nil { log.Fatal(err) } log.SetOutput(file) log.SetFlags(log.LstdFlags | log.Lshortfile | log.Lmicroseconds) } func main() { // get container name from environment containerName = os.Getenv("CONTAINER_NAME") if len(containerName) == 0 { containerName = "Unknown" } // get port from environment port := os.Getenv("PORT") if len(port) == 0 { port = PORT } initLogging() serverAddr := fmt.Sprintf("%s:%s", ADDRESS, port) // init gin gin.SetMode(gin.ReleaseMode) router := gin.Default() router.GET("/hello", handleHello) msg := fmt.Sprintf("Running server on %s as %s", serverAddr, containerName) log.Println(msg) fmt.Printf("%s\n", msg) // finally, start server router.Run(serverAddr) }