msrc
/
livenessController.go
62 строки · 1.9 Кб
1package msrc
2
3import "net/http"
4
5// livenessController реализует контроллер для обработки запросов
6// liveness probe сервиса.
7type livenessController struct {
8mainService MultiServiceInterface
9}
10
11// newLivenessService реализует конструктор сервиса для обработки запросов
12// Liveness probe от Kubernetes. Под капотом использует HTTP сервер из net/http
13// для реализации API проверки доступности.
14func newLivenessService(
15port string,
16mainService MultiServiceInterface,
17ServerConfig ...*http.Server,
18) ServiceInterface {
19controller := &livenessController{
20mainService: mainService,
21}
22
23mux := http.NewServeMux()
24mux.HandleFunc("/ready", controller.Ready)
25mux.HandleFunc("/alive", controller.Alive)
26
27if 0 == len(ServerConfig) {
28ServerConfig = append(ServerConfig, nil)
29}
30
31return HttpService(`0.0.0.0`, port, mux, 5, ServerConfig[0])
32}
33
34// Ready обрабатывает запросы к API для получения статуса готовности для
35// Readyness Probe.
36func (l *livenessController) Ready(writer http.ResponseWriter, _ *http.Request) {
37status := http.StatusOK
38message := `Ok`
39
40if !l.mainService.IsServicesRun() {
41status = http.StatusInternalServerError
42message = `Is not ready`
43}
44
45writer.WriteHeader(status)
46_, _ = writer.Write([]byte(message))
47}
48
49// Alive обрабатывает запросы к API для получения статуса работоспособности для
50// Liveness Probe.
51func (l *livenessController) Alive(writer http.ResponseWriter, _ *http.Request) {
52status := http.StatusOK
53message := `Ok`
54
55if !l.mainService.IsServicesAlive() {
56status = http.StatusInternalServerError
57message = `Is not ready`
58}
59
60writer.WriteHeader(status)
61_, _ = writer.Write([]byte(message))
62}
63