Add whitelist health check
This commit is contained in:
@@ -101,3 +101,24 @@ Registry endpoint:
|
|||||||
- Сервис пока не подключается к MariaDB.
|
- Сервис пока не подключается к MariaDB.
|
||||||
- Состояние не сохраняется.
|
- Состояние не сохраняется.
|
||||||
- Логика получения и отправки алертов whitelist ещё не реализована.
|
- Логика получения и отправки алертов whitelist ещё не реализована.
|
||||||
|
|
||||||
|
## Проверка whitelist API
|
||||||
|
|
||||||
|
Endpoint `https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app` без авторизации отвечает:
|
||||||
|
|
||||||
|
```text
|
||||||
|
HTTP 302
|
||||||
|
Location: /v2/login
|
||||||
|
Found. Redirecting to /v2/login
|
||||||
|
```
|
||||||
|
|
||||||
|
В KUMA добавлен stateless endpoint `GET /check`, который запрашивает whitelist без автоматического перехода по redirect и возвращает статус, `Location` и тело ответа.
|
||||||
|
|
||||||
|
Для авторизации предусмотрена переменная `WHITELIST_TOKEN`; при её наличии KUMA передаёт заголовок `Authorization: Bearer <token>`.
|
||||||
|
|
||||||
|
Добавлены переменные:
|
||||||
|
|
||||||
|
```text
|
||||||
|
WHITELIST_URL=https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app
|
||||||
|
WHITELIST_TIMEOUT=10
|
||||||
|
```
|
||||||
|
|||||||
+35
@@ -2,9 +2,14 @@
|
|||||||
import os
|
import os
|
||||||
|
|
||||||
from flask import Flask, jsonify
|
from flask import Flask, jsonify
|
||||||
|
import requests
|
||||||
|
|
||||||
app = Flask(__name__)
|
app = Flask(__name__)
|
||||||
VERSION = "0.1.0"
|
VERSION = "0.1.0"
|
||||||
|
WHITELIST_URL = os.getenv(
|
||||||
|
"WHITELIST_URL",
|
||||||
|
"https://whitelist.nodejsk8s.services.ngcloud.ru/v2/app",
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def mariadb_configuration():
|
def mariadb_configuration():
|
||||||
@@ -18,6 +23,27 @@ def mariadb_configuration():
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def check_whitelist():
|
||||||
|
headers = {}
|
||||||
|
token = os.getenv("WHITELIST_TOKEN")
|
||||||
|
if token:
|
||||||
|
headers["Authorization"] = f"Bearer {token}"
|
||||||
|
response = requests.get(
|
||||||
|
WHITELIST_URL,
|
||||||
|
headers=headers,
|
||||||
|
allow_redirects=False,
|
||||||
|
timeout=int(os.getenv("WHITELIST_TIMEOUT", "10")),
|
||||||
|
)
|
||||||
|
content_type = response.headers.get("Content-Type", "")
|
||||||
|
body = response.json() if "json" in content_type else response.text
|
||||||
|
return {
|
||||||
|
"url": WHITELIST_URL,
|
||||||
|
"status": response.status_code,
|
||||||
|
"location": response.headers.get("Location"),
|
||||||
|
"body": body,
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@app.get("/")
|
@app.get("/")
|
||||||
def index():
|
def index():
|
||||||
return jsonify({
|
return jsonify({
|
||||||
@@ -34,6 +60,15 @@ def health():
|
|||||||
return jsonify({"ok": True, "version": VERSION})
|
return jsonify({"ok": True, "version": VERSION})
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/check")
|
||||||
|
def check():
|
||||||
|
try:
|
||||||
|
result = check_whitelist()
|
||||||
|
return jsonify({"ok": 200 <= result["status"] < 300, **result})
|
||||||
|
except requests.RequestException as exc:
|
||||||
|
return jsonify({"ok": False, "url": WHITELIST_URL, "error": str(exc)}), 502
|
||||||
|
|
||||||
|
|
||||||
@app.get("/mariadb")
|
@app.get("/mariadb")
|
||||||
def mariadb():
|
def mariadb():
|
||||||
return jsonify(mariadb_configuration())
|
return jsonify(mariadb_configuration())
|
||||||
|
|||||||
@@ -1 +1,2 @@
|
|||||||
flask
|
flask
|
||||||
|
requests
|
||||||
Reference in New Issue
Block a user