diff --git a/gracedb/reports.py b/gracedb/reports.py index 68541a84062266ca15a4b45da4f8d3bce4360491..db4c634f3ef53dbbc9a5cee304b43545adfa0795 100644 --- a/gracedb/reports.py +++ b/gracedb/reports.py @@ -4,7 +4,10 @@ from django.template import RequestContext from django.shortcuts import render_to_response from django.conf import settings -import os +from gracedb.models import Event +from django.db.models import Q + +import os, datetime, json, time def histo(request): @@ -36,6 +39,45 @@ def histo(request): {'table': table, 'ifar' : ifar, 'uptime' : uptime, + 'rate' : json.dumps(rate_data(request)), }, context_instance=RequestContext(request)) +def rate_data(request): + # XXX there is a better way -- should be using group_by or something. + # WAAY too many queries (~300) going on here. + now = datetime.datetime.now() + day = datetime.timedelta(1) + + ts_min = now - 60 * day + ts_max = now + ts_step = day + window_size = day + + types = [ + ("LM", Q(analysisType="LM")), + ("Omega", Q(analysisType="Omega")), + ("CWB", Q(analysisType="CWB")), + ("MBTA", Q(analysisType="MBTA")), + ("total", Q()), + ] + + ts = ts_min + n = 1 + series = dict([(name, []) for (name,_) in types]) + while ts <= ts_max: + for atype, q in types: + series[atype].append( + { + "x": ts.strftime("%s"), + "y": Event.objects.filter(q).filter(created__range=(ts, ts+day)).exclude(group__name="Test").count(), + }) + ts += ts_step + n += 1 + + # [ (ts, event_count( ts - window_size, ts) / window_size) + # for ts in range(ts_min, ts_max, ts_step) ] + + return series + + diff --git a/templates/gracedb/histogram.html b/templates/gracedb/histogram.html index c168d8bde8455930290f40e81e6a5430833e7748..70a258c5b4523c9b95eb9cd2a508bb27093fbc33 100644 --- a/templates/gracedb/histogram.html +++ b/templates/gracedb/histogram.html @@ -16,11 +16,71 @@ function toggle(id) { } } </script> + +<script src="http://ajax.googleapis.com/ajax/libs/dojo/1.7.1/dojo/dojo.js" + data-dojo-config="async: true, isDebug: false, parseOnLoad: true"> +</script> + +<script> + {% if rate %} + timeData = {{ rate|safe }}; + {% else %} + timeData = [ + { x: 1, y: 1 }, + { x: 2, y: 3 }, + { x: 3, y: 2 }, + { x: 4, y: 4 }, + { x: 5, y: 5 }, + { x: 6, y: 6 }, + { x: 7, y: 7 } + ]; + {% endif %} + + require([ + "dojo/parser", + "dojox/charting/Chart", + "dojox/charting/themes/Claro", // Shrooms, Tom + "dojox/charting/plot2d/Lines", + "dojox/charting/widget/Legend", + "dojox/charting/axis2d/Default", + "dojo/domReady!" + ], function (parser, Chart, theme, Lines, Legend ) { + + var chart = new Chart("CN"); + + function xlabel(n) { + console.log("Got: " + n); + var dt = new Date(); + dt.setTime(1000*n); + return (dt.getMonth()+1)+"/"+dt.getDate()+"/"+dt.getFullYear(); + }; + + chart.setTheme(theme); + chart.addPlot("default", { + type: Lines, + }); + chart.addAxis("x", {labelFunc:xlabel}); + chart.addAxis("y", { vertical: true }); + + chart.addSeries("Total", timeData['total']); + chart.addSeries("Low Mass", timeData['LM']); + chart.addSeries("Omega", timeData['Omega']); + chart.addSeries("MBTA", timeData['MBTA']); + chart.addSeries("cWB", timeData['CWB']); + + chart.render(); + + var legend = new Legend({ chart: chart }, "leg1"); + } + ); +</script> + + {% endblock %} {% block content %} <br/> - + <a name="latency" href="javascript:toggle('latency');"><h3>Latency</h3></a> <div id="latency" style="display:none;"> @@ -59,6 +119,18 @@ function toggle(id) { {% endif %} </div> +<br/> +<br/> + +<a name="rate" href="javascript:toggle('rate');"><h3>Submission Rates</h3></a> +<div id="rate" style="display: block;"> +{% if rate %} + <div id="CN" style="width: 750px; height: 450px;"></div> + <div id="leg1"></div> +{% else %} + No rate charts. +{% endif %} +</div> {% endblock %}