12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- import os
- import requests
- from flask import Flask
- from flask import jsonify
- from flask_cors import CORS, cross_origin
- def get_result():
- services_up = 0
- failure_list = []
- returnResponse = {"style": "", "title": "", "content": ""}
- statping_endpoint = os.getenv("STATPING_ENDPOINT")
- try:
- print("%sapi/services/" % statping_endpoint)
- response = requests.get("%sapi/services/" % statping_endpoint, verify=False)
- # If we get a response
- if response.status_code == 200:
- # Get the total number of services returned
- total_services = len(response.json())
- # Iterate through the response
- for key in response.json():
- # If the service is online, incrememnt the up count
- if key["online"] == True:
- services_up += 1
- # Otherwise append the name to the naughty list
- else:
- failure_list.append(key["name"])
- # Check the number of up services is equal to the total number of services
- if total_services == services_up:
- # if so, return a success object
- returnResponse["style"] = "is-success"
- returnResponse["title"] = "Everything is up and running"
- returnResponse["content"] = (
- "<b>Online %s / %s. Check <a href=%s target=_blank>here</a> for more info. </br> <p>"
- % (services_up, total_services, statping_endpoint)
- )
- return returnResponse
- else:
- # return a numpty message
- returnResponse["style"] = "is-danger"
- returnResponse["title"] = "Service disruption"
- # need to build the return message to include the failures as a formatted list
- numptyList = "<ul>"
- for i in failure_list:
- numptyList += "<li>" + i + "</li>"
- numptyList += "</ul>"
- returnResponse["content"] = (
- "<b>Online %s / %s. Check <a href=%s target=_blank>here</a> for more info. </br> <p> <br>These are reported down:</br> %s"
- % (services_up, total_services, statping_endpoint, numptyList)
- )
- return returnResponse
- except:
- returnResponse["style"] = "is-danger"
- returnResponse["title"] = "Issue with upstream"
- returnResponse["content"] = "Statping is unreachable, check your endpoint: %s" % statping_endpoint
- return returnResponse
- app = Flask(__name__)
- app.config["JSON_SORT_KEYS"] = False
- cors = CORS(app)
- app.config["CORS_HEADERS"] = "Content-Type"
- @app.route("/endpoint/", methods=["GET"])
- @cross_origin()
- def welcome():
- return jsonify(get_result())
- if __name__ == "__main__":
- app.run(host="0.0.0.0", port=8099)
|