mirror of https://github.com/mainnika/a-quest.git
				
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							71 lines
						
					
					
						
							1.4 KiB
						
					
					
				
			
		
		
	
	
							71 lines
						
					
					
						
							1.4 KiB
						
					
					
				package lib
 | 
						|
 | 
						|
import (
 | 
						|
	"context"
 | 
						|
	"net/http"
 | 
						|
	"strings"
 | 
						|
 | 
						|
	"github.com/docker/docker/client"
 | 
						|
	"github.com/go-redis/redis/v7"
 | 
						|
	routing "github.com/jackwhelpton/fasthttp-routing/v2"
 | 
						|
	"github.com/jackwhelpton/fasthttp-routing/v2/access"
 | 
						|
	"github.com/jackwhelpton/fasthttp-routing/v2/cors"
 | 
						|
	"github.com/jackwhelpton/fasthttp-routing/v2/fault"
 | 
						|
	log "github.com/sirupsen/logrus"
 | 
						|
	"github.com/valyala/fasthttp"
 | 
						|
)
 | 
						|
 | 
						|
const (
 | 
						|
	URLHealthz = "/healthz"
 | 
						|
)
 | 
						|
 | 
						|
type Api struct {
 | 
						|
	Base   string
 | 
						|
	Docker *client.Client
 | 
						|
	Redis  *redis.Client
 | 
						|
}
 | 
						|
 | 
						|
func (a *Api) GetHandler() fasthttp.RequestHandler {
 | 
						|
 | 
						|
	crs := cors.Options{
 | 
						|
		AllowOrigins:     "*",
 | 
						|
		AllowHeaders:     "*",
 | 
						|
		AllowMethods:     "*",
 | 
						|
		AllowCredentials: true,
 | 
						|
	}
 | 
						|
 | 
						|
	router := routing.New()
 | 
						|
	router.Use(
 | 
						|
		access.Logger(log.Debugf),
 | 
						|
		cors.Handler(crs),
 | 
						|
		fault.PanicHandler(log.Warnf),
 | 
						|
	)
 | 
						|
 | 
						|
	base := strings.TrimSuffix(a.Base, "/")
 | 
						|
	api := router.Group(base)
 | 
						|
 | 
						|
	api.Get(URLHealthz, a.healthCheck)
 | 
						|
 | 
						|
	return router.HandleRequest
 | 
						|
}
 | 
						|
 | 
						|
func (a *Api) healthCheck(ctx *routing.Context) (err error) {
 | 
						|
 | 
						|
	_, err = a.Redis.Ping().Result()
 | 
						|
	if err != nil {
 | 
						|
		ctx.SetStatusCode(http.StatusInternalServerError)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	_, err = a.Docker.Ping(context.Background())
 | 
						|
	if err != nil {
 | 
						|
		ctx.SetStatusCode(http.StatusInternalServerError)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	ctx.Response.Header.Set("Content-Type", "application/json")
 | 
						|
	_, err = ctx.WriteString("{\"health\":\"ok\"}")
 | 
						|
 | 
						|
	return
 | 
						|
}
 | 
						|
 | 
						|
 |