first commit
This commit is contained in:
4
Dockerfile
Normal file
4
Dockerfile
Normal file
@@ -0,0 +1,4 @@
|
||||
FROM python:latest
|
||||
WORKDIR /usr/local/bin
|
||||
COPY pinger.py .
|
||||
CMD ["python","-u","pinger.py"]
|
||||
7
docker-compose.yaml
Normal file
7
docker-compose.yaml
Normal file
@@ -0,0 +1,7 @@
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
meshmqtt:
|
||||
restart: unless-stopped
|
||||
build:
|
||||
context: .
|
||||
52
pinger.py
Normal file
52
pinger.py
Normal file
@@ -0,0 +1,52 @@
|
||||
import os
|
||||
import time
|
||||
import smtplib
|
||||
from email.mime.text import MIMEText
|
||||
|
||||
def send_email_alert(ip_address):
|
||||
smtp_server = "mail.smtp2go.com"
|
||||
smtp_port = 587
|
||||
smtp_username = "pinger"
|
||||
smtp_password = "Qix46X7aPhvIZwrk"
|
||||
sender_email = "pinger@pattinson.org"
|
||||
receiver_email = "james@pattinson.org"
|
||||
subject = "ALERT: EGFH gateway unreachable"
|
||||
body = f"The server with IP {ip_address} has been unreachable for over 5 minutes."
|
||||
|
||||
msg = MIMEText(body)
|
||||
msg["Subject"] = subject
|
||||
msg["From"] = sender_email
|
||||
msg["To"] = receiver_email
|
||||
|
||||
try:
|
||||
with smtplib.SMTP(smtp_server, smtp_port) as server:
|
||||
server.starttls()
|
||||
server.login(smtp_username, smtp_password)
|
||||
server.sendmail(sender_email, receiver_email, msg.as_string())
|
||||
print("Alert email sent.")
|
||||
except Exception as e:
|
||||
print(f"Failed to send email: {e}")
|
||||
|
||||
def ping_host(ip_address):
|
||||
response = os.system(f"ping -c 1 {ip_address} > /dev/null 2>&1")
|
||||
return response == 0
|
||||
|
||||
def monitor(ip_address, timeout=300, check_interval=10):
|
||||
downtime_start = None
|
||||
print(f"Starting monitor process on {ip_address}")
|
||||
|
||||
while True:
|
||||
if ping_host(ip_address):
|
||||
downtime_start = None # Reset downtime if host is reachable
|
||||
else:
|
||||
if downtime_start is None:
|
||||
downtime_start = time.time()
|
||||
elif time.time() - downtime_start > timeout:
|
||||
send_email_alert(ip_address)
|
||||
downtime_start = None # Reset after sending email
|
||||
time.sleep(timeout) # Avoid spamming alerts
|
||||
|
||||
time.sleep(check_interval)
|
||||
|
||||
if __name__ == "__main__":
|
||||
monitor("192.168.24.1") # Replace with the actual IP
|
||||
Reference in New Issue
Block a user