kubelatte-ce
Форк от sbertech/kubelatte-ce
80 строк · 1.9 Кб
1package router2
3import (4"context"5"fmt"6"gitverse.ru/ktrntrsv/kubelatte-ce/pkg/observability/logger"7"gitverse.ru/ktrntrsv/kubelatte-ce/pkg/observability/logger/lib"8"gitverse.ru/ktrntrsv/kubelatte-ce/pkg/util"9"gitverse.ru/ktrntrsv/kubelatte-ce/pkg/util/env"10"net/http"11)
12
13type Endpoint string14
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.ServeMux26UpdateHandlerFunc(endpoint Endpoint, function HandlerFunc)27GetHandlerFunc(endpoint Endpoint) HandlerFunc28SetHandlers(handlers HandlerMap)29}
30
31type HandlerFunc func(w http.ResponseWriter, r *http.Request)32type HandlerMap map[Endpoint]HandlerFunc33
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 = handlers58}
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 router72}
73
74func (r *Router) UpdateHandlerFunc(endpoint Endpoint, function HandlerFunc) {75r.Handlers[endpoint] = function76}
77
78func (r *Router) GetHandlerFunc(endpoint Endpoint) HandlerFunc {79return r.Handlers[endpoint]80}
81