Init commit repo setup

This commit is contained in:
Lokesh Dugar
2024-07-23 14:16:26 +05:30
parent 72157608cd
commit 2012cd8940
29 changed files with 1012 additions and 1 deletions

View 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{}
}

View 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)
}
}

View 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)
}

View 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 ...")
}