From c55e43f9f7c121cac5e4192f7c9af8ff7de0afd3 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Fri, 11 Oct 2024 19:07:43 +0530 Subject: [PATCH 01/25] Update config.go --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 08eaeaa..9cc13ba 100644 --- a/config/config.go +++ b/config/config.go @@ -27,7 +27,7 @@ func LoadConfig() *Config { } return &Config{ - DiceDBAddr: getEnv("DICEDB_ADDR", "localhost:7379"), // Default DiceDB address + DiceDBAddr: "localhost:7379", // Default DiceDB address ServerPort: getEnv("SERVER_PORT", ":8080"), // Default server port RequestLimitPerMin: getEnvInt("REQUEST_LIMIT_PER_MIN", 1000), // Default request limit RequestWindowSec: getEnvFloat64("REQUEST_WINDOW_SEC", 60), // Default request window in float64 From 7a0947f7698d48b1f58e3f771f525d85e86c110d Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Fri, 11 Oct 2024 19:10:47 +0530 Subject: [PATCH 02/25] added logs --- main.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/main.go b/main.go index 99c98e3..1ebbbf3 100644 --- a/main.go +++ b/main.go @@ -12,6 +12,9 @@ import ( func main() { configValue := config.LoadConfig() + slog.info("aasif!"); + slog.info(configValue); + slog.info("aasif printed!"); diceClient, err := db.InitDiceClient(configValue) if err != nil { slog.Error("Failed to initialize DiceDB client: %v", slog.Any("err", err)) From 947739e5514fded9bb1b08101ce528d22294e61a Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Fri, 11 Oct 2024 19:12:21 +0530 Subject: [PATCH 03/25] fix compilation --- main.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main.go b/main.go index 1ebbbf3..fb47759 100644 --- a/main.go +++ b/main.go @@ -12,9 +12,9 @@ import ( func main() { configValue := config.LoadConfig() - slog.info("aasif!"); - slog.info(configValue); - slog.info("aasif printed!"); + slog.Info("aasif!"); + slog.Info(configValue); + slog.Info("aasif printed!"); diceClient, err := db.InitDiceClient(configValue) if err != nil { slog.Error("Failed to initialize DiceDB client: %v", slog.Any("err", err)) From 285de23e364aa0219c5e8293bbb24d2837a25fcb Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Fri, 11 Oct 2024 19:13:43 +0530 Subject: [PATCH 04/25] fix compilation --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index fb47759..f5d9298 100644 --- a/main.go +++ b/main.go @@ -13,7 +13,7 @@ import ( func main() { configValue := config.LoadConfig() slog.Info("aasif!"); - slog.Info(configValue); + slog.Info("Config loaded:", slog.Any("configValue", configValue)) slog.Info("aasif printed!"); diceClient, err := db.InitDiceClient(configValue) if err != nil { From 78c42b3741c08dbb4110337cd72f96ca649cf1f7 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Fri, 11 Oct 2024 19:19:00 +0530 Subject: [PATCH 05/25] change IP --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 9cc13ba..6a28046 100644 --- a/config/config.go +++ b/config/config.go @@ -27,7 +27,7 @@ func LoadConfig() *Config { } return &Config{ - DiceDBAddr: "localhost:7379", // Default DiceDB address + DiceDBAddr: "192.168.1.3:7379", // Default DiceDB address ServerPort: getEnv("SERVER_PORT", ":8080"), // Default server port RequestLimitPerMin: getEnvInt("REQUEST_LIMIT_PER_MIN", 1000), // Default request limit RequestWindowSec: getEnvFloat64("REQUEST_WINDOW_SEC", 60), // Default request window in float64 From a2bc2cb539c3b479eeb363926d3f3c7040b300c2 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Fri, 11 Oct 2024 19:36:31 +0530 Subject: [PATCH 06/25] adding log for diceCmd --- internal/server/http.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/server/http.go b/internal/server/http.go index 876f959..57c9636 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -100,6 +100,7 @@ func (s *HTTPServer) HealthCheck(w http.ResponseWriter, request *http.Request) { func (s *HTTPServer) CliHandler(w http.ResponseWriter, r *http.Request) { diceCmd, err := util.ParseHTTPRequest(r) + slog.Info("aasif diceCmd:", slog.Any("diceCmd", diceCmd)) if err != nil { http.Error(w, errorResponse(err.Error()), http.StatusBadRequest) return From 2e07bc7520d8af669dcbfa5690e04d96af36e1e4 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Fri, 11 Oct 2024 19:43:20 +0530 Subject: [PATCH 07/25] log request --- internal/server/http.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/server/http.go b/internal/server/http.go index 57c9636..33caec5 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -99,6 +99,7 @@ func (s *HTTPServer) HealthCheck(w http.ResponseWriter, request *http.Request) { } func (s *HTTPServer) CliHandler(w http.ResponseWriter, r *http.Request) { + slog.Info("aasif request:", slog.Any("request=", r)) diceCmd, err := util.ParseHTTPRequest(r) slog.Info("aasif diceCmd:", slog.Any("diceCmd", diceCmd)) if err != nil { From 1a1572c0325cc2acc9929e2be76c296a851a7ee8 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Tue, 15 Oct 2024 00:37:20 +0530 Subject: [PATCH 08/25] Update ratelimiter.go --- internal/middleware/ratelimiter.go | 3 +++ 1 file changed, 3 insertions(+) diff --git a/internal/middleware/ratelimiter.go b/internal/middleware/ratelimiter.go index 66ea05a..c17b4a0 100644 --- a/internal/middleware/ratelimiter.go +++ b/internal/middleware/ratelimiter.go @@ -159,4 +159,7 @@ func addRateLimitHeaders(w http.ResponseWriter, limit, remaining, used, resetTim w.Header().Set("x-ratelimit-remaining", strconv.FormatInt(remaining, 10)) w.Header().Set("x-ratelimit-used", strconv.FormatInt(used, 10)) w.Header().Set("x-ratelimit-reset", strconv.FormatInt(resetTime, 10)) + + // Expose the rate limit headers to the client + w.Header().Set("Access-Control-Expose-Headers", "x-ratelimit-limit, x-ratelimit-remaining, x-ratelimit-used, x-ratelimit-reset") } From 6069eb8d99f69f0f3d6ce650ce5158c7b4bfc62f Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 17 Oct 2024 00:49:04 +0530 Subject: [PATCH 09/25] change IP --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index 6a28046..f006c69 100644 --- a/config/config.go +++ b/config/config.go @@ -27,7 +27,7 @@ func LoadConfig() *Config { } return &Config{ - DiceDBAddr: "192.168.1.3:7379", // Default DiceDB address + DiceDBAddr: "192.168.1.10:7379", // Default DiceDB address ServerPort: getEnv("SERVER_PORT", ":8080"), // Default server port RequestLimitPerMin: getEnvInt("REQUEST_LIMIT_PER_MIN", 1000), // Default request limit RequestWindowSec: getEnvFloat64("REQUEST_WINDOW_SEC", 60), // Default request window in float64 From d1c9ef85c65d10dd2ee6656aad1c5a21ae118470 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 17 Oct 2024 15:10:36 +0530 Subject: [PATCH 10/25] changed IP --- config/config.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/config.go b/config/config.go index f006c69..e688755 100644 --- a/config/config.go +++ b/config/config.go @@ -27,7 +27,7 @@ func LoadConfig() *Config { } return &Config{ - DiceDBAddr: "192.168.1.10:7379", // Default DiceDB address + DiceDBAddr: "192.168.114.28:7379", // Default DiceDB address ServerPort: getEnv("SERVER_PORT", ":8080"), // Default server port RequestLimitPerMin: getEnvInt("REQUEST_LIMIT_PER_MIN", 1000), // Default request limit RequestWindowSec: getEnvFloat64("REQUEST_WINDOW_SEC", 60), // Default request window in float64 From fd36dbecfe3c2716988bb37d3edcb2813d4b661d Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 16:53:00 +0530 Subject: [PATCH 11/25] added health middleware --- internal/middleware/healthcheck.go | 77 ++++++++++++++++++++++++++++++ internal/server/http.go | 6 +-- main.go | 8 +++- 3 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 internal/middleware/healthcheck.go diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go new file mode 100644 index 0000000..58509af --- /dev/null +++ b/internal/middleware/healthcheck.go @@ -0,0 +1,77 @@ +package middleware + +import ( + "fmt" + "net/http" + "time" + "server/config" + "github.com/gin-gonic/gin" + "server/internal/db" + util "server/util" +) + +// HealthCheckMiddleware is a middleware that performs a health check on the server +// and applies rate limiting if necessary using the RateLimiterMiddleware. +type HealthCheckMiddleware struct { + RateLimiter *RateLimiterMiddleware +} + +// NewHealthCheckMiddleware creates a new instance of HealthCheckMiddleware. +func NewHealthCheckMiddleware(client *db.DiceDB, limit int64, window float64) *HealthCheckMiddleware { + // Initialize RateLimiterMiddleware + rl = &HealthCheckMiddleware{ + client: client, + limit: limit, + window: window, + cronFrequencyInterval: config.LoadConfig().Server.CronCleanupFrequency, + } + return +} + +// Exec handles the health check request. +func (h *HealthCheckMiddleware) Exec(c *gin.Context) { + // Only allow rate limiting for specific paths, here health check path + + if c.Request.URL.Path != "/health" { + // If the path is not "/health", return immediately without further processing + c.Next() + return + } + + currentWindow := time.Now().Unix() / int64(rl.window) + key := fmt.Sprintf("request_count:%d", currentWindow) + slog.Debug("Created rate limiter key", slog.Any("key", key)) + + // Get the current request count for this window + val, err := rl.client.Client.Get(ctx, key).Result() + if err != nil && !errors.Is(err, dicedb.Nil) { + slog.Error("Error fetching request count", "error", err) + http.Error(c.Writer, "Internal Server Error", http.StatusInternalServerError) + return + } + + // Parse the current request count or initialize to 0 + var requestCount int64 = 0 + if val != "" { + requestCount, err = strconv.ParseInt(val, 10, 64) + if err != nil { + slog.Error("Error converting request count", "error", err) + http.Error(c.Writer, "Internal Server Error", http.StatusInternalServerError) + return + } + } + + secondsDifference, err := calculateNextCleanupTime(ctx, h.client, h.cronFrequencyInterval) + if err != nil { + slog.Error("Error calculating next cleanup time", "error", err) + } + + AddRateLimitHeaders(c.Writer, h.limit, h.limit-requestCount, requestCount, currentWindow+int64(h.window), + secondsDifference) + + + util.JSONResponse(c.Writer, http.StatusOK, map[string]string{"message": "server is running"}) + + c.Next() +} + diff --git a/internal/server/http.go b/internal/server/http.go index e538359..456c817 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -80,9 +80,9 @@ func (s *HTTPServer) Shutdown() error { return s.httpServer.Shutdown(context.Background()) } -func (s *HTTPServer) HealthCheck(w http.ResponseWriter, request *http.Request) { - util.JSONResponse(w, http.StatusOK, map[string]string{"message": "server is running"}) -} +// func (s *HTTPServer) HealthCheck(w http.ResponseWriter, request *http.Request) { +// util.JSONResponse(w, http.StatusOK, map[string]string{"message": "server is running"}) +// } func (s *HTTPServer) CliHandler(w http.ResponseWriter, r *http.Request) { slog.Info("aasif request:", slog.Any("request=", r)) diff --git a/main.go b/main.go index 1106be4..0bc2103 100644 --- a/main.go +++ b/main.go @@ -63,6 +63,12 @@ func main() { configValue.Server.RequestWindowSec, ).Exec)) + // HealthCheck middleware + router.Use((middleware.HealthCheckMiddleware(diceDBAdminClient, + configValue.Server.RequestLimitPerMin, + configValue.Server.RequestWindowSec, + ).Exec)) + httpServer := server.NewHTTPServer( router, diceDBAdminClient, @@ -72,7 +78,7 @@ func main() { ) // Register routes - router.GET("/health", gin.WrapF(httpServer.HealthCheck)) + // router.GET("/health", gin.WrapF(httpServer.HealthCheck)) router.POST("/shell/exec/:cmd", gin.WrapF(httpServer.CliHandler)) router.GET("/search", gin.WrapF(httpServer.SearchHandler)) From 256bf128d866315f6137d654d07d52066255ecf3 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 16:56:21 +0530 Subject: [PATCH 12/25] fix --- internal/middleware/healthcheck.go | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 58509af..5920ce0 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -7,7 +7,7 @@ import ( "server/config" "github.com/gin-gonic/gin" "server/internal/db" - util "server/util" + // util "server/util" ) // HealthCheckMiddleware is a middleware that performs a health check on the server @@ -70,8 +70,15 @@ func (h *HealthCheckMiddleware) Exec(c *gin.Context) { secondsDifference) - util.JSONResponse(c.Writer, http.StatusOK, map[string]string{"message": "server is running"}) - + // util.JSONResponse(c.Writer, http.StatusOK, map[string]string{"message": "server is running"}) + + + c.Writer.Header().Set("Content-Type", "application/json") + c.Writer.WriteHeader(http.StatusOK) + if err := json.NewEncoder(c.Writer).Encode(map[string]string{"message": "server is running"}); err != nil { + http.Error(c.Writer, err.Error(), http.StatusInternalServerError) + } + c.Next() } From b447fee4088e48d5fe8f1ef31201ea7095e7615c Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 16:58:21 +0530 Subject: [PATCH 13/25] fix --- config/config.go | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/config/config.go b/config/config.go index 4bcb99e..f35cc24 100644 --- a/config/config.go +++ b/config/config.go @@ -49,9 +49,6 @@ func LoadConfig() *Config { Username string Password string }{ - Addr: getEnv("DICEDB_ADMIN_ADDR", "192.168.1.4:7379"), // Default DiceDB Admin address - Username: getEnv("DICEDB_ADMIN_USERNAME", "diceadmin"), // Default DiceDB Admin username - Password: getEnv("DICEDB_ADMIN_PASSWORD", ""), // Default DiceDB Admin password Addr: getEnv("DICEDB_METADATA_ADDR", "192.168.1.4:7379"), // Default DiceDB Admin address Username: getEnv("DICEDB_METADATA_USERNAME", "diceadmin"), // Default DiceDB Admin username Password: getEnv("DICEDB_METADATA_PASSWORD", ""), // Default DiceDB Admin password @@ -61,7 +58,7 @@ func LoadConfig() *Config { Username string Password string }{ - Addr: getEnv("DICEDB_ADDR", "192.168.1.13:7380"), // Default DiceDB address + Addr: getEnv("DICEDB_ADDR", "192.168.1.4:7380"), // Default DiceDB address Username: getEnv("DICEDB_USERNAME", "dice"), // Default username Password: getEnv("DICEDB_PASSWORD", ""), // Default password }, @@ -127,4 +124,4 @@ func splitString(s string) []string { array = append(array, strings.TrimSpace(v)) } return array -} +} \ No newline at end of file From 5ce73190feae5c3b3defe808b13a13cdd9956e6e Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:15:45 +0530 Subject: [PATCH 14/25] fixes --- internal/middleware/healthcheck.go | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 5920ce0..0a2c534 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -2,6 +2,7 @@ package middleware import ( "fmt" + "log/slog" "net/http" "time" "server/config" @@ -19,7 +20,7 @@ type HealthCheckMiddleware struct { // NewHealthCheckMiddleware creates a new instance of HealthCheckMiddleware. func NewHealthCheckMiddleware(client *db.DiceDB, limit int64, window float64) *HealthCheckMiddleware { // Initialize RateLimiterMiddleware - rl = &HealthCheckMiddleware{ + h = &HealthCheckMiddleware{ client: client, limit: limit, window: window, @@ -37,13 +38,15 @@ func (h *HealthCheckMiddleware) Exec(c *gin.Context) { c.Next() return } + ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second) + defer cancel() - currentWindow := time.Now().Unix() / int64(rl.window) + currentWindow := time.Now().Unix() / int64(h.window) key := fmt.Sprintf("request_count:%d", currentWindow) slog.Debug("Created rate limiter key", slog.Any("key", key)) // Get the current request count for this window - val, err := rl.client.Client.Get(ctx, key).Result() + val, err := h.client.Client.Get(ctx, key).Result() if err != nil && !errors.Is(err, dicedb.Nil) { slog.Error("Error fetching request count", "error", err) http.Error(c.Writer, "Internal Server Error", http.StatusInternalServerError) From 5819b56ae8b21d42334ae30f800b9c50470fc109 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:17:37 +0530 Subject: [PATCH 15/25] fix --- internal/middleware/healthcheck.go | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 0a2c534..64ebda7 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -13,9 +13,18 @@ import ( // HealthCheckMiddleware is a middleware that performs a health check on the server // and applies rate limiting if necessary using the RateLimiterMiddleware. -type HealthCheckMiddleware struct { - RateLimiter *RateLimiterMiddleware -} +type ( + HealthCheckMiddleware struct { + client *db.DiceDB + limit int64 + window float64 + cronFrequencyInterval time.Duration + } +) + +// type HealthCheckMiddleware struct { +// RateLimiter *RateLimiterMiddleware +// } // NewHealthCheckMiddleware creates a new instance of HealthCheckMiddleware. func NewHealthCheckMiddleware(client *db.DiceDB, limit int64, window float64) *HealthCheckMiddleware { From 2d71efc2a5107d45c3dccbf7273a0a5d5bada2e8 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:20:02 +0530 Subject: [PATCH 16/25] returned h and declared it --- internal/middleware/healthcheck.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 64ebda7..e64daf2 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -29,13 +29,13 @@ type ( // NewHealthCheckMiddleware creates a new instance of HealthCheckMiddleware. func NewHealthCheckMiddleware(client *db.DiceDB, limit int64, window float64) *HealthCheckMiddleware { // Initialize RateLimiterMiddleware - h = &HealthCheckMiddleware{ + h := &HealthCheckMiddleware{ client: client, limit: limit, window: window, cronFrequencyInterval: config.LoadConfig().Server.CronCleanupFrequency, } - return + return h } // Exec handles the health check request. From 8e71bb6f87644df1634d7051a2d982d558925bc7 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:21:18 +0530 Subject: [PATCH 17/25] fix --- internal/middleware/healthcheck.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index e64daf2..39ecb79 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -1,6 +1,7 @@ package middleware import ( + "context" "fmt" "log/slog" "net/http" From 22a1e546b0e00fe42bcdecfae3203546297d2b00 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:22:29 +0530 Subject: [PATCH 18/25] import errors --- internal/middleware/healthcheck.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 39ecb79..3dc0806 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -2,6 +2,7 @@ package middleware import ( "context" + "errors" "fmt" "log/slog" "net/http" From 735d6672cf61cf87960ac7950e069885a6db2a9a Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:23:45 +0530 Subject: [PATCH 19/25] import github.com/dicedb/dicedb-go --- internal/middleware/healthcheck.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 3dc0806..5a4d13c 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -8,6 +8,7 @@ import ( "net/http" "time" "server/config" + "github.com/dicedb/dicedb-go" "github.com/gin-gonic/gin" "server/internal/db" // util "server/util" From c694bc5bccaadeb6bf3a7f62bacd36739bc74d57 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:25:04 +0530 Subject: [PATCH 20/25] fix --- internal/middleware/healthcheck.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 5a4d13c..7b2b8b3 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -3,11 +3,13 @@ package middleware import ( "context" "errors" + "encoding/json" "fmt" "log/slog" "net/http" "time" "server/config" + "strconv" "github.com/dicedb/dicedb-go" "github.com/gin-gonic/gin" "server/internal/db" From c147a6e6bd6ed59b31b1077d7992ddff3e2ffe4d Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:26:45 +0530 Subject: [PATCH 21/25] made addRateLimitHeaders -> AddRateLimitHeaders in ratelimiter.go --- internal/middleware/ratelimiter.go | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/internal/middleware/ratelimiter.go b/internal/middleware/ratelimiter.go index 4d8a01b..c3ef6d6 100644 --- a/internal/middleware/ratelimiter.go +++ b/internal/middleware/ratelimiter.go @@ -79,7 +79,7 @@ func (rl *RateLimiterMiddleware) Exec(c *gin.Context) { // Check if the request count exceeds the limit if requestCount >= rl.limit { slog.Warn("Request limit exceeded", "count", requestCount) - addRateLimitHeaders(c.Writer, rl.limit, rl.limit-(requestCount+1), requestCount+1, currentWindow+int64(rl.window), 0) + AddRateLimitHeaders(c.Writer, rl.limit, rl.limit-(requestCount+1), requestCount+1, currentWindow+int64(rl.window), 0) http.Error(c.Writer, "429 - Too Many Requests", http.StatusTooManyRequests) return } @@ -103,7 +103,7 @@ func (rl *RateLimiterMiddleware) Exec(c *gin.Context) { slog.Error("Error calculating next cleanup time", "error", err) } - addRateLimitHeaders(c.Writer, rl.limit, rl.limit-(requestCount+1), requestCount+1, currentWindow+int64(rl.window), + AddRateLimitHeaders(c.Writer, rl.limit, rl.limit-(requestCount+1), requestCount+1, currentWindow+int64(rl.window), secondsDifference) slog.Info("Request processed", "count", requestCount+1) @@ -173,7 +173,7 @@ func MockRateLimiter(client *mock.DiceDBMock, next http.Handler, limit int64, wi // Check if the request limit has been exceeded if requestCount >= limit { slog.Warn("Request limit exceeded", "count", requestCount) - addRateLimitHeaders(w, limit, limit-(requestCount+1), requestCount+1, currentWindow+int64(window), 0) + AddRateLimitHeaders(w, limit, limit-(requestCount+1), requestCount+1, currentWindow+int64(window), 0) http.Error(w, "429 - Too Many Requests", http.StatusTooManyRequests) return } @@ -194,14 +194,14 @@ func MockRateLimiter(client *mock.DiceDBMock, next http.Handler, limit int64, wi } } - addRateLimitHeaders(w, limit, limit-(requestCount+1), requestCount+1, currentWindow+int64(window), 0) + AddRateLimitHeaders(w, limit, limit-(requestCount+1), requestCount+1, currentWindow+int64(window), 0) slog.Info("Request processed", "count", requestCount) next.ServeHTTP(w, r) }) } -func addRateLimitHeaders(w http.ResponseWriter, limit, remaining, used, resetTime, secondsLeftForCleanup int64) { +func AddRateLimitHeaders(w http.ResponseWriter, limit, remaining, used, resetTime, secondsLeftForCleanup int64) { w.Header().Set("x-ratelimit-limit", strconv.FormatInt(limit, 10)) w.Header().Set("x-ratelimit-remaining", strconv.FormatInt(remaining, 10)) w.Header().Set("x-ratelimit-used", strconv.FormatInt(used, 10)) From 0f1f95ecdd396a07e28c09c1eef14d712f4d5802 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 17:28:26 +0530 Subject: [PATCH 22/25] fix --- main.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main.go b/main.go index 0bc2103..67f480d 100644 --- a/main.go +++ b/main.go @@ -64,7 +64,7 @@ func main() { ).Exec)) // HealthCheck middleware - router.Use((middleware.HealthCheckMiddleware(diceDBAdminClient, + router.Use((middleware.NewHealthCheckMiddleware(diceDBAdminClient, configValue.Server.RequestLimitPerMin, configValue.Server.RequestWindowSec, ).Exec)) From 043a0a323b81d13270649d9ebe2ea32fc646480d Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 18:01:49 +0530 Subject: [PATCH 23/25] logging request count --- internal/middleware/healthcheck.go | 1 + 1 file changed, 1 insertion(+) diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 7b2b8b3..8ab909f 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -77,6 +77,7 @@ func (h *HealthCheckMiddleware) Exec(c *gin.Context) { return } } + slog.Info("Fetched and parsed request count successfully", "key", key, "requestCount", requestCount) secondsDifference, err := calculateNextCleanupTime(ctx, h.client, h.cronFrequencyInterval) if err != nil { From 09831922322f7f9543209ed8341404a1d083465c Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 18:07:02 +0530 Subject: [PATCH 24/25] slog.Info request count in ratelimiter --- internal/middleware/ratelimiter.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/middleware/ratelimiter.go b/internal/middleware/ratelimiter.go index c3ef6d6..8dc1e13 100644 --- a/internal/middleware/ratelimiter.go +++ b/internal/middleware/ratelimiter.go @@ -76,6 +76,8 @@ func (rl *RateLimiterMiddleware) Exec(c *gin.Context) { } } + slog.Info("Fetched and parsed request count successfully", "key", key, "requestCount", requestCount) + // Check if the request count exceeds the limit if requestCount >= rl.limit { slog.Warn("Request limit exceeded", "count", requestCount) From ad7cf7b2fc89fb29a91e112c5f8a43c2cbe6a8d7 Mon Sep 17 00:00:00 2001 From: aasifkhan7 Date: Thu, 12 Dec 2024 18:42:36 +0530 Subject: [PATCH 25/25] refactor --- config/config.go | 4 ++-- internal/middleware/healthcheck.go | 8 -------- internal/middleware/ratelimiter.go | 2 -- internal/server/http.go | 6 ------ main.go | 1 - 5 files changed, 2 insertions(+), 19 deletions(-) diff --git a/config/config.go b/config/config.go index f35cc24..78407bf 100644 --- a/config/config.go +++ b/config/config.go @@ -49,7 +49,7 @@ func LoadConfig() *Config { Username string Password string }{ - Addr: getEnv("DICEDB_METADATA_ADDR", "192.168.1.4:7379"), // Default DiceDB Admin address + Addr: getEnv("DICEDB_METADATA_ADDR", "localhost:7379"), // Default DiceDB Admin address Username: getEnv("DICEDB_METADATA_USERNAME", "diceadmin"), // Default DiceDB Admin username Password: getEnv("DICEDB_METADATA_PASSWORD", ""), // Default DiceDB Admin password }, @@ -58,7 +58,7 @@ func LoadConfig() *Config { Username string Password string }{ - Addr: getEnv("DICEDB_ADDR", "192.168.1.4:7380"), // Default DiceDB address + Addr: getEnv("DICEDB_ADDR", "localhost:7380"), // Default DiceDB address Username: getEnv("DICEDB_USERNAME", "dice"), // Default username Password: getEnv("DICEDB_PASSWORD", ""), // Default password }, diff --git a/internal/middleware/healthcheck.go b/internal/middleware/healthcheck.go index 8ab909f..058ef91 100644 --- a/internal/middleware/healthcheck.go +++ b/internal/middleware/healthcheck.go @@ -13,7 +13,6 @@ import ( "github.com/dicedb/dicedb-go" "github.com/gin-gonic/gin" "server/internal/db" - // util "server/util" ) // HealthCheckMiddleware is a middleware that performs a health check on the server @@ -27,10 +26,6 @@ type ( } ) -// type HealthCheckMiddleware struct { -// RateLimiter *RateLimiterMiddleware -// } - // NewHealthCheckMiddleware creates a new instance of HealthCheckMiddleware. func NewHealthCheckMiddleware(client *db.DiceDB, limit int64, window float64) *HealthCheckMiddleware { // Initialize RateLimiterMiddleware @@ -88,9 +83,6 @@ func (h *HealthCheckMiddleware) Exec(c *gin.Context) { secondsDifference) - // util.JSONResponse(c.Writer, http.StatusOK, map[string]string{"message": "server is running"}) - - c.Writer.Header().Set("Content-Type", "application/json") c.Writer.WriteHeader(http.StatusOK) if err := json.NewEncoder(c.Writer).Encode(map[string]string{"message": "server is running"}); err != nil { diff --git a/internal/middleware/ratelimiter.go b/internal/middleware/ratelimiter.go index 8dc1e13..c3ef6d6 100644 --- a/internal/middleware/ratelimiter.go +++ b/internal/middleware/ratelimiter.go @@ -76,8 +76,6 @@ func (rl *RateLimiterMiddleware) Exec(c *gin.Context) { } } - slog.Info("Fetched and parsed request count successfully", "key", key, "requestCount", requestCount) - // Check if the request count exceeds the limit if requestCount >= rl.limit { slog.Warn("Request limit exceeded", "count", requestCount) diff --git a/internal/server/http.go b/internal/server/http.go index 456c817..368a38a 100644 --- a/internal/server/http.go +++ b/internal/server/http.go @@ -80,14 +80,8 @@ func (s *HTTPServer) Shutdown() error { return s.httpServer.Shutdown(context.Background()) } -// func (s *HTTPServer) HealthCheck(w http.ResponseWriter, request *http.Request) { -// util.JSONResponse(w, http.StatusOK, map[string]string{"message": "server is running"}) -// } - func (s *HTTPServer) CliHandler(w http.ResponseWriter, r *http.Request) { - slog.Info("aasif request:", slog.Any("request=", r)) diceCmd, err := util.ParseHTTPRequest(r) - slog.Info("aasif diceCmd:", slog.Any("diceCmd", diceCmd)) if err != nil { http.Error(w, errorResponse(err.Error()), http.StatusBadRequest) return diff --git a/main.go b/main.go index 67f480d..d703df6 100644 --- a/main.go +++ b/main.go @@ -78,7 +78,6 @@ func main() { ) // Register routes - // router.GET("/health", gin.WrapF(httpServer.HealthCheck)) router.POST("/shell/exec/:cmd", gin.WrapF(httpServer.CliHandler)) router.GET("/search", gin.WrapF(httpServer.SearchHandler))