alice-lg/pkg/http/status.go
2022-06-15 15:49:45 +02:00

55 lines
1.3 KiB
Go

package http
import (
"context"
"github.com/alice-lg/alice-lg/pkg/api"
"github.com/alice-lg/alice-lg/pkg/config"
"github.com/alice-lg/alice-lg/pkg/store"
"github.com/alice-lg/alice-lg/pkg/store/backends/postgres"
"github.com/jackc/pgx/v4/pgxpool"
)
// AppStatus contains application status information
type AppStatus struct {
Version string `json:"version"`
Routes *api.RoutesStoreStats `json:"routes"`
Neighbors *api.NeighborsStoreStats `json:"neighbors"`
Postgres *postgres.Status `json:"postgres"`
}
// CollectAppStatus initializes the application
// status with stats gathered from the various
// application modules.
func CollectAppStatus(
ctx context.Context,
pool *pgxpool.Pool,
routesStore *store.RoutesStore,
neighborsStore *store.NeighborsStore,
) (*AppStatus, error) {
routesStatus := &api.RoutesStoreStats{}
if routesStore != nil {
routesStatus = routesStore.Stats(ctx)
}
neighborsStatus := &api.NeighborsStoreStats{}
if neighborsStore != nil {
neighborsStatus = neighborsStore.Stats(ctx)
}
var pgStatus *postgres.Status
if pool != nil {
pgStatus = postgres.NewManager(pool).Status(ctx)
}
status := &AppStatus{
Version: config.Version,
Routes: routesStatus,
Neighbors: neighborsStatus,
Postgres: pgStatus,
}
return status, nil
}