msrc

Форк
0
/
livenessController.go 
62 строки · 1.9 Кб
1
package msrc
2

3
import "net/http"
4

5
// livenessController реализует контроллер для обработки запросов
6
// liveness probe сервиса.
7
type livenessController struct {
8
	mainService MultiServiceInterface
9
}
10

11
// newLivenessService реализует конструктор сервиса для обработки запросов
12
// Liveness probe от Kubernetes. Под капотом использует HTTP сервер из net/http
13
// для реализации API проверки доступности.
14
func newLivenessService(
15
	port string,
16
	mainService MultiServiceInterface,
17
	ServerConfig ...*http.Server,
18
) ServiceInterface {
19
	controller := &livenessController{
20
		mainService: mainService,
21
	}
22

23
	mux := http.NewServeMux()
24
	mux.HandleFunc("/ready", controller.Ready)
25
	mux.HandleFunc("/alive", controller.Alive)
26

27
	if 0 == len(ServerConfig) {
28
		ServerConfig = append(ServerConfig, nil)
29
	}
30

31
	return HttpService(`0.0.0.0`, port, mux, 5, ServerConfig[0])
32
}
33

34
// Ready обрабатывает запросы к API для получения статуса готовности для
35
// Readyness Probe.
36
func (l *livenessController) Ready(writer http.ResponseWriter, _ *http.Request) {
37
	status := http.StatusOK
38
	message := `Ok`
39

40
	if !l.mainService.IsServicesRun() {
41
		status = http.StatusInternalServerError
42
		message = `Is not ready`
43
	}
44

45
	writer.WriteHeader(status)
46
	_, _ = writer.Write([]byte(message))
47
}
48

49
// Alive обрабатывает запросы к API для получения статуса работоспособности для
50
// Liveness Probe.
51
func (l *livenessController) Alive(writer http.ResponseWriter, _ *http.Request) {
52
	status := http.StatusOK
53
	message := `Ok`
54

55
	if !l.mainService.IsServicesAlive() {
56
		status = http.StatusInternalServerError
57
		message = `Is not ready`
58
	}
59

60
	writer.WriteHeader(status)
61
	_, _ = writer.Write([]byte(message))
62
}
63

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

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

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

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