Initial commit
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
||||
.env
|
||||
__pycache__/
|
||||
217
test_metric.py
Normal file
217
test_metric.py
Normal file
@@ -0,0 +1,217 @@
|
||||
import requests
|
||||
from urllib3.exceptions import InsecureRequestWarning
|
||||
import logging
|
||||
from datetime import datetime, timezone
|
||||
import os
|
||||
from dotenv import load_dotenv
|
||||
|
||||
load_dotenv()
|
||||
|
||||
requests.packages.urllib3.disable_warnings(category=InsecureRequestWarning)
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="%(asctime)s [%(levelname)s] %(message)s",
|
||||
datefmt="%Y-%m-%d %H:%M:%S",
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
DEFAULT_TIMEOUT = 20.0
|
||||
DEFAULT_VERIFY_TLS = False
|
||||
DEFAULT_HEADERS = {
|
||||
'accept': 'application/json',
|
||||
}
|
||||
|
||||
CREDS = {
|
||||
"User": os.getenv('TEST_ORCH_API_USER'),
|
||||
"Password": os.getenv('TEST_ORCH_API_PASS'),
|
||||
}
|
||||
BASE_URL = os.getenv('BASE_URL')
|
||||
URL_API_TOKEN = f"http://{BASE_URL}:5001/api/Account"
|
||||
URL_API_GENERAL = f"https://{BASE_URL}:44392"
|
||||
|
||||
|
||||
def send_http_request(
|
||||
method: str,
|
||||
url: str,
|
||||
*,
|
||||
headers: dict | None = None,
|
||||
params: dict | None = None,
|
||||
data: dict | str | None = None,
|
||||
json_data: dict | list | None = None,
|
||||
timeout: float = DEFAULT_TIMEOUT,
|
||||
verify: bool = DEFAULT_VERIFY_TLS,
|
||||
) -> requests.Response:
|
||||
"""Унифицированный HTTP-запрос с дефолтными настройками и логированием."""
|
||||
merged_headers = {**DEFAULT_HEADERS, **(headers or {})}
|
||||
|
||||
response = requests.request(
|
||||
method=method.upper(),
|
||||
url=url,
|
||||
headers=merged_headers,
|
||||
params=params,
|
||||
data=data,
|
||||
json=json_data,
|
||||
timeout=timeout,
|
||||
verify=verify,
|
||||
)
|
||||
logger.debug("%s %s -> %s", method.upper(), response.request.url, response.status_code)
|
||||
return response
|
||||
|
||||
|
||||
def get_token():
|
||||
logger.info("Получаем токен для пользователя %s", CREDS['User'])
|
||||
try:
|
||||
data = {
|
||||
"userName": CREDS["User"],
|
||||
"password": CREDS["Password"],
|
||||
}
|
||||
response = send_http_request(
|
||||
'POST',
|
||||
URL_API_TOKEN,
|
||||
headers={'accept': '*/*'},
|
||||
json_data=data,
|
||||
)
|
||||
response.raise_for_status()
|
||||
response_data = response.json()
|
||||
token = response_data.get('token')
|
||||
if not token:
|
||||
logger.error('Ответ получения токена не содержит поле token')
|
||||
logger.debug('response json: %s', response_data)
|
||||
raise SystemExit(1)
|
||||
return token
|
||||
except requests.HTTPError as error:
|
||||
response = error.response
|
||||
logger.error('Произошла ошибка во время получения токена: %s', error)
|
||||
if response is not None:
|
||||
logger.debug('status=%s url=%s', response.status_code, response.url)
|
||||
logger.debug('content-type=%s', response.headers.get('Content-Type'))
|
||||
logger.debug('response(first 1500): %s', response.text[:1500])
|
||||
raise SystemExit(1)
|
||||
except requests.RequestException as error:
|
||||
logger.error('Сетевая ошибка во время получения токена: %s', error)
|
||||
raise SystemExit(1)
|
||||
except ValueError as error:
|
||||
logger.error('Некорректный JSON при получении токена: %s', error)
|
||||
raise SystemExit(1)
|
||||
except Exception as error:
|
||||
logger.error('Неожиданная ошибка во время получения токена: %s', error)
|
||||
raise SystemExit(1)
|
||||
|
||||
def get_queue(auth_token: str, event_date: str | None = None):
|
||||
postfix = "/api/RpaProjectQueue/All"
|
||||
URL = URL_API_GENERAL + postfix
|
||||
try:
|
||||
params = {'eventDate': event_date} if event_date else None
|
||||
response = send_http_request(
|
||||
'GET',
|
||||
URL,
|
||||
headers={'Authorization': f'Bearer {auth_token}'},
|
||||
params=params,
|
||||
)
|
||||
response.raise_for_status()
|
||||
|
||||
if 'application/json' in response.headers.get('Content-Type', '').lower():
|
||||
response_data = response.json()
|
||||
else:
|
||||
response_data = response.text
|
||||
|
||||
return response_data
|
||||
except requests.HTTPError as error:
|
||||
response = error.response
|
||||
logger.error('Произошла ошибка во время получения очередей: %s', error)
|
||||
if response is not None:
|
||||
logger.debug("status=%s url=%s", response.status_code, response.url)
|
||||
logger.debug("content-type=%s", response.headers.get('Content-Type'))
|
||||
logger.debug("response(first 1500): %s", response.text[:1500])
|
||||
return None
|
||||
except Exception as error:
|
||||
logger.exception('Произошла ошибка во время получения очередей: %s', error)
|
||||
return None
|
||||
|
||||
|
||||
def get_queue_by_project_id(auth_token: str, project_id: int = 150):
|
||||
"""GET /api/RpaProjectQueue с параметром ProjectId (по умолчанию 150)."""
|
||||
url = URL_API_GENERAL + '/api/RpaProjectQueue'
|
||||
try:
|
||||
response = send_http_request(
|
||||
'GET',
|
||||
url,
|
||||
headers={'Authorization': f'Bearer {auth_token}'},
|
||||
params={'ProjectId': project_id},
|
||||
)
|
||||
response.raise_for_status()
|
||||
|
||||
if 'application/json' in response.headers.get('Content-Type', '').lower():
|
||||
return response.json()
|
||||
return response.text
|
||||
except requests.HTTPError as error:
|
||||
response = error.response
|
||||
logger.error('Произошла ошибка во время GET /api/RpaProjectQueue: %s', error)
|
||||
if response is not None:
|
||||
logger.debug("status=%s url=%s", response.status_code, response.url)
|
||||
logger.debug("content-type=%s", response.headers.get('Content-Type'))
|
||||
logger.debug("response(first 1500): %s", response.text[:1500])
|
||||
return None
|
||||
except Exception as error:
|
||||
logger.exception('Произошла ошибка во время GET /api/RpaProjectQueue: %s', error)
|
||||
return None
|
||||
|
||||
|
||||
def get_test_endpoint(auth_token: str):
|
||||
"""Контрольный GET /api/test для проверки базового доступа с токеном."""
|
||||
url = URL_API_GENERAL + '/api/test'
|
||||
params = None
|
||||
try:
|
||||
response = send_http_request(
|
||||
'GET',
|
||||
url,
|
||||
headers={'Authorization': f'Bearer {auth_token}'},
|
||||
params=params,
|
||||
)
|
||||
response.raise_for_status()
|
||||
|
||||
if 'application/json' in response.headers.get('Content-Type', '').lower():
|
||||
return response.json()
|
||||
return response.text
|
||||
except requests.HTTPError as error:
|
||||
response = error.response
|
||||
logger.error('Произошла ошибка во время контрольного GET /api/test: %s', error)
|
||||
if response is not None:
|
||||
logger.debug("status=%s url=%s", response.status_code, response.url)
|
||||
logger.debug("content-type=%s", response.headers.get('Content-Type'))
|
||||
logger.debug("response(first 1500): %s", response.text[:1500])
|
||||
return None
|
||||
except Exception as error:
|
||||
logger.exception('Произошла ошибка во время контрольного GET /api/test: %s', error)
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
token = get_token()
|
||||
logger.info("Длинна токена: %s", len(token))
|
||||
|
||||
logger.info('Проверяем контрольный GET /api/test ...')
|
||||
control_result = get_test_endpoint(token)
|
||||
if control_result is not None:
|
||||
logger.info('Контрольный GET успешен')
|
||||
else:
|
||||
logger.info('Контрольный GET неуспешен')
|
||||
logger.debug("Результат: %s", control_result)
|
||||
|
||||
logger.info('Проверяем GET /api/RpaProjectQueue?ProjectId=150 ...')
|
||||
queue_by_project_result = get_queue_by_project_id(token)
|
||||
if queue_by_project_result is not None:
|
||||
logger.info('GET /api/RpaProjectQueue?ProjectId=150 успешен')
|
||||
else:
|
||||
logger.info('GET /api/RpaProjectQueue?ProjectId=150 неуспешен')
|
||||
logger.debug('Результат /api/RpaProjectQueue?ProjectId=150: %s', queue_by_project_result)
|
||||
|
||||
logger.info('Проверяем GET /api/RpaProjectQueue/All без eventDate ...')
|
||||
queue_result_no_date = get_queue(token)
|
||||
logger.debug('Результат без eventDate: %s', queue_result_no_date)
|
||||
|
||||
event_date = datetime.now(timezone.utc).strftime('%Y-%m-%dT%H:%M:%SZ')
|
||||
logger.info('Проверяем GET /api/RpaProjectQueue/All с eventDate=%s ...', event_date)
|
||||
queue_result_with_date = get_queue(token, event_date=event_date)
|
||||
logger.debug('Результат с eventDate: %s', queue_result_with_date)
|
||||
Reference in New Issue
Block a user