Newer
Older
TOPIC_ARN = os.getenv("TOPIC_ARN")
def publish(message):
"""Publish an SNS message."""
client = boto3.client("sns")
client.publish(TopicArn=TOPIC_ARN, Message=message)
def check_url(url, method="GET", valid_codes=(200)):
Allows specifying the HTTP method and a list of valid codes."""
try:
response = requests.request(method, url, allow_redirects=False)
return response.status_code in valid_codes
except Exception as e: # pylint: disable=broad-except,invalid-name
print(str(e))
def check_urls(checks):
"""Check a list of URLs."""
for check in checks:
if check_url(
check["url"], check.get("method", "GET"), check.get("codes", [200])
):
print(f"{check['url']} is OK.")
else:
message = f"Failed check for {check['url']}."
print(message)
publish(message)
def check_ssh(host, port=22):
"""Check that an SSH server is available on that host and port."""
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
sock.connect((host, port))
msg = sock.recv(1024)
return msg.startswith(b"SSH-2.0-OpenSSH")
except Exception as e: # pylint: disable=broad-except,invalid-name
print(str(e))
return False