diff options
author | coderick14 | 2017-05-26 17:34:54 +0530 |
---|---|---|
committer | coderick14 | 2017-05-26 17:34:54 +0530 |
commit | 2bb2b5306d15b23a71d586ef65285e330e02dec9 (patch) | |
tree | 3dd36e079e3ab770ce8092b48fc2580a126465af | |
parent | 909763c658b4fff1f7a1697669aa381197f3daee (diff) | |
download | SBHS-2018-Rpi-2bb2b5306d15b23a71d586ef65285e330e02dec9.tar.gz SBHS-2018-Rpi-2bb2b5306d15b23a71d586ef65285e330e02dec9.tar.bz2 SBHS-2018-Rpi-2bb2b5306d15b23a71d586ef65285e330e02dec9.zip |
Add admin monitoring feature
-rw-r--r-- | date.txt | 2 | ||||
-rw-r--r-- | experiment/views.py | 2 | ||||
-rw-r--r-- | myadmin/urls.py | 1 | ||||
-rw-r--r-- | myadmin/views.py | 37 | ||||
-rw-r--r-- | templates/admin/testexp.html | 43 |
5 files changed, 79 insertions, 6 deletions
@@ -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 %} |