mirror of
https://github.com/pushbits/server.git
synced 2025-04-30 10:46:55 +02:00
Add health check for Docker image
This commit is contained in:
parent
3bdadd6029
commit
da1aa3c3b8
5 changed files with 37 additions and 0 deletions
|
@ -17,6 +17,8 @@ RUN set -ex \
|
||||||
|
|
||||||
FROM alpine
|
FROM alpine
|
||||||
|
|
||||||
|
ENV PUSHBITS_HTTP_PORT="8080"
|
||||||
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
WORKDIR /app
|
WORKDIR /app
|
||||||
|
@ -31,4 +33,6 @@ RUN set -ex \
|
||||||
|
|
||||||
USER 1000
|
USER 1000
|
||||||
|
|
||||||
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s CMD curl --fail http://localhost:$PUSHBITS_HTTP_PORT/health || exit 1
|
||||||
|
|
||||||
ENTRYPOINT ["./run"]
|
ENTRYPOINT ["./run"]
|
||||||
|
|
22
api/health.go
Normal file
22
api/health.go
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"github.com/gin-gonic/gin"
|
||||||
|
)
|
||||||
|
|
||||||
|
// HealthHandler holds information for processing requests about the server's health.
|
||||||
|
type HealthHandler struct {
|
||||||
|
DB Database
|
||||||
|
}
|
||||||
|
|
||||||
|
// Health returns the health status of the server.
|
||||||
|
func (h *HealthHandler) Health(ctx *gin.Context) {
|
||||||
|
if err := h.DB.Health(); err != nil {
|
||||||
|
ctx.AbortWithError(http.StatusInternalServerError, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.JSON(http.StatusOK, gin.H{})
|
||||||
|
}
|
|
@ -6,6 +6,8 @@ import (
|
||||||
|
|
||||||
// The Database interface for encapsulating database access.
|
// The Database interface for encapsulating database access.
|
||||||
type Database interface {
|
type Database interface {
|
||||||
|
Health() error
|
||||||
|
|
||||||
CreateApplication(application *model.Application) error
|
CreateApplication(application *model.Application) error
|
||||||
DeleteApplication(application *model.Application) error
|
DeleteApplication(application *model.Application) error
|
||||||
GetApplicationByID(ID uint) (*model.Application, error)
|
GetApplicationByID(ID uint) (*model.Application, error)
|
||||||
|
|
6
database/health.go
Normal file
6
database/health.go
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
package database
|
||||||
|
|
||||||
|
// Health reports the status of the database connection.
|
||||||
|
func (d *Database) Health() error {
|
||||||
|
return d.sqldb.Ping()
|
||||||
|
}
|
|
@ -24,6 +24,7 @@ func Create(debug bool, cm *credentials.Manager, db *database.Database, dp *disp
|
||||||
auth := authentication.Authenticator{DB: db}
|
auth := authentication.Authenticator{DB: db}
|
||||||
|
|
||||||
applicationHandler := api.ApplicationHandler{DB: db, DP: dp}
|
applicationHandler := api.ApplicationHandler{DB: db, DP: dp}
|
||||||
|
healthHandler := api.HealthHandler{DB: db}
|
||||||
notificationHandler := api.NotificationHandler{DB: db, DP: dp}
|
notificationHandler := api.NotificationHandler{DB: db, DP: dp}
|
||||||
userHandler := api.UserHandler{AH: &applicationHandler, CM: cm, DB: db, DP: dp}
|
userHandler := api.UserHandler{AH: &applicationHandler, CM: cm, DB: db, DP: dp}
|
||||||
|
|
||||||
|
@ -42,6 +43,8 @@ func Create(debug bool, cm *credentials.Manager, db *database.Database, dp *disp
|
||||||
applicationGroup.PUT("/:id", api.RequireIDInURI(), applicationHandler.UpdateApplication)
|
applicationGroup.PUT("/:id", api.RequireIDInURI(), applicationHandler.UpdateApplication)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
r.GET("/health", healthHandler.Health)
|
||||||
|
|
||||||
r.POST("/message", auth.RequireApplicationToken(), notificationHandler.CreateNotification)
|
r.POST("/message", auth.RequireApplicationToken(), notificationHandler.CreateNotification)
|
||||||
|
|
||||||
userGroup := r.Group("/user")
|
userGroup := r.Group("/user")
|
||||||
|
|
Loading…
Add table
Reference in a new issue