Skip to content

Commit

Permalink
implement get_node_monitor_status()
Browse files Browse the repository at this point in the history
  • Loading branch information
louisevelayo committed Nov 16, 2023
1 parent 7fca29a commit 7ca8dfb
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 8 deletions.
3 changes: 2 additions & 1 deletion node_monitor/load_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@
DB_PORT = os.environ.get('DB_PORT', '')
FEEDBACK_FORM_URL = os.environ.get('FEEDBACK_FORM_URL', '')
NODE_MONITOR_URL = os.environ.get('NODE_MONITOR_URL', '')
EMAIL_ADMINS_LIST = os.environ.get('EMAIL_ADMINS_LIST', '')
email_admins_list = os.environ.get('EMAIL_ADMINS_LIST', '')
EMAIL_ADMINS_LIST = email_admins_list.split(',')


## Pre-flight check
Expand Down
22 changes: 19 additions & 3 deletions node_monitor_tracker/node_monitor_tracker.py
Original file line number Diff line number Diff line change
@@ -1,17 +1,33 @@
import requests
from typing import List
from node_monitor.bot_email import EmailBot

class NodeMonitorTracker:
def __init__(self, email_bot: EmailBot, recipients: List[str]) -> None:
def __init__(
self,
email_bot: EmailBot,
recipients: List[str],
node_monitor_url: str) -> None:
self.email_bot = email_bot
self.recipients = recipients
self.node_monitor_url = node_monitor_url

def send_notification(self) -> None:
subject = "🚨 Node Monitor is Down 🚨"
body = "Node Monitor is down. Restart required immediately!"
self.email_bot.send_emails(self.recipients, subject, body)

def check_server_status(self) -> bool:
raise NotImplementedError
def check_node_monitor_status(self) -> bool:
try:
response = requests.get(self.node_monitor_url)
data = response.json()

if data['status'] == 'offline':
self.send_notification()
else:
print('Server is online.')

except Exception as e:
print(f"An error occurred: {e}")


11 changes: 7 additions & 4 deletions tests/test_node_monitor_tracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,19 @@
from unittest.mock import patch, Mock
from node_monitor_tracker.node_monitor_tracker import NodeMonitorTracker
from node_monitor.bot_email import EmailBot
import node_monitor.load_config as c

@patch("requests.get")
def test_check_server_status(mock_get):
mock_node_monitor_tracker = Mock(spec=NodeMonitorTracker)
mock_email_bot = Mock(spec=EmailBot)
node_monitor_tracker = NodeMonitorTracker(
mock_email_bot, c.EMAIL_ADMINS_LIST, c.NODE_MONITOR_URL )

mock_response = Mock()
mock_response.json.return_value = {"status": "offline"}
mock_get.return_value = mock_response

mock_node_monitor_tracker.check_server_status()
node_monitor_tracker.check_node_monitor_status()

assert mock_get.assert_called_once_with("insert dummy URL here")
assert mock_node_monitor_tracker.send_notification.call_count == 1
mock_get.assert_called_once_with(c.NODE_MONITOR_URL)
assert mock_email_bot.send_emails.call_count == 1

0 comments on commit 7ca8dfb

Please sign in to comment.