From 2bb2b5306d15b23a71d586ef65285e330e02dec9 Mon Sep 17 00:00:00 2001 From: coderick14 Date: Fri, 26 May 2017 17:34:54 +0530 Subject: Add admin monitoring feature --- date.txt | 2 +- experiment/views.py | 2 +- myadmin/urls.py | 1 + myadmin/views.py | 37 ++++++++++++++++++++++++++++++++++++- templates/admin/testexp.html | 43 ++++++++++++++++++++++++++++++++++++++++--- 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. @@ -93,6 +93,41 @@ def testing(req): allotment_mode = "Random" if Board.can_do_random_allotment() else "Workshop" 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 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 @@
- chal raha hain bhai +

+

+
@@ -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 = "TimeFanHeatTemp" + request.done(function(data){ + if (data.status_code == 200) { + console.log(data.message.logs.replace("/\n/g", "
")); + document.getElementById("username").innerHTML = "User : " + data.message.user; + document.getElementById("log-data").innerHTML = "
Date Time Heater Fan Temp
" + data.message.logs.replace(new RegExp("\n","g"), "
"); + } + 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); {% endblock %} -- cgit