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"] = ( "Online %s / %s. Check here for more info.
" % (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 = "
These are reported down: %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)