diff options
author | sriyasainath | 2017-05-29 14:56:23 +0530 |
---|---|---|
committer | sriyasainath | 2017-05-29 14:56:23 +0530 |
commit | 86041ee8306cd2e5a106c1e8a053f8aeea131f39 (patch) | |
tree | 576591b21f636e6f1b9393e546b1f0e96baaed78 | |
parent | 7279805685a0736d54a7e44091d4c6a3a9a315cc (diff) | |
parent | 817ce63b3f3985113da5256ca905be2b7704702b (diff) | |
download | SBHS-2018-Rpi-86041ee8306cd2e5a106c1e8a053f8aeea131f39.tar.gz SBHS-2018-Rpi-86041ee8306cd2e5a106c1e8a053f8aeea131f39.tar.bz2 SBHS-2018-Rpi-86041ee8306cd2e5a106c1e8a053f8aeea131f39.zip |
Merge branch 'deep' of https://github.com/coderick14/sbhs into deep
-rw-r--r-- | date.txt | 2 | ||||
-rw-r--r-- | experiment/views.py | 8 | ||||
-rw-r--r-- | myadmin/urls.py | 3 | ||||
-rw-r--r-- | myadmin/views.py | 50 | ||||
-rw-r--r-- | templates/admin/index.html | 5 | ||||
-rw-r--r-- | templates/admin/testexp.html | 43 |
6 files changed, 102 insertions, 9 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..e4ab2ab 100644 --- a/experiment/views.py +++ b/experiment/views.py @@ -58,8 +58,12 @@ def initiation(req): key = str(user_board.mid) settings.boards[key]["experiment_id"] = e.id + global_logfile = settings.SBHS_GLOBAL_LOG_DIR + "/" + key + ".log" + with open(global_logfile, "a") as global_loghandler: + data = "\n\n===================New experiment====================\nUsername :", user.username, "\nExperiment Id :", e.id, "\n" + global_loghandler.write(data) + reset(req) - STATUS = 1 MESSAGE = filename @@ -200,7 +204,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..417fbb0 100644 --- a/myadmin/urls.py +++ b/myadmin/urls.py @@ -11,7 +11,8 @@ 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/logs/([0-9]+)/?$', views.download_log, name='admin_logs'), url(r'^admin/toggle_allotment_mode/?$', views.toggle_allotment_mode, name='admin_toggle_allotment_mode'), ]
\ No newline at end of file diff --git a/myadmin/views.py b/myadmin/views.py index 9e9c314..bd896e3 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,54 @@ 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") + +@login_required(redirect_field_name=None) +def download_log(req, mid): + checkadmin(req) + try: + global_logfile = settings.SBHS_GLOBAL_LOG_DIR + "/" + mid + ".log" + f = open(global_logfile, "r") + data = f.read() + f.close() + return HttpResponse(data, content_type='text/text') + except: + return HttpResponse("Requested log file doesn't exist.") + + +@csrf_exempt def reset_device(req): """Resets the device to fan = 100 and heat = 0 Takes mid as paramter diff --git a/templates/admin/index.html b/templates/admin/index.html index 95956f5..3e9ce15 100644 --- a/templates/admin/index.html +++ b/templates/admin/index.html @@ -15,6 +15,8 @@ <th>Board MID</th> <th>Status</th> <th>Webcam</th> + <th>Temperature Profile</th> + <th>Download Logs</th> </tr> </thead> <tbody> @@ -23,7 +25,8 @@ <td>{{ b.mid }}</td> <td><span class="label label-{% if b.online %}success{% else %}important{% endif %}">{% if b.online %}Online{% else %}Offline{% endif %}</span></td> <td><a href="{% url 'webcam_show_video_to_admin' b.mid %}" target="_blank">View image</a></td> - <td><a href="{% url 'admin_profile' b.mid %}">View temperature profile</a></td> + <td><a href="{% url 'admin_profile' b.mid %}">View</a></td> + <td><a href="{% url 'admin_logs' b.mid %}">Download</a></td> </tr> {% endfor %} </tbody> 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 %} |