summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcoderick142017-05-26 17:34:54 +0530
committercoderick142017-05-26 17:34:54 +0530
commit2bb2b5306d15b23a71d586ef65285e330e02dec9 (patch)
tree3dd36e079e3ab770ce8092b48fc2580a126465af
parent909763c658b4fff1f7a1697669aa381197f3daee (diff)
downloadSBHS-2018-Rpi-2bb2b5306d15b23a71d586ef65285e330e02dec9.tar.gz
SBHS-2018-Rpi-2bb2b5306d15b23a71d586ef65285e330e02dec9.tar.bz2
SBHS-2018-Rpi-2bb2b5306d15b23a71d586ef65285e330e02dec9.zip
Add admin monitoring feature
-rw-r--r--date.txt2
-rw-r--r--experiment/views.py2
-rw-r--r--myadmin/urls.py1
-rw-r--r--myadmin/views.py37
-rw-r--r--templates/admin/testexp.html43
5 files changed, 79 insertions, 6 deletions
diff --git a/date.txt b/date.txt
index 0ac25fc..79cacdc 100644
--- a/date.txt
+++ b/date.txt
@@ -1 +1 @@
-Fri May 26 00:00:46 IST 2017
+Fri May 26 14:56:51 IST 2017
diff --git a/experiment/views.py b/experiment/views.py
index 685c2e2..cf507a7 100644
--- a/experiment/views.py
+++ b/experiment/views.py
@@ -200,7 +200,7 @@ def log_data(sbhs, mid, experiment_id, heat=None, fan=None, temp=None):
if temp is None:
temp = sbhs.getTemp()
- data = "%d %s %s %s\n" % (int(time.time()), str(heat), str(fan), str(temp))
+ data = "%s %s %s %s\n" % (datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S"), str(heat), str(fan), str(temp))
experiment_logfile = Experiment.objects.get(id=experiment_id).log
global_logfile = settings.SBHS_GLOBAL_LOG_DIR + "/" + str(mid) + ".log"
with open(global_logfile, "a") as global_loghandler, open(experiment_logfile, "a") as experiment_loghandler:
diff --git a/myadmin/urls.py b/myadmin/urls.py
index c1831e5..4e929c7 100644
--- a/myadmin/urls.py
+++ b/myadmin/urls.py
@@ -11,6 +11,7 @@ urlpatterns = [
url(r'^admin/resetdevice/?$', views.reset_device, name='admin_reset_device'),
url(r'^admin/setdevice/?$', views.set_device_params, name='admin_set_device'),
url(r'^admin/gettemp/?$', views.get_device_temp, name='admin_get_temp'),
+ url(r'^admin/monitor/?$', views.monitor_experiment, name='admin_monitor'),
url(r'^admin/toggle_allotment_mode/?$', views.toggle_allotment_mode, name='admin_toggle_allotment_mode'),
diff --git a/myadmin/views.py b/myadmin/views.py
index 9e9c314..b4a4f33 100644
--- a/myadmin/views.py
+++ b/myadmin/views.py
@@ -2,7 +2,7 @@ from django.shortcuts import render, redirect
from django.http import Http404,HttpResponse
from django.contrib.auth.decorators import login_required
from django.views.decorators.csrf import csrf_exempt
-from sbhs_server.tables.models import Board, Booking, Slot
+from sbhs_server.tables.models import Board, Booking, Slot, Experiment
from sbhs_server import settings,sbhs
import subprocess,json,serial,os, datetime
# Create your views here.
@@ -94,6 +94,41 @@ def testing(req):
return render(req, 'admin/testexp.html', {"boards": boards, "allotment_mode": allotment_mode, "mids": current_mids})
@csrf_exempt
+def monitor_experiment(req):
+ checkadmin(req)
+ try:
+ mid = int(req.POST.get("mid"))
+ except Exception as e:
+ return HttpResponse(json.dumps({"status_code":400, "message":"Invalid parameters"}), content_type="application/json")
+
+ now = datetime.datetime.now()
+ current_slot_id = Slot.objects.filter(start_hour=now.hour,
+ start_minute__lt=now.minute,
+ end_minute__gt=now.minute)
+
+ current_slot_id = -1 if not current_slot_id else current_slot_id[0].id
+
+ try:
+ current_booking = Booking.objects.get(slot_id=current_slot_id,
+ booking_date=datetime.date.today(),
+ account__board__mid=mid)
+ except Exception as e:
+ return HttpResponse(json.dumps({"status_code":400, "message":"Invalid MID"}), content_type="application/json")
+
+ current_booking_id, current_user = current_booking.id, current_booking.account.username
+
+ logfile = Experiment.objects.get(booking_id=current_booking_id).log
+
+ # get last 50 lines from logs
+ stdin,stdout = os.popen2("tail -n 10 "+logfile)
+ stdin.close()
+ logs = stdout.readlines(); stdout.close()
+ logs = "".join(logs)
+
+ data = {"user": current_user, "logs": logs}
+ return HttpResponse(json.dumps({"status_code":200, "message":data}), content_type="application/json")
+
+@csrf_exempt
def reset_device(req):
"""Resets the device to fan = 100 and heat = 0
Takes mid as paramter
diff --git a/templates/admin/testexp.html b/templates/admin/testexp.html
index 39291fa..052cfe9 100644
--- a/templates/admin/testexp.html
+++ b/templates/admin/testexp.html
@@ -63,7 +63,9 @@
</div>
<div class="span5" id="monitor-logs">
- <span>chal raha hain bhai</span>
+ <strong><p id="username"></p></strong>
+ <p id="log-data" style="word-spacing: 4em"></p>
+ <button class="btn btn-primary" onclick="getLogs()">Refresh Logs</button>
</div>
</div>
@@ -150,7 +152,7 @@
}
});
}
- var mydata;
+
function getTemp() {
var selected_machine = document.getElementsByClassName("highlight");
if (selected_machine.length == 0) {
@@ -167,7 +169,6 @@
});
request.done(function(data){
- mydata = data;
if (data.status_code == 200) {
document.getElementById("temp").value = data.message;
}
@@ -176,6 +177,42 @@
}
});
}
+
+ function getLogs() {
+ var selected_machine = document.getElementsByClassName("highlight");
+ if (selected_machine.length == 0) {
+ alert("Please select a machine first");
+ return;
+ }
+ var selected_mid = selected_machine[0].getElementsByTagName('td')[0].innerHTML;
+ var request = $.ajax({
+ url : BASE_URL + '/admin/monitor',
+ method : 'POST',
+ data : {
+ 'mid' : selected_mid
+ }
+ });
+
+ header = "<th>Time</th><th>Fan</th><th>Heat</th><th>Temp</th>"
+ request.done(function(data){
+ if (data.status_code == 200) {
+ console.log(data.message.logs.replace("/\n/g", "<br/>"));
+ document.getElementById("username").innerHTML = "User : " + data.message.user;
+ document.getElementById("log-data").innerHTML = "<pre>Date Time Heater Fan Temp</pre>" + data.message.logs.replace(new RegExp("\n","g"), "<br/>");
+ }
+ else {
+ alert(data.status_code);
+ }
+ });
+ }
+
+ // update status of ongoing experiments
+ setInterval(function() {
+ var now = new Date();
+ if (now.getMinutes() == 56 || now.getMinutes() == 1) {
+ location.reload();
+ }
+ }, 60000);
</script>
{% endblock %}