From b8e6e8474ba42509445933bf033e4e6c4981eb73 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 ++++++++++++++++++++++++++++++++++++- new.csv | 2 ++ templates/admin/testexp.html | 43 ++++++++++++++++++++++++++++++++++++++++--- 6 files changed, 81 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/new.csv b/new.csv index d8b8930..43da5b7 100644 --- a/new.csv +++ b/new.csv @@ -4695,3 +4695,5 @@ 2017-05-25 23:58:31.794913 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True 2017-05-25 23:58:55.790097 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False 2017-05-26 00:00:46.763190 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True +2017-05-26 14:55:45.419017 True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True True +2017-05-26 14:56:51.481469 False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False False True 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