feat: add meta endpoints - API (#52)

Reviewed-on: twhelp/corev3#52
This commit is contained in:
Dawid Wysokiński 2024-01-24 06:22:03 +00:00
parent d1878c9e97
commit aff2b077c0
4 changed files with 50 additions and 8 deletions

View File

@ -7,9 +7,11 @@ import (
"log/slog"
"net/http"
"net/url"
"strings"
"time"
"gitea.dwysokinski.me/twhelp/corev3/internal/chislog"
"gitea.dwysokinski.me/twhelp/corev3/internal/health"
"gitea.dwysokinski.me/twhelp/corev3/internal/port"
"github.com/go-chi/chi/v5"
"github.com/go-chi/chi/v5/middleware"
@ -73,7 +75,10 @@ var (
}
)
const apiBasePath = "/api"
const (
apiBasePath = "/api"
metaBasePath = "/_meta"
)
var cmdServe = &cli.Command{
Name: "serve",
@ -95,6 +100,8 @@ var cmdServe = &cli.Command{
}
}()
h := health.New()
server, err := newHTTPServer(
httpServerConfig{
port: c.Uint(apiServerPortFlag.Name),
@ -104,17 +111,16 @@ var cmdServe = &cli.Command{
idleTimeout: c.Duration(apiServerIdleTimeoutFlag.Name),
},
func(r chi.Router) error {
r.Use(newAPIMiddlewares(logger)...)
oapiCfg, oapiCfgErr := newOpenAPIConfigFromFlags(c)
if oapiCfgErr != nil {
return oapiCfgErr
}
r.Mount(
apiBasePath,
port.NewAPIHTTPHandler(port.WithOpenAPIConfig(oapiCfg)),
)
r.Use(newAPIMiddlewares(logger)...)
r.Mount(metaBasePath, port.NewMetaHTTPHandler(h))
r.Mount(apiBasePath, port.NewAPIHTTPHandler(port.WithOpenAPIConfig(oapiCfg)))
return nil
},
@ -177,7 +183,9 @@ func newOpenAPIConfigFromFlags(c *cli.Context) (port.OpenAPIConfig, error) {
func newAPIMiddlewares(logger *slog.Logger) chi.Middlewares {
return chi.Middlewares{
chislog.Logger(logger),
chislog.Logger(logger, chislog.WithFilter(func(r *http.Request) bool {
return !strings.HasPrefix(r.URL.Path, metaBasePath)
})),
middleware.Recoverer,
}
}

View File

@ -92,6 +92,7 @@ func TestOpenAPI(t *testing.T) {
defer require.NoError(t, resp.Body.Close())
assert.Equal(t, http.StatusOK, resp.StatusCode)
assert.Equal(t, tt.expectedContentType, resp.Header.Get("Content-Type"))
_, _ = io.Copy(io.Discard, resp.Body)
})
}
})

View File

@ -0,0 +1,18 @@
package port
import (
"net/http"
"gitea.dwysokinski.me/twhelp/corev3/internal/health"
"gitea.dwysokinski.me/twhelp/corev3/internal/health/healthhttp"
"github.com/go-chi/chi/v5"
)
func NewMetaHTTPHandler(h *health.Health) http.Handler {
r := chi.NewRouter()
r.Get("/livez", healthhttp.LiveHandler(h).ServeHTTP)
r.Get("/readyz", healthhttp.ReadyHandler(h).ServeHTTP)
return r
}

View File

@ -15,6 +15,9 @@ spec:
- name: twhelp-api-v2
image: twhelp
args: [serve]
ports:
- name: container-port
containerPort: 9234
env:
- name: APP_MODE
value: development
@ -37,6 +40,18 @@ spec:
limits:
cpu: 200m
memory: 300Mi
livenessProbe:
httpGet:
path: /_meta/livez
port: container-port
initialDelaySeconds: 5
periodSeconds: 5
readinessProbe:
httpGet:
path: /_meta/readyz
port: container-port
initialDelaySeconds: 5
periodSeconds: 10
---
apiVersion: v1
kind: Service