raannakasturi commited on
Commit
bd0aee5
1 Parent(s): f3098a6

Update saveDataSendMail.py

Browse files
Files changed (1) hide show
  1. saveDataSendMail.py +131 -132
saveDataSendMail.py CHANGED
@@ -1,132 +1,131 @@
1
- import psycopg2
2
- from psycopg2 import sql
3
- from dotenv import load_dotenv
4
- import os
5
- from getStatus import getStatus
6
- import tldextract
7
- import smtplib
8
- from email.mime.text import MIMEText
9
- import ssl
10
-
11
- load_dotenv()
12
- database = os.getenv('POSTGRES_DATABASE')
13
- user = os.getenv('POSTGRES_USER')
14
- password = os.getenv('POSTGRES_PASSWORD')
15
- host = os.getenv('POSTGRES_HOST')
16
- port = os.getenv('POSTGRES_DATABASE_PORT')
17
- endpoint_id = os.getenv('ENDPOINT_ID')
18
- sender_email = os.getenv('EMAIL_ADDRESS')
19
- sender_password = os.getenv('EMAIL_PASSWORD')
20
- smtp_server = os.getenv('SMTP_SERVER')
21
- smtp_port = os.getenv('SMTP_PORT')
22
-
23
- databaseConn = f"postgresql://{user}:{password}@{host}:{port}/{database}?options=endpoint%3D{endpoint_id}"
24
-
25
- def insert(domain, email, status, downcount):
26
- try:
27
- conn = psycopg2.connect(databaseConn)
28
- cursor = conn.cursor()
29
- insertData = """
30
- INSERT INTO USERDATA (DOMAIN, EMAIL, STATUS, DOWNCOUNT)
31
- VALUES (%s, %s, %s, %s);
32
- """
33
- cursor.execute(insertData, (domain, email, status, downcount))
34
- conn.commit()
35
- cursor.close()
36
- conn.close()
37
- print(f"Data for {domain} inserted successfully.")
38
- except Exception as e:
39
- print(f"Error inserting data for {domain}: {e}")
40
-
41
- def get(domain):
42
- try:
43
- conn = psycopg2.connect(databaseConn)
44
- cursor = conn.cursor()
45
- getData = """
46
- SELECT STATUS, DOWNCOUNT FROM USERDATA WHERE DOMAIN = %s;
47
- """
48
- cursor.execute(getData, (domain,))
49
- existing_data = cursor.fetchone()
50
- cursor.close()
51
- conn.close()
52
- if existing_data:
53
- return existing_data[1]
54
- else:
55
- return None
56
- except Exception as e:
57
- print(f"Error retrieving data for {domain}: {e}")
58
- return None
59
-
60
- def update(domain, status, downcount):
61
- try:
62
- conn = psycopg2.connect(databaseConn)
63
- cursor = conn.cursor()
64
- updateData = """
65
- UPDATE USERDATA SET STATUS = %s, DOWNCOUNT = %s WHERE DOMAIN = %s;
66
- """
67
- cursor.execute(updateData, (status, downcount, domain))
68
- conn.commit()
69
- cursor.close()
70
- conn.close()
71
- print(f"Data for {domain} updated successfully.")
72
- except Exception as e:
73
- print(f"Error updating data for {domain}: {e}")
74
-
75
- def getData(EMAIL, URL, downcount):
76
- data = getStatus(URL)
77
- if data[0].startswith("2") or data[0].startswith("3"):
78
- status = "Up"
79
- downcount = 0
80
- else:
81
- status = "Down"
82
- downcount += 1
83
- domainData = tldextract.extract(URL)
84
- if domainData.subdomain == "":
85
- domain = domainData.domain + "." + domainData.suffix
86
- else:
87
- domain = domainData.subdomain + "." + domainData.domain + "." + domainData.suffix
88
- email = EMAIL
89
- return domain, email, status, downcount
90
-
91
- def saveDataSendMail(URL, email):
92
- domain, email, status, downcount = getData(email, URL, 0)
93
- existing_downcount = get(domain)
94
- mailStatus = f"Website online. No mail sent for {domain}"
95
- if existing_downcount is None:
96
- existing_downcount = 0
97
- if status == "Up":
98
- downcount = 0
99
- else:
100
- downcount = existing_downcount + 1
101
- mailStatus = sendMail(email, domain, status)
102
- insert(domain, email, status, downcount)
103
- else:
104
- if status == "Up":
105
- downcount = 0
106
- else:
107
- downcount = existing_downcount + 1
108
- mailStatus = sendMail(email, domain, status)
109
- update(domain, status, downcount)
110
- print(f"{domain} is currently {status}")
111
- return email, downcount, mailStatus
112
-
113
- def sendMail(recipient_email, website_domain, status):
114
- """Sends an email notification to the user when the website is down."""
115
- subject = f"Website Alert: {website_domain} is currently {status}"
116
- body = f"The website {website_domain} is currently unavailable.\nPlease check it as soon as possible.\nIf you think this is a mistake, Contact Us."
117
-
118
- message = MIMEText(body, 'plain')
119
- message['Subject'] = subject
120
- message['From'] = sender_email
121
- message['To'] = recipient_email
122
-
123
- context = ssl.create_default_context()
124
-
125
- try:
126
- with smtplib.SMTP_SSL(smtp_server, smtp_port, context=context) as server:
127
- server.login(sender_email, sender_password)
128
- server.sendmail(sender_email, recipient_email, message.as_string())
129
- mailStatus = f"Sent email notification for {website_domain} to {recipient_email}"
130
- except Exception as e:
131
- mailStatus = f"Error sending email: {e}"
132
- return mailStatus
 
1
+ import psycopg2
2
+ from psycopg2 import sql
3
+ from dotenv import load_dotenv
4
+ import os
5
+ from getStatus import getStatus
6
+ import tldextract
7
+ import smtplib
8
+ from email.mime.text import MIMEText
9
+ import ssl
10
+
11
+ load_dotenv()
12
+ database = os.getenv('POSTGRES_DATABASE')
13
+ user = os.getenv('POSTGRES_USER')
14
+ password = os.getenv('POSTGRES_PASSWORD')
15
+ host = os.getenv('POSTGRES_HOST')
16
+ port = os.getenv('POSTGRES_DATABASE_PORT')
17
+ endpoint_id = os.getenv('ENDPOINT_ID')
18
+ sender_email = os.getenv('EMAIL_ADDRESS')
19
+ sender_password = os.getenv('EMAIL_PASSWORD')
20
+ smtp_server = os.getenv('SMTP_SERVER')
21
+ smtp_port = os.getenv('SMTP_PORT')
22
+
23
+ databaseConn = f"postgresql://{user}:{password}@{host}:{port}/{database}?options=endpoint%3D{endpoint_id}"
24
+
25
+ def insert(domain, email, status, downcount):
26
+ try:
27
+ conn = psycopg2.connect(databaseConn)
28
+ cursor = conn.cursor()
29
+ insertData = """
30
+ INSERT INTO USERDATA (DOMAIN, EMAIL, STATUS, DOWNCOUNT)
31
+ VALUES (%s, %s, %s, %s);
32
+ """
33
+ cursor.execute(insertData, (domain, email, status, downcount))
34
+ conn.commit()
35
+ cursor.close()
36
+ conn.close()
37
+ print(f"Data for {domain} inserted successfully.")
38
+ except Exception as e:
39
+ print(f"Error inserting data for {domain}: {e}")
40
+
41
+ def get(domain):
42
+ try:
43
+ conn = psycopg2.connect(databaseConn)
44
+ cursor = conn.cursor()
45
+ getData = """
46
+ SELECT STATUS, DOWNCOUNT FROM USERDATA WHERE DOMAIN = %s;
47
+ """
48
+ cursor.execute(getData, (domain,))
49
+ existing_data = cursor.fetchone()
50
+ cursor.close()
51
+ conn.close()
52
+ if existing_data:
53
+ return existing_data[1]
54
+ else:
55
+ return None
56
+ except Exception as e:
57
+ print(f"Error retrieving data for {domain}: {e}")
58
+ return None
59
+
60
+ def update(domain, status, downcount):
61
+ try:
62
+ conn = psycopg2.connect(databaseConn)
63
+ cursor = conn.cursor()
64
+ updateData = """
65
+ UPDATE USERDATA SET STATUS = %s, DOWNCOUNT = %s WHERE DOMAIN = %s;
66
+ """
67
+ cursor.execute(updateData, (status, downcount, domain))
68
+ conn.commit()
69
+ cursor.close()
70
+ conn.close()
71
+ print(f"Data for {domain} updated successfully.")
72
+ except Exception as e:
73
+ print(f"Error updating data for {domain}: {e}")
74
+
75
+ def getData(EMAIL, URL, downcount):
76
+ data = getStatus(URL)
77
+ if data[0].startswith("2") or data[0].startswith("3"):
78
+ status = "Up"
79
+ downcount = 0
80
+ else:
81
+ status = "Down"
82
+ downcount += 1
83
+ domainData = tldextract.extract(URL)
84
+ if domainData.subdomain == "":
85
+ domain = domainData.domain + "." + domainData.suffix
86
+ else:
87
+ domain = domainData.subdomain + "." + domainData.domain + "." + domainData.suffix
88
+ email = EMAIL
89
+ return domain, email, status, downcount
90
+
91
+ def saveDataSendMail(URL, email):
92
+ domain, email, status, downcount = getData(email, URL, 0)
93
+ existing_downcount = get(domain)
94
+ if existing_downcount is None:
95
+ existing_downcount = 0
96
+ if status == "Up":
97
+ downcount = 0
98
+ else:
99
+ downcount = existing_downcount + 1
100
+ sendMail(email, domain, status)
101
+ insert(domain, email, status, downcount)
102
+ else:
103
+ if status == "Up":
104
+ downcount = 0
105
+ else:
106
+ downcount = existing_downcount + 1
107
+ sendMail(email, domain, status)
108
+ update(domain, status, downcount)
109
+ print(f"{domain} is currently {status}")
110
+ return email, downcount
111
+
112
+ def sendMail(recipient_email, website_domain, status):
113
+ """Sends an email notification to the user when the website is down."""
114
+ subject = f"Website Alert: {website_domain} is currently {status}"
115
+ body = f"The website {website_domain} is currently unavailable.\nPlease check it as soon as possible.\nIf you think this is a mistake, Contact Us."
116
+
117
+ message = MIMEText(body, 'plain')
118
+ message['Subject'] = subject
119
+ message['From'] = sender_email
120
+ message['To'] = recipient_email
121
+
122
+ context = ssl.create_default_context()
123
+
124
+ try:
125
+ with smtplib.SMTP_SSL(smtp_server, smtp_port, context=context) as server:
126
+ server.login(sender_email, sender_password)
127
+ server.sendmail(sender_email, recipient_email, message.as_string())
128
+ mailStatus = f"Sent email notification for {website_domain} to {recipient_email}"
129
+ except Exception as e:
130
+ mailStatus = f"Error sending email: {e}"
131
+ return mailStatus