diff --git a/watcher/app.py b/watcher/app.py index 2ce46ee..6ce918e 100644 --- a/watcher/app.py +++ b/watcher/app.py @@ -1,7 +1,14 @@ -from time import time +import asyncio +import atexit +import datetime +import socket +from functools import lru_cache +from time import sleep, time +import matplotlib.pyplot as plt import socketio -from flask import Flask, render_template +from apscheduler.schedulers.background import BackgroundScheduler +from flask import Flask, render_template, request from flask_cors import CORS sio = socketio.Server() @@ -20,6 +27,9 @@ app.wsgi_app = socketio.WSGIApp(sio, app.wsgi_app) db = {"current_run": None, "run_start_timer": None, "run_data": {}} +function_times = [] +function_data = [] + @app.route("/") def index(): @@ -38,18 +48,26 @@ def start_run(run_index): return f'Run {run_index} started at {starttime}' -@app.route("/link/start//") -def link_start(run, index): +@app.route("/link/start//") +def link_start(run, link_index): + start = time() + request_data = live_request(run, link_index) + sio.emit('live_request', request_data) + if db["current_run"] != run: - return "Wrong run number, check that you update your run", 404 + response = "Wrong run number, check that you update your run", 404 else: run_data = db["run_data"][run]["data"] - if index in run_data: - return "you already started in this run. Ignoring this request." + if link_index in run_data: + response = "you already started in this run. Ignoring this request." else: - run_data[index] = {"id": index, "start": time()} - sio.emit('link_start', run_data[index]) - return "Success." + run_data[link_index] = {"id": link_index, "start": time()} + sio.emit('link_start', run_data[link_index]) + response = "Success." + stop = time() + function_data.append(stop - start) + function_times.append(len(function_times)) + return response @app.route("/link/handoff//") @@ -73,5 +91,34 @@ def connect(sid, data): sio.emit('sync_current_run', current_run, room=sid) +def live_request(run, index): + ip = request.remote_addr + request_data = {} + request_data["hostname"] = lookup_hostname(ip) + request_data["time"] = time() + return request_data + + +@lru_cache() +def lookup_hostname(ip): + return socket.gethostbyaddr(ip)[0].split(".")[0] + + +# def plot_graph(): +# try: +# x = function_times +# y = function_data + +# plt.plot(x, y) +# plt.show() +# except: +# pass + if __name__ == '__main__': + # scheduler = BackgroundScheduler() + # scheduler.add_job(func=plot_graph, trigger="interval", seconds=5) + # scheduler.start() app.run(host="0.0.0.0", debug=True) + + # shut down the scheduler when exiting the app + # atexit.register(lambda: scheduler.shutdown()) diff --git a/watcher/requirements.txt b/watcher/requirements.txt index 426a190..5fe90f2 100644 --- a/watcher/requirements.txt +++ b/watcher/requirements.txt @@ -1,3 +1,5 @@ flask flask-cors python-socketio +apscheduler +matplotlib diff --git a/watcher/static/index.js b/watcher/static/index.js index ce44fc9..37bc8dd 100644 --- a/watcher/static/index.js +++ b/watcher/static/index.js @@ -43,8 +43,31 @@ require(['jquery', 'socket.io'], function(jq, io) { addLink(link_id, run_data["data"][link_id]); } }); + socket.on('live_request', function(request_data) { + console.log("live request"); + request_time = new Date(request_data["time"] * 1000); + addLiveRequest(request_data["hostname"], request_time); + }); }); + function addLiveRequest(request_host, request_time) { + let hostname = request_host; + let timesting = request_time.getHours() + ":" + request_time.getMinutes(); + + let html = ` +
+
+ ${hostname} +
+
+ ${timesting} +
+
+ `; + $('#live_requests').prepend($(html)); + + } + function addLink(link_id, link_data) { let stop = "handoff" in link_data; diff --git a/watcher/templates/index.html b/watcher/templates/index.html index 5c2c47b..cfd49cc 100644 --- a/watcher/templates/index.html +++ b/watcher/templates/index.html @@ -64,11 +64,26 @@ -
-
live requests
+
+
+
+ Hostname +
+
+ Time +
+
Live Requests
+
+
+ Hostname +
+
+ +
+