Следуя этому примеру: https://opensource.com/article/18/4/metrics-monitoring-and-python
Мы используем Python, чтобы попытаться создать приложение проверки работоспособности, которое очищает веб-страницу и проверяет успешный вход. Затем мы используем sh, чтобы отправить состояние проверки работоспособности в Prometheus, используя пакет prometheus_client.
У нас есть app.py
, который по сути является конечной точкой Flask api, где Prometheus будет очищать метрики. Мы также пришли к идее создания подпроцесса для запуска нашего бесконечного теста l oop.
from flask import Flask, Response
from middleware import setup_metrics
import prometheus_client
import subprocess
CONTENT_TYPE_LATEST = str('text/plain; version=0.0.4; charset=utf-8')
app = Flask(__name__)
setup_metrics(app)
subprocess.Popen(['python', "/usr/src/tasks/selenium_login.py"])
@app.route('/metrics')
def metrics():
return Response(
prometheus_client.generate_latest(),
mimetype=CONTENT_TYPE_LATEST)
if __name__ == '__main__':
# Start up the server to expose the metrics.
app.run(host='0.0.0.0', debug=True) # local host
У нас есть middleware.py
, который вычисляет и сообщает метрики
from flask import request
from prometheus_client import Counter, Histogram
import time
import sys
HEALTHCHECK_STATE = Enum(
'my_task_state',
'Description of enum: healthcheck state',
states=['starting', 'running', 'stopped'])
def set_state_to_running():
HEALTHCHECK_STATE.state('running')
def set_state_to_stopped():
HEALTHCHECK_STATE.state('stopped')
def setup_metrics(app):
app.after_request(post_state)
Мы иметь selenium_login.py
, который запускает сценарий тестового входа и либо пропускает, либо исключает.
#!/usr/bin/env python
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
import time
import base64
from middleware import set_state_to_running, set_state_to_stopped
def login():
time.sleep(20)
try:
driver = webdriver.Chrome()
driver.get('webpage.com')
# do login stuff
driver.quit()
set_state_to_running()
except:
set_state_to_stopped()
if __name__ == "__main__":
while True:
login()
Проблема, которую мы пытаемся решить, заключается в передаче состояния из файла selenium_login.py
в middleware.py
, чтобы метрики c обновляется по мере того, как бесконечный вход l oop выполняется и либо проходит, либо терпит неудачу. Пока достижение конечной точки метрики дает нам только:
my_task_state{my_task_state="starting"} 1.0
my_task_state{my_task_state="running"} 0.0
my_task_state{my_task_state="stopped"} 0.0
Мы ожидаем, что работа будет «1.0». Может кто-нибудь нам поможет с логами c здесь?