UP
This commit is contained in:
12
README.md
12
README.md
@@ -1,12 +1,2 @@
|
||||
A fork of
|
||||
this is a repository of useful python scripts
|
||||
|
||||
https://github.com/ReneCareenium/rengobot
|
||||
|
||||
A discord bot for playing rengo games!
|
||||
|
||||
# Dependencies
|
||||
- sgf-render
|
||||
- python-discord
|
||||
- python-sgfmill
|
||||
|
||||
Make sure to run the bot in an environment with read/write permissions
|
2
python_website_monitor/credentials.txt
Normal file
2
python_website_monitor/credentials.txt
Normal file
@@ -0,0 +1,2 @@
|
||||
email
|
||||
password
|
120
python_website_monitor/server.py
Normal file
120
python_website_monitor/server.py
Normal file
@@ -0,0 +1,120 @@
|
||||
import requests
|
||||
import time
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText
|
||||
import sqlite3
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
def read_credentials(file_path):
|
||||
with open(file_path, 'r') as file:
|
||||
lines = file.readlines()
|
||||
email = lines[0].strip()
|
||||
password = lines[1].strip()
|
||||
return email, password
|
||||
|
||||
def check_website(url, timeout=5):
|
||||
try:
|
||||
response = requests.get(url, timeout=timeout)
|
||||
return response.status_code == 200
|
||||
except requests.RequestException:
|
||||
return False
|
||||
|
||||
def send_email(subject, body, to_email, from_email, from_password, smtp_server):
|
||||
msg = MIMEText(body)
|
||||
msg['Subject'] = subject
|
||||
msg['From'] = from_email
|
||||
msg['To'] = to_email
|
||||
|
||||
with smtplib.SMTP_SSL(smtp_server, 465) as server:
|
||||
server.login(from_email, from_password)
|
||||
server.sendmail(from_email, to_email, msg.as_string())
|
||||
|
||||
def create_database(db_path):
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
CREATE TABLE IF NOT EXISTS website_status (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
timestamp DATETIME NOT NULL,
|
||||
status INTEGER NOT NULL
|
||||
)
|
||||
''')
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def log_website_status(db_path, status):
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||
cursor.execute('''
|
||||
INSERT INTO website_status (timestamp, status)
|
||||
VALUES (?, ?)
|
||||
''', (timestamp, 1 if status else 0))
|
||||
conn.commit()
|
||||
conn.close()
|
||||
|
||||
def get_last_status(db_path):
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
SELECT status FROM website_status
|
||||
ORDER BY id DESC LIMIT 1
|
||||
''')
|
||||
result = cursor.fetchone()
|
||||
conn.close()
|
||||
return result[0] if result else None
|
||||
|
||||
def print_email_sent(status_str, timestamp):
|
||||
print(f"[{timestamp}] Email sent: Website is now {status_str}")
|
||||
|
||||
def cleanup_old_logs(db_path, days_to_keep=10):
|
||||
cutoff_date = (datetime.now() - timedelta(days=days_to_keep)).strftime('%Y-%m-%d %H:%M:%S')
|
||||
conn = sqlite3.connect(db_path)
|
||||
cursor = conn.cursor()
|
||||
cursor.execute('''
|
||||
DELETE FROM website_status
|
||||
WHERE timestamp < ?
|
||||
''', (cutoff_date,))
|
||||
deleted_rows = cursor.rowcount
|
||||
conn.commit()
|
||||
conn.close()
|
||||
return deleted_rows
|
||||
|
||||
def main():
|
||||
url = "http://petrovv.com"
|
||||
to_email = "nikola@petrovv.com"
|
||||
check_interval = 600 # 10 minutes in seconds
|
||||
credentials_file = "credentials.txt"
|
||||
db_path = "website_status.db"
|
||||
smtp_server = "mail.petrovv.com"
|
||||
|
||||
create_database(db_path)
|
||||
from_email, from_password = read_credentials(credentials_file)
|
||||
|
||||
last_status = None
|
||||
last_cleanup = datetime.now()
|
||||
|
||||
while True:
|
||||
current_time = datetime.now()
|
||||
current_status = check_website(url)
|
||||
log_website_status(db_path, current_status)
|
||||
|
||||
if last_status is None or current_status != (last_status == 1):
|
||||
status_str = "up" if current_status else "down"
|
||||
subject = f"Website Status Change: {status_str}"
|
||||
body = f"The website {url} is now {status_str} at {current_time.strftime('%Y-%m-%d %H:%M:%S')}."
|
||||
send_email(subject, body, to_email, from_email, from_password, smtp_server)
|
||||
print_email_sent(status_str, current_time.strftime('%Y-%m-%d %H:%M:%S'))
|
||||
last_status = 1 if current_status else 0
|
||||
|
||||
# Perform cleanup once per day
|
||||
if (current_time - last_cleanup).days >= 1:
|
||||
deleted = cleanup_old_logs(db_path, 10)
|
||||
if deleted > 0:
|
||||
print(f"[{current_time.strftime('%Y-%m-%d %H:%M:%S')}] Cleanup: Deleted {deleted} logs older than 10 days")
|
||||
last_cleanup = current_time
|
||||
|
||||
time.sleep(check_interval)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
0
.gitignore → rengobot/.gitignore
vendored
0
.gitignore → rengobot/.gitignore
vendored
12
rengobot/README.md
Normal file
12
rengobot/README.md
Normal file
@@ -0,0 +1,12 @@
|
||||
A fork of
|
||||
|
||||
https://github.com/ReneCareenium/rengobot
|
||||
|
||||
A discord bot for playing rengo games!
|
||||
|
||||
# Dependencies
|
||||
- sgf-render
|
||||
- python-discord
|
||||
- python-sgfmill
|
||||
|
||||
Make sure to run the bot in an environment with read/write permissions
|
Reference in New Issue
Block a user