mirror of
https://github.com/pushbits/server.git
synced 2025-04-29 18:26:49 +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
|
||||
|
||||
ENV PUSHBITS_HTTP_PORT="8080"
|
||||
|
||||
EXPOSE 8080
|
||||
|
||||
WORKDIR /app
|
||||
|
@ -31,4 +33,6 @@ RUN set -ex \
|
|||
|
||||
USER 1000
|
||||
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s CMD curl --fail http://localhost:$PUSHBITS_HTTP_PORT/health || exit 1
|
||||
|
||||
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.
|
||||
type Database interface {
|
||||
Health() error
|
||||
|
||||
CreateApplication(application *model.Application) error
|
||||
DeleteApplication(application *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}
|
||||
|
||||
applicationHandler := api.ApplicationHandler{DB: db, DP: dp}
|
||||
healthHandler := api.HealthHandler{DB: db}
|
||||
notificationHandler := api.NotificationHandler{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)
|
||||
}
|
||||
|
||||
r.GET("/health", healthHandler.Health)
|
||||
|
||||
r.POST("/message", auth.RequireApplicationToken(), notificationHandler.CreateNotification)
|
||||
|
||||
userGroup := r.Group("/user")
|
||||
|
|
Loading…
Add table
Reference in a new issue