Init commit repo setup
This commit is contained in:
19
internal/transport/handler/readiness.go
Normal file
19
internal/transport/handler/readiness.go
Normal file
@@ -0,0 +1,19 @@
|
||||
package handler
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
type HealthCheckHandler struct{}
|
||||
|
||||
func (h *HealthCheckHandler) Readiness(c *gin.Context) {
|
||||
c.JSON(http.StatusOK, gin.H{
|
||||
"message": "pong",
|
||||
})
|
||||
}
|
||||
|
||||
func NewReadinessHandler() *HealthCheckHandler {
|
||||
return &HealthCheckHandler{}
|
||||
}
|
||||
30
internal/transport/middleware/metric_middleware.go
Normal file
30
internal/transport/middleware/metric_middleware.go
Normal file
@@ -0,0 +1,30 @@
|
||||
package middleware
|
||||
|
||||
import (
|
||||
"cybertron/models/instrumentation"
|
||||
"cybertron/pkg/metrics"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func MetricMiddleware() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
startTime := time.Now()
|
||||
c.Next()
|
||||
endTime := time.Now()
|
||||
duration := endTime.Sub(startTime)
|
||||
|
||||
metricsPublisher := metrics.NewMetricPublisher()
|
||||
apiMetrics := instrumentation.ApiMetric{
|
||||
Url: c.FullPath(),
|
||||
ResponseCode: c.Writer.Status(),
|
||||
StartTime: startTime.Unix(),
|
||||
EndTime: endTime.Unix(),
|
||||
DurationInMs: duration.Milliseconds(),
|
||||
Method: c.Request.Method,
|
||||
BytesSent: c.Writer.Size(),
|
||||
}
|
||||
metricsPublisher.PublishMetrics(instrumentation.MetricAttributes{ApiMetric: apiMetrics}, instrumentation.API_METRICS)
|
||||
}
|
||||
}
|
||||
12
internal/transport/router/readiness.go
Normal file
12
internal/transport/router/readiness.go
Normal file
@@ -0,0 +1,12 @@
|
||||
package router
|
||||
|
||||
import (
|
||||
"cybertron/internal/transport/handler"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
func ReadinessRouter(r *gin.Engine) {
|
||||
readinessHandler := handler.NewReadinessHandler()
|
||||
r.GET("/ping", readinessHandler.Readiness)
|
||||
}
|
||||
52
internal/transport/server.go
Normal file
52
internal/transport/server.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package transport
|
||||
|
||||
import (
|
||||
"cybertron/internal/transport/router"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"cybertron/configs"
|
||||
"cybertron/internal/dependencies"
|
||||
|
||||
ginzap "github.com/gin-contrib/zap"
|
||||
"github.com/gin-gonic/gin"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
gin *gin.Engine
|
||||
dependencies *dependencies.Dependencies
|
||||
}
|
||||
|
||||
func NewServer(dep *dependencies.Dependencies) *Server {
|
||||
return &Server{
|
||||
gin: gin.New(),
|
||||
dependencies: dep,
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) router() {
|
||||
router.ReadinessRouter(s.gin)
|
||||
}
|
||||
|
||||
func (s *Server) Start() {
|
||||
s.gin.Use(ginzap.RecoveryWithZap(s.dependencies.Logger, true))
|
||||
s.router()
|
||||
|
||||
port := configs.GetPort()
|
||||
s.dependencies.Logger.Info("Starting server", zap.Int("port", port))
|
||||
|
||||
err := s.gin.Run(fmt.Sprintf(":%v", port))
|
||||
if err != nil {
|
||||
s.dependencies.Logger.Fatal("error while starting the server", zap.Error(err))
|
||||
}
|
||||
}
|
||||
|
||||
func (s *Server) Close() {
|
||||
quit := make(chan os.Signal, 1)
|
||||
signal.Notify(quit, syscall.SIGINT, syscall.SIGTERM)
|
||||
<-quit
|
||||
s.dependencies.Logger.Info("Shutdown server ...")
|
||||
}
|
||||
Reference in New Issue
Block a user