Как создать циклическую проверку работоспособности и получить значение перечисления для клиента prometheus - PullRequest
0 голосов
/ 05 августа 2020

Следуя этому примеру: 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 здесь?

...