Files
ip-info/internal/services/api/main.go
thuanle 1ef2896fb1
All checks were successful
Build Docker Image / build (arm64) (push) Successful in 36s
Build Docker Image / build (amd64) (push) Successful in 4m18s
Build Docker Image / amend-manifest (push) Successful in 16s
query other ip
2025-10-13 17:27:14 +07:00

54 lines
1.0 KiB
Go

package api
import (
"errors"
"github.com/gin-gonic/gin"
"github.com/rs/zerolog/log"
"net/http"
"os"
"thuanle.me/ip-info/configs"
"thuanle.me/ip-info/configs/key"
)
var srv *http.Server
func StartApiService() {
log.Info().Msg("Starting API service")
engine := gin.Default()
trustedProxyIP := os.Getenv(key.EnvGinTrustedProxyIp)
if trustedProxyIP != "" {
_ = engine.SetTrustedProxies([]string{trustedProxyIP})
}
engine.GET("/", HandleMyIp)
engine.GET("/json", HandleJson)
engine.GET("/metrics", HandleMetrics)
engine.GET("/:ip", HandleOtherIp)
port := os.Getenv(key.EnvApiPort)
if len(port) == 0 {
port = configs.ApiDefaultPort
}
srv = &http.Server{
Addr: ":" + port,
Handler: engine,
}
go func() {
// service connections
if err := srv.ListenAndServe(); err != nil && !errors.Is(err, http.ErrServerClosed) {
log.Fatal().Err(err).Msg("Error running API service")
}
}()
log.Info().Str("port", port).Msg("API service started")
}
func Shutdown() {
_ = srv.Close()
log.Info().Msg("API service stopped")
}