1+ package main
2+
3+ import (
4+ "log"
5+ "time"
6+
7+ "os"
8+ "fmt"
9+
10+ router "thirdeye/router"
11+
12+ fiber "github.com/gofiber/fiber/v2"
13+ cors "github.com/gofiber/fiber/v2/middleware/cors"
14+ "github.com/bradfitz/gomemcache/memcache"
15+ )
16+
17+ var memcachedClient * memcache.Client
18+
19+ func connectToMemcached () error {
20+ memcachedClient = memcache .New (os .Getenv ("THIRDEYE_MEMCACHED_URL" ))
21+
22+ return memcachedClient .Ping ()
23+ }
24+
25+ func waitForMemcached (maxRetries int , retryInterval time.Duration ) error {
26+ for i := 0 ; i < maxRetries ; i ++ {
27+ err := connectToMemcached ()
28+ if err == nil {
29+ log .Println ("[INFO] Successfully connected to Memcached" )
30+ return nil
31+ }
32+
33+ log .Printf ("[WARN] Failed to connect to Memcached (attempt %d/%d): %v\n " ,
34+ i + 1 , maxRetries , err )
35+
36+ if i < maxRetries - 1 {
37+ log .Printf ("[INFO] Retrying in %v...\n " , retryInterval )
38+ time .Sleep (retryInterval )
39+ }
40+ }
41+
42+ return fmt .Errorf ("failed to connect to Memcached after %d attempts" , maxRetries )
43+ }
44+
45+ func CreateServer () * fiber.App {
46+ app := fiber .New ()
47+ return app
48+ }
49+
50+ func main () {
51+ // Try to connect to Memcached with retries
52+ err := waitForMemcached (5 , 5 * time .Second )
53+ if err != nil {
54+ log .Fatal ("[ERROR] Could not connect to Memcached: " , err )
55+ }
56+
57+ app := CreateServer ()
58+ app .Use (cors .New ())
59+
60+ // Add a test endpoint to verify Memcached connection
61+ app .Get ("/memcached-test" , func (c * fiber.Ctx ) error {
62+ // Try to set and get a test value
63+ testKey := "test_key"
64+ testValue := "test_value"
65+
66+ err := memcachedClient .Set (& memcache.Item {
67+ Key : testKey ,
68+ Value : []byte (testValue ),
69+ Expiration : 30 , // 30 seconds
70+ })
71+
72+ if err != nil {
73+ return c .Status (500 ).JSON (fiber.Map {
74+ "error" : "Failed to set value in Memcached" ,
75+ "details" : err .Error (),
76+ })
77+ }
78+
79+ item , err := memcachedClient .Get (testKey )
80+ if err != nil {
81+ return c .Status (500 ).JSON (fiber.Map {
82+ "error" : "Failed to get value from Memcached" ,
83+ "details" : err .Error (),
84+ })
85+ }
86+
87+ return c .JSON (fiber.Map {
88+ "status" : "success" ,
89+ "value" : string (item .Value ),
90+ })
91+ })
92+
93+ router .SetupRoutes (app )
94+
95+ app .Use (func (c * fiber.Ctx ) error {
96+ return c .SendStatus (404 )
97+ })
98+
99+ log .Println ("[INFO] Server started on :5002" )
100+ log .Fatal (app .Listen (":5002" ))
101+ }
0 commit comments