diff --git a/main.go b/main.go index 5fef517..d7045ba 100644 --- a/main.go +++ b/main.go @@ -33,12 +33,6 @@ func connect_to_mongodb() { fmt.Println("Connected to MongoDB!") } -func ping(c *gin.Context) { - c.JSON(200, gin.H{ - "message": "pong", - }) -} - func init() { connect_to_mongodb() } @@ -48,6 +42,9 @@ func main() { r.GET("/ping", ping) r.HEAD("/ping", ping) + r.GET("/ping_mongodb", ping_mongodb) + r.HEAD("/ping_mongodb", ping_mongodb) + v1_tracker := r.Group("/v1") { v1_tracker.POST("/projects", v1_projects) diff --git a/ping.go b/ping.go new file mode 100644 index 0000000..0062981 --- /dev/null +++ b/ping.go @@ -0,0 +1,69 @@ +package main + +import ( + "context" + "time" + + "github.com/gin-gonic/gin" + "go.mongodb.org/mongo-driver/mongo/readpref" +) + +func ping(c *gin.Context) { + c.JSON(200, gin.H{ + "message": "pong", + }) +} + +func ping_mongodb_primary() (time.Duration, error) { + PrimaryStartTime := time.Now() + // ping primary + PrimaryErr := mongoClient.Ping(context.Background(), readpref.Primary()) + PrimaryEalapsedTime := time.Since(PrimaryStartTime) + + return PrimaryEalapsedTime, PrimaryErr +} + +func ping_mongodb_nearest() (time.Duration, error) { + NearestStartTime := time.Now() + // ping nearest + NearestErr := mongoClient.Ping(context.Background(), readpref.Nearest()) + NearestEalapsedTime := time.Since(NearestStartTime) + + return NearestEalapsedTime, NearestErr +} +func ping_mongodb(c *gin.Context) { + primaryChan := make(chan time.Duration) + nearestChan := make(chan time.Duration) + errChan := make(chan error) + + go func() { + PrimaryEalapsedTime, PrimaryErr := ping_mongodb_primary() + primaryChan <- PrimaryEalapsedTime + errChan <- PrimaryErr + }() + + go func() { + NearestEalapsedTime, NearestErr := ping_mongodb_nearest() + nearestChan <- NearestEalapsedTime + errChan <- NearestErr + }() + + PrimaryEalapsedTime := <-primaryChan + NearestEalapsedTime := <-nearestChan + PrimaryErr := <-errChan + NearestErr := <-errChan + + if PrimaryErr != nil || NearestErr != nil { + c.JSON(500, gin.H{ + "message": "MongoDB is down?", + "PrimaryEalapsedTime": PrimaryEalapsedTime.Milliseconds(), + "NearestEalapsedTime": NearestEalapsedTime.Milliseconds(), + }) + } else { + c.JSON(200, gin.H{ + "message": "MongoDB is up", + "PrimaryEalapsedTime": PrimaryEalapsedTime.Milliseconds(), + "NearestEalapsedTime": NearestEalapsedTime.Milliseconds(), + }) + } +}