diff --git a/ent/generate.go b/ent/generate.go index a76cba7..138073f 100644 --- a/ent/generate.go +++ b/ent/generate.go @@ -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 diff --git a/ent/get_client.go b/ent/get_client.go new file mode 100644 index 0000000..2a2158f --- /dev/null +++ b/ent/get_client.go @@ -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) +} diff --git a/ent/get_client.tmpl b/ent/get_client.tmpl new file mode 100644 index 0000000..cf7c4c8 --- /dev/null +++ b/ent/get_client.tmpl @@ -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 }} diff --git a/ent/ping.go b/ent/ping.go new file mode 100644 index 0000000..d79d36f --- /dev/null +++ b/ent/ping.go @@ -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() +} diff --git a/ent/ping.tmpl b/ent/ping.tmpl new file mode 100644 index 0000000..05ffe12 --- /dev/null +++ b/ent/ping.tmpl @@ -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 }} diff --git a/main.go b/main.go index a80fb4f..8554920 100644 --- a/main.go +++ b/main.go @@ -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("/"))