feat: debug-endpoints (#110)

* reorg + pprof endpoints

* fix spacing issue

* fix generation directory
This commit is contained in:
Hayden 2022-10-24 18:24:18 -08:00 committed by GitHub
parent a4b4fe3454
commit d151d42081
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
20 changed files with 105 additions and 61 deletions

View file

@ -10,5 +10,8 @@
"package.json": "package-lock.json, yarn.lock, .eslintrc.js, tsconfig.json, .prettierrc, .editorconfig, pnpm-lock.yaml, postcss.config.js, tailwind.config.js", "package.json": "package-lock.json, yarn.lock, .eslintrc.js, tsconfig.json, .prettierrc, .editorconfig, pnpm-lock.yaml, postcss.config.js, tailwind.config.js",
"docker-compose.yml": "Dockerfile, .dockerignore, docker-compose.dev.yml, docker-compose.yml", "docker-compose.yml": "Dockerfile, .dockerignore, docker-compose.dev.yml, docker-compose.yml",
"README.md": "LICENSE, SECURITY.md" "README.md": "LICENSE, SECURITY.md"
} },
"cSpell.words": [
"debughandlers"
]
} }

View file

@ -17,13 +17,13 @@ tasks:
deps: deps:
- db:generate - db:generate
cmds: cmds:
- cd backend/app/api/ && swag fmt - cd backend/app/api/static && swag fmt --dir=../
- cd backend/app/api/ && swag init --dir=./,../../internal,../../pkgs - cd backend/app/api/static && swag init --dir=../,../../../internal,../../../pkgs
- | - |
npx swagger-typescript-api \ npx swagger-typescript-api \
--no-client \ --no-client \
--modular \ --modular \
--path ./backend/app/api/docs/swagger.json \ --path ./backend/app/api/static/docs/swagger.json \
--output ./frontend/lib/api/types --output ./frontend/lib/api/types
- python3 ./scripts/process-types.py ./frontend/lib/api/types/data-contracts.ts - python3 ./scripts/process-types.py ./frontend/lib/api/types/data-contracts.ts
sources: sources:
@ -34,8 +34,8 @@ tasks:
generates: generates:
- "./frontend/lib/api/types/data-contracts.ts" - "./frontend/lib/api/types/data-contracts.ts"
- "./backend/ent/schema" - "./backend/ent/schema"
- "./backend/app/api/docs/swagger.json" - "./backend/app/api/static/docs/swagger.json"
- "./backend/app/api/docs/swagger.yaml" - "./backend/app/api/static/docs/swagger.yaml"
api: api:
desc: Starts the backend api server (depends on generate task) desc: Starts the backend api server (depends on generate task)

View file

@ -0,0 +1,16 @@
package debughandlers
import (
"expvar"
"net/http"
"net/http/pprof"
)
func New(mux *http.ServeMux) {
mux.HandleFunc("/debug/pprof", pprof.Index)
mux.HandleFunc("/debug/pprof/cmdline", pprof.Cmdline)
mux.HandleFunc("/debug/pprof/profile", pprof.Profile)
mux.HandleFunc("/debug/pprof/symbol", pprof.Symbol)
mux.HandleFunc("/debug/pprof/trace", pprof.Trace)
mux.Handle("/debug/vars", expvar.Handler())
}

View file

@ -2,13 +2,14 @@ package main
import ( import (
"context" "context"
"net/http"
"os" "os"
"path/filepath" "path/filepath"
"time" "time"
atlas "ariga.io/atlas/sql/migrate" atlas "ariga.io/atlas/sql/migrate"
"entgo.io/ent/dialect/sql/schema" "entgo.io/ent/dialect/sql/schema"
"github.com/hay-kot/homebox/backend/app/api/docs" "github.com/hay-kot/homebox/backend/app/api/static/docs"
"github.com/hay-kot/homebox/backend/ent" "github.com/hay-kot/homebox/backend/ent"
"github.com/hay-kot/homebox/backend/internal/config" "github.com/hay-kot/homebox/backend/internal/config"
"github.com/hay-kot/homebox/backend/internal/migrations" "github.com/hay-kot/homebox/backend/internal/migrations"
@ -153,5 +154,14 @@ func run(cfg *config.Config) error {
app.SetupDemo() app.SetupDemo()
} }
if cfg.Debug.Enabled {
debugrouter := app.debugRouter()
go func() {
if err := http.ListenAndServe(":"+cfg.Debug.Port, debugrouter); err != nil {
log.Fatal().Err(err).Msg("failed to start debug server")
}
}()
}
return app.server.Start(routes) return app.server.Start(routes)
} }

View file

@ -11,8 +11,9 @@ import (
"path/filepath" "path/filepath"
"github.com/go-chi/chi/v5" "github.com/go-chi/chi/v5"
_ "github.com/hay-kot/homebox/backend/app/api/docs" "github.com/hay-kot/homebox/backend/app/api/handlers/debughandlers"
v1 "github.com/hay-kot/homebox/backend/app/api/v1" v1 "github.com/hay-kot/homebox/backend/app/api/handlers/v1"
_ "github.com/hay-kot/homebox/backend/app/api/static/docs"
"github.com/hay-kot/homebox/backend/internal/repo" "github.com/hay-kot/homebox/backend/internal/repo"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
httpSwagger "github.com/swaggo/http-swagger" // http-swagger middleware httpSwagger "github.com/swaggo/http-swagger" // http-swagger middleware
@ -23,10 +24,17 @@ const prefix = "/api"
var ( var (
ErrDir = errors.New("path is dir") ErrDir = errors.New("path is dir")
//go:embed all:public/* //go:embed all:static/public/*
public embed.FS public embed.FS
) )
func (a *app) debugRouter() *http.ServeMux {
dbg := http.NewServeMux()
debughandlers.New(dbg)
return dbg
}
// registerRoutes registers all the routes for the API // registerRoutes registers all the routes for the API
func (a *app) newRouter(repos *repo.AllRepos) *chi.Mux { func (a *app) newRouter(repos *repo.AllRepos) *chi.Mux {
registerMimes() registerMimes()

View file

@ -24,6 +24,12 @@ type Config struct {
Swagger SwaggerConf `yaml:"swagger"` Swagger SwaggerConf `yaml:"swagger"`
Demo bool `yaml:"demo"` Demo bool `yaml:"demo"`
AllowRegistration bool `yaml:"disable_registration" conf:"default:true"` AllowRegistration bool `yaml:"disable_registration" conf:"default:true"`
Debug DebugConf `yaml:"debug"`
}
type DebugConf struct {
Enabled bool `yaml:"enabled" conf:"default:false"`
Port string `yaml:"port" conf:"default:4000"`
} }
type SwaggerConf struct { type SwaggerConf struct {

View file

@ -124,7 +124,7 @@
</script> </script>
<template> <template>
<BaseContainer> <div>
<BaseModal v-model="updateModal"> <BaseModal v-model="updateModal">
<template #title> Update Location </template> <template #title> Update Location </template>
<form v-if="location" @submit.prevent="update"> <form v-if="location" @submit.prevent="update">
@ -136,8 +136,8 @@
</div> </div>
</form> </form>
</BaseModal> </BaseModal>
<BaseContainer class="space-y-10 mb-16">
<BaseCard class="mb-16"> <BaseCard>
<template #title> <template #title>
<BaseSectionHeader> <BaseSectionHeader>
<Icon name="mdi-map-marker" class="mr-2 -mt-1 text-base-content" /> <Icon name="mdi-map-marker" class="mr-2 -mt-1 text-base-content" />
@ -191,4 +191,5 @@
</div> </div>
</section> </section>
</BaseContainer> </BaseContainer>
</div>
</template> </template>