summaryrefslogtreecommitdiff
path: root/cmd/server/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/server/main.go')
-rw-r--r--cmd/server/main.go139
1 files changed, 134 insertions, 5 deletions
diff --git a/cmd/server/main.go b/cmd/server/main.go
index 15ba62b..7d2fa25 100644
--- a/cmd/server/main.go
+++ b/cmd/server/main.go
@@ -6,9 +6,13 @@ import (
"auth-proxy/handlers"
"auth-proxy/logging"
"auth-proxy/middleware"
+ "auth-proxy/models"
+ "auth-proxy/types"
+ "auth-proxy/worker"
"net/http"
"os"
"strings"
+ "time"
"github.com/joho/godotenv"
)
@@ -29,6 +33,11 @@ func main() {
database.InitDB()
defer database.CloseDB()
+ // Initialize and start the worker pool
+ pool := worker.NewWorkerPool()
+ defer worker.Close(pool)
+ handlers.SetWorkerPool(pool)
+
// Get target URL for proxy
targetURL := os.Getenv("TARGET_URL")
if targetURL == "" {
@@ -147,10 +156,130 @@ func main() {
proxyHandler.ServeHTTP(w, r)
})
+ // Get server port
+ port := os.Getenv("LISTEN_PORT")
+ if port == "" {
+ port = "8080"
+ }
+ listenAddr := ":" + port
+
// --- Start Server ---
- logging.AppLog.Info("Server starting on :8080")
- if err := http.ListenAndServe(":8080", finalHandler); err != nil {
- logging.AppLog.Error("Server failed to start", "error", err)
- os.Exit(1)
+ logging.AppLog.Info("Server starting on " + listenAddr)
+
+ // Start periodic background tasks
+
+ go startBackgroundTasks(pool, rateLimiter)
+
+
+
+ if err := http.ListenAndServe(listenAddr, finalHandler); err != nil {
+
+ logging.AppLog.Error("Server failed to start", "error", err)
+
+ os.Exit(1)
+
+ }
+
}
-}
+
+
+
+ // startBackgroundTasks launches periodic jobs in the background.
+
+ func startBackgroundTasks(pool *types.WorkerPool, limiter *types.RateLimiter) {
+
+ // Ticker for expired token cleanup (every hour)
+
+ tokenTicker := time.NewTicker(1 * time.Hour)
+
+ defer tokenTicker.Stop()
+
+
+
+ // Ticker for rate limiter cleanup (every 10 minutes)
+
+ rateLimiterTicker := time.NewTicker(24 * time.Hour)
+
+ defer rateLimiterTicker.Stop()
+
+
+
+ logging.AppLog.Info("Background task scheduler started")
+
+
+
+ // Run initial cleanup tasks at startup
+
+ submitTokenCleanup(pool)
+
+ submitRateLimiterCleanup(pool, limiter)
+
+
+
+ // Run tasks on their respective tickers
+
+ for {
+
+ select {
+
+ case <-tokenTicker.C:
+
+ submitTokenCleanup(pool)
+
+ case <-rateLimiterTicker.C:
+
+ submitRateLimiterCleanup(pool, limiter)
+
+ }
+
+ }
+
+ }
+
+
+
+ // submitTokenCleanup submits the expired token deletion task to the worker pool.
+
+ func submitTokenCleanup(pool *types.WorkerPool) {
+
+ worker.Submit(pool, func() {
+
+ logging.AppLog.Info("Running background task: deleting expired tokens")
+
+ rowsAffected, err := models.DeleteExpiredTokens()
+
+ if err != nil {
+
+ logging.AppLog.Error("Failed to delete expired tokens", "error", err)
+
+ } else {
+
+ if rowsAffected > 0 {
+
+ logging.AppLog.Info("Finished deleting expired tokens", "deleted_count", rowsAffected)
+
+ }
+
+ }
+
+ })
+
+ }
+
+
+
+ // submitRateLimiterCleanup submits the rate limiter cleanup task to the worker pool.
+
+ func submitRateLimiterCleanup(pool *types.WorkerPool, limiter *types.RateLimiter) {
+
+ worker.Submit(pool, func() {
+
+ logging.AppLog.Info("Running background task: cleaning up rate limiter")
+
+ middleware.Cleanup(limiter)
+
+ })
+
+ }
+
+