92 lines
2.4 KiB
Python
Executable File
92 lines
2.4 KiB
Python
Executable File
#!/usr/bin/python3
|
|
import json
|
|
import logging
|
|
import sqlite3
|
|
from os import environ
|
|
from sys import stdout
|
|
|
|
import requests
|
|
|
|
# First version of script is dated by Fri Mar 19 00:03:08 2021 +0300
|
|
|
|
url = environ["DISCORD_WEBHOOK_URL"]
|
|
|
|
# setting up logging
|
|
logger = logging.getLogger()
|
|
logger.setLevel(logging.INFO)
|
|
stdout_handler = logging.StreamHandler(stdout)
|
|
logger.addHandler(stdout_handler)
|
|
|
|
|
|
def normalize_status(status_raw):
|
|
try:
|
|
status = json.loads(status_raw)
|
|
return status["status"]
|
|
|
|
except Exception:
|
|
print(status_raw)
|
|
raise
|
|
# if status['code'] == 0:
|
|
# return 'OK'
|
|
|
|
# else:
|
|
# return status['status']
|
|
|
|
|
|
sqlite_connection = sqlite3.connect("ED_servers_status.sqlite3")
|
|
|
|
with sqlite_connection:
|
|
try:
|
|
logger.debug("Trying to create the table")
|
|
sqlite_connection.execute(
|
|
"create table servers_status (code int, status text, Timestamp DATATIME DEFAULT CURRENT_TIMESTAMP);"
|
|
)
|
|
logger.debug("Table created")
|
|
except sqlite3.OperationalError:
|
|
logger.debug("Table already exists")
|
|
|
|
logger.debug("Making status request")
|
|
status_request = requests.get("https://ed-server-status.orerve.net")
|
|
|
|
logger.debug(f"Request result: {status_request.text}")
|
|
logger.debug(f"Request http code: {status_request.status_code}")
|
|
|
|
with sqlite_connection:
|
|
sqlite_connection.execute(
|
|
"insert into servers_status (code, status) values (?, ?);",
|
|
[status_request.status_code, status_request.text],
|
|
)
|
|
|
|
logger.debug("Inserted")
|
|
|
|
# part with alerting
|
|
logger.debug("Diffing status")
|
|
|
|
with sqlite_connection:
|
|
old_status_raw = sqlite_connection.execute(
|
|
"select status from servers_status order by Timestamp desc limit 1 offset 1;"
|
|
).fetchone()[0]
|
|
sqlite_connection.close()
|
|
|
|
"""
|
|
old statuses for old endpoint
|
|
{"text":"OK","status":2}
|
|
{"text":"Offline","status":0}
|
|
{"text":"Scheduled Maintenance","status":1}
|
|
{"text":"Upgrading","status":1}
|
|
"""
|
|
|
|
old_status_text = normalize_status(old_status_raw)
|
|
new_status_text = normalize_status(status_request.text)
|
|
|
|
logger.debug(f"Old status: {old_status_text}, New status: {new_status_text}")
|
|
|
|
if new_status_text != old_status_text:
|
|
message = f"Servers status was changed: {old_status_text} -> {new_status_text}"
|
|
logger.info(message)
|
|
r = requests.post(
|
|
url=url,
|
|
data=f"content=```{requests.utils.quote(message)}```",
|
|
headers={"Content-Type": "application/x-www-form-urlencoded"},
|
|
)
|