feat: add healthcheck endpoint

This commit is contained in:
DevMiner 2024-08-24 22:02:01 +02:00
parent f619a0b8af
commit 106a20a922
6 changed files with 69 additions and 1 deletions

View file

@ -1,3 +1,3 @@
package ent
//go:generate go run -mod=mod entgo.io/ent/cmd/ent generate --feature schema/snapshot --feature sql/upsert ./schema
//go:generate go run -mod=mod entgo.io/ent/cmd/ent generate --feature schema/snapshot --feature sql/upsert --template ping.tmpl --template get_client.tmpl ./schema

9
ent/get_client.go Normal file
View file

@ -0,0 +1,9 @@
// Code generated by ent, DO NOT EDIT.
package ent
import "entgo.io/ent/dialect/sql"
func (c *Client) GetClient() *sql.Driver {
return c.driver.(*sql.Driver)
}

12
ent/get_client.tmpl Normal file
View file

@ -0,0 +1,12 @@
{{/* gotype: entgo.io/ent/entc/gen.Graph */}}
{{ define "get_client" }}
{{ $pkg := base $.Config.Package }}
{{ template "header" $ }}
func (c *Client) GetClient() *sql.Driver {
return c.driver.(*sql.Driver)
}
{{ end }}

10
ent/ping.go Normal file
View file

@ -0,0 +1,10 @@
// Code generated by ent, DO NOT EDIT.
package ent
import "entgo.io/ent/dialect/sql"
func (c *Client) Ping() error {
db := c.driver.(*sql.Driver).DB()
return db.Ping()
}

13
ent/ping.tmpl Normal file
View file

@ -0,0 +1,13 @@
{{/* gotype: entgo.io/ent/entc/gen.Graph */}}
{{ define "ping" }}
{{ $pkg := base $.Config.Package }}
{{ template "header" $ }}
func (c *Client) Ping() error {
db := c.driver.(*sql.Driver).DB()
return db.Ping()
}
{{ end }}

24
main.go
View file

@ -11,6 +11,7 @@ import (
"git.devminer.xyz/devminer/unitel/unitelhttp"
"git.devminer.xyz/devminer/unitel/unitelsql"
"github.com/lysand-org/versia-go/ent/instancemetadata"
"github.com/lysand-org/versia-go/internal/api_schema"
"github.com/lysand-org/versia-go/internal/handlers/follow_handler"
"github.com/lysand-org/versia-go/internal/handlers/meta_handler"
"github.com/lysand-org/versia-go/internal/handlers/note_handler"
@ -189,6 +190,29 @@ func main() {
log.Debug().Msg("Registering handlers")
web.Get("/api/health", func(c *fiber.Ctx) error {
dbWorking := true
if err := db.Ping(); err != nil {
log.Error().Err(err).Msg("Database healthcheck failed")
dbWorking = false
}
natsWorking := true
if status := nc.Status(); status != nats.CONNECTED {
log.Error().Str("status", status.String()).Msg("NATS healthcheck failed")
natsWorking = false
}
if dbWorking && natsWorking {
return c.SendString("lookin' good")
}
return api_schema.ErrInternalServerError(map[string]any{
"database": dbWorking,
"nats": natsWorking,
})
})
userHandler.Register(web.Group("/"))
noteHandler.Register(web.Group("/"))
followHandler.Register(web.Group("/"))