kubelatte-ce
Форк от sbertech/kubelatte-ce
80 строк · 1.9 Кб
1package router
2
3import (
4"context"
5"fmt"
6"gitverse.ru/synapse/kubelatte/pkg/observability/logger"
7"gitverse.ru/synapse/kubelatte/pkg/observability/logger/lib"
8"gitverse.ru/synapse/kubelatte/pkg/util"
9"gitverse.ru/synapse/kubelatte/pkg/util/env"
10"net/http"
11)
12
13type Endpoint string
14
15var (
16Mutate Endpoint = "/mutate"
17Validate Endpoint = "/validate"
18Immutable Endpoint = "/validate/tri"
19Healthz Endpoint = "/healthz"
20Liveness Endpoint = "/liveness"
21Readyness Endpoint = "/readyness"
22)
23
24type RouterI interface {
25RegisterHandlers(addr string) *http.ServeMux
26UpdateHandlerFunc(endpoint Endpoint, function HandlerFunc)
27GetHandlerFunc(endpoint Endpoint) HandlerFunc
28SetHandlers(handlers HandlerMap)
29}
30
31type HandlerFunc func(w http.ResponseWriter, r *http.Request)
32type HandlerMap map[Endpoint]HandlerFunc
33
34type Router struct {
35Handlers HandlerMap
36}
37
38func NewRouter() RouterI {
39return &Router{}
40}
41
42func (r *Router) SetHandlers(handlers HandlerMap) {
43log := logger.FromContext(context.Background())
44
45if !env.KbltMutator && !util.IsFullRole() {
46delete(handlers, Mutate)
47} else {
48log.Info("Run templatter in MUTATOR role")
49}
50
51if !env.KbltValidator {
52delete(handlers, Validate)
53} else {
54log.Info("Run templatter in VALIDATOR role")
55}
56
57r.Handlers = handlers
58}
59
60func (r *Router) RegisterHandlers(addr string) *http.ServeMux {
61log := logger.FromContext(context.Background())
62router := http.NewServeMux()
63
64router.Handle("/logging", lib.AtomLevel)
65log.Info(fmt.Sprintf("See log level by path %s", fmt.Sprintf("http://localhost%s/logging", addr)))
66
67for endpoint, handler := range r.Handlers {
68router.HandleFunc(string(endpoint), handler)
69}
70
71return router
72}
73
74func (r *Router) UpdateHandlerFunc(endpoint Endpoint, function HandlerFunc) {
75r.Handlers[endpoint] = function
76}
77
78func (r *Router) GetHandlerFunc(endpoint Endpoint) HandlerFunc {
79return r.Handlers[endpoint]
80}
81