summaryrefslogtreecommitdiff
path: root/maintenance
diff options
context:
space:
mode:
Diffstat (limited to 'maintenance')
-rw-r--r--maintenance/__init__.py0
-rw-r--r--maintenance/admin.py6
-rw-r--r--maintenance/apps.py8
-rw-r--r--maintenance/health_monitor.py78
-rw-r--r--maintenance/migrations/__init__.py0
-rw-r--r--maintenance/models.py6
-rw-r--r--maintenance/tests.py6
-rw-r--r--maintenance/views.py6
8 files changed, 110 insertions, 0 deletions
diff --git a/maintenance/__init__.py b/maintenance/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/maintenance/__init__.py
diff --git a/maintenance/admin.py b/maintenance/admin.py
new file mode 100644
index 0000000..13be29d
--- /dev/null
+++ b/maintenance/admin.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.contrib import admin
+
+# Register your models here.
diff --git a/maintenance/apps.py b/maintenance/apps.py
new file mode 100644
index 0000000..4262aa8
--- /dev/null
+++ b/maintenance/apps.py
@@ -0,0 +1,8 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.apps import AppConfig
+
+
+class MaintenanceConfig(AppConfig):
+ name = 'maintenance'
diff --git a/maintenance/health_monitor.py b/maintenance/health_monitor.py
new file mode 100644
index 0000000..87946b2
--- /dev/null
+++ b/maintenance/health_monitor.py
@@ -0,0 +1,78 @@
+import os, serial, smtplib
+from time import sleep
+from sbhs_server.credentials import ADMIN_EMAIL
+from sbhs_server.helpers import mailer
+
+MAX_PORTS = 256
+MIN_TEMP = 10
+MAX_TEMP = 70
+
+def write_to_port(s, com, arg):
+ s.write(chr(int(com)))
+ sleep(0.5)
+ s.write(chr(int(arg)))
+ sleep(0.5)
+
+def read_from_port(s, com):
+ s.write(chr(int(com)))
+ sleep(0.5)
+ if com == 255:
+ result = ord(s.read(1)) + (0.1 * ord(s.read(1)))
+ elif com == 252:
+ result = ord(s.read(1))
+ else:
+ result = -1
+ sleep(0.5)
+ return result
+
+def create_message(check_mids, defective_ports):
+ msg = ''
+ if len(check_mids) != 0:
+ msg += 'Please check the following machine ids :\n'
+ for i,mid in enumerate(check_mids):
+ msg = msg + str(i) + '. ' + str(mid) + '\n'
+ if len(defective_ports) != 0:
+ msg = msg + '\nPlease check the following ports :\n'
+ for port in defective_ports:
+ msg = msg + str(port) + '\n'
+ return msg
+
+def main():
+ present_online_mids, offline_mids, defective_ports = [], [], []
+ for i in range(0,MAX_PORTS):
+ path = '/dev/ttyUSB' + str(i)
+ if os.path.exists(path):
+ try:
+ s = serial.Serial(port=path, baudrate=9600, bytesize=8, parity='N', stopbits=1, timeout=2)
+ if not s.is_open:
+ s.open()
+ assert s.is_open
+ mid = read_from_port(s, 252) # get machine id
+ assert mid > 0
+ write_to_port(s, 253, 100) # set fan speed
+ write_to_port(s, 254, 0) # set heater value
+ current_temp = read_from_port(s, 255) # get current temperature
+ assert current_temp >= MIN_TEMP and current_temp <= MAX_TEMP
+ present_online_mids.append(mid)
+ except:
+ if s.is_open:
+ if mid > 0:
+ offline_mids.append(mid)
+ else:
+ defective_ports.append(path)
+ if s.is_open:
+ s.close()
+ check_mids = list(set(online_mids).difference(set(present_online_mids)))
+ msg = create_message(check_mids, defective_ports)
+ if len(msg) == 0:
+ msg = "Nothing out of order was detected on the server. :)"
+ #thread.start_new_thread(mailer.email, (ADMIN_EMAIL, "Health report of SBHS Server", msg))
+ mailer.email(ADMIN_EMAIL, "Health report of SBHS Server", msg)
+ #print msg
+
+if __name__ == "__main__":
+ main()
+
+
+
+
diff --git a/maintenance/migrations/__init__.py b/maintenance/migrations/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/maintenance/migrations/__init__.py
diff --git a/maintenance/models.py b/maintenance/models.py
new file mode 100644
index 0000000..1dfab76
--- /dev/null
+++ b/maintenance/models.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.db import models
+
+# Create your models here.
diff --git a/maintenance/tests.py b/maintenance/tests.py
new file mode 100644
index 0000000..5982e6b
--- /dev/null
+++ b/maintenance/tests.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.test import TestCase
+
+# Create your tests here.
diff --git a/maintenance/views.py b/maintenance/views.py
new file mode 100644
index 0000000..e784a0b
--- /dev/null
+++ b/maintenance/views.py
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+from __future__ import unicode_literals
+
+from django.shortcuts import render
+
+# Create your views here.