parent
d1878c9e97
commit
aff2b077c0
|
@ -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,
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue