Remember that post I did a while back where I used node-red with statping to make Homer look a little nice? Nah? Don't blame ya. Anyway, turns out I had no other use for node-red, so I decided to get rid of that and write a little python script to do the same thing. Here it be:

from flask import Flask
from flask import jsonify
import requests
from flask_cors import CORS, cross_origin

def get_result():
  services_up = 0
  failure_list = []
  returnResponse = {"style":"", "title":"", "content":""}
  statping_endpoint = ""

    response = requests.get(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

      # 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"] = "All good in the hood boss"
        returnResponse["content"] = "<b>%s / %s Services showing as online. Check <a href= target=_blank>here</a> for more info. </br> <p>"%(services_up, total_services)

        # return a numpty message
        returnResponse["style"] = "is-danger"
        returnResponse["title"] = "Halp"
        # 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>%s / %s Services showing as online. Check <a href= target=_blank>here</a> for more info. </br> <p> <br>Here are the numpties that are letting the side down:</br> %s"%(services_up, total_services, numptyList)

    returnResponse["style"] = "is-danger"
    returnResponse["title"] = "I have the sads"
    returnResponse["content"] = "Like, man cannot even holla at Statping."

app = Flask(__name__)
app.config["JSON_SORT_KEYS"] = False
cors = CORS(app)
app.config['CORS_HEADERS'] = 'Content-Type'

@app.route("/endpoint/", methods=["GET"])
def welcome():
    return jsonify(get_result())

if __name__ == "__main__":"", port=80)
Does it work? Ya. Is it "good" code? Let's not get ahead of ourselves.

Then, I dumped this into a teeny little docker container. Here's the super complicated docker file:

FROM python:3-alpine
WORKDIR /usr/src/app
COPY ./ .
RUN python -m pip install --upgrade pip
RUN pip3 install flask requests flask_cors
CMD [""]
ENTRYPOINT ["python3"]

With that made and running on my docker host, I can go to dockerhosturl/endpoint/ and it'll return the nicely formatted json that Homer needs to be able to display the update.