kubelatte-ce

Форк
2
Форк от sbertech/kubelatte-ce
80 строк · 1.9 Кб
1
package router
2

3
import (
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

13
type Endpoint string
14

15
var (
16
	Mutate    Endpoint = "/mutate"
17
	Validate  Endpoint = "/validate"
18
	Immutable Endpoint = "/validate/tri"
19
	Healthz   Endpoint = "/healthz"
20
	Liveness  Endpoint = "/liveness"
21
	Readyness Endpoint = "/readyness"
22
)
23

24
type RouterI interface {
25
	RegisterHandlers(addr string) *http.ServeMux
26
	UpdateHandlerFunc(endpoint Endpoint, function HandlerFunc)
27
	GetHandlerFunc(endpoint Endpoint) HandlerFunc
28
	SetHandlers(handlers HandlerMap)
29
}
30

31
type HandlerFunc func(w http.ResponseWriter, r *http.Request)
32
type HandlerMap map[Endpoint]HandlerFunc
33

34
type Router struct {
35
	Handlers HandlerMap
36
}
37

38
func NewRouter() RouterI {
39
	return &Router{}
40
}
41

42
func (r *Router) SetHandlers(handlers HandlerMap) {
43
	log := logger.FromContext(context.Background())
44

45
	if !env.KbltMutator && !util.IsFullRole() {
46
		delete(handlers, Mutate)
47
	} else {
48
		log.Info("Run templatter in MUTATOR role")
49
	}
50

51
	if !env.KbltValidator {
52
		delete(handlers, Validate)
53
	} else {
54
		log.Info("Run templatter in VALIDATOR role")
55
	}
56

57
	r.Handlers = handlers
58
}
59

60
func (r *Router) RegisterHandlers(addr string) *http.ServeMux {
61
	log := logger.FromContext(context.Background())
62
	router := http.NewServeMux()
63

64
	router.Handle("/logging", lib.AtomLevel)
65
	log.Info(fmt.Sprintf("See log level by path %s", fmt.Sprintf("http://localhost%s/logging", addr)))
66

67
	for endpoint, handler := range r.Handlers {
68
		router.HandleFunc(string(endpoint), handler)
69
	}
70

71
	return router
72
}
73

74
func (r *Router) UpdateHandlerFunc(endpoint Endpoint, function HandlerFunc) {
75
	r.Handlers[endpoint] = function
76
}
77

78
func (r *Router) GetHandlerFunc(endpoint Endpoint) HandlerFunc {
79
	return r.Handlers[endpoint]
80
}
81

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.