#! /usr/bin/env python import sys from collections import namedtuple import requests import json import time sys.path.insert(0, '.') from tracker.runner import monitor_partitions from tracker.logger import get_logger logger = get_logger(__name__) logger.info("Starting system_monitor_endpoints") root = 'https://api.whtlst.in/api' Request = namedtuple("Request", "method endpoint body asserter") def assert_chart_result(status_code, data, millis): assert status_code == 200 assert len(data['results']) > 0 assert millis < 1*1000 def test_request(req: Request): start = time.time() res = requests.request(req.method, url=req.endpoint, json=req.body, auth=('joel', 'Joel123')) elapsed_millis = int((time.time() - start)*1000) data = None try: data = res.json() except Exception as e: logger.warning("Endpoint did not return json, {}".format(e)) try: assert_chart_result(res.status_code, data, elapsed_millis) except AssertionError as e: logger.exception("Request check failed to {}: {}".format(req.endpoint, e), extra={ "request": {k: v for (k, v) in req._asdict().items() if k in ['method', 'endpoint', 'body']}, "response": { "elapsed_millis": elapsed_millis, "status_code": res.status_code, "data": "\n".join(json.dumps(data, indent=2).splitlines()[0:50]), } }) raise e tests = [ Request("POST", root + "/charts/SpotifyOlap", {"filters":{"minArtistPopularity": 20}}, assert_chart_result) ] for r in tests: test_request(r) logger.info("Completed system_monitor_endpoints")