mirror of https://github.com/mchr3k/org.intrace
161 lines
5.7 KiB
Plaintext
161 lines
5.7 KiB
Plaintext
<%@ page import="javax.jdo.PersistenceManager" %>
|
|
<%@ page import="javax.jdo.Query" %>
|
|
<%@ page import="org.gaecounter.data.Counter" %>
|
|
<%@ page import="org.gaecounter.data.Counter.Type" %>
|
|
<%@ page import="org.gaecounter.data.PMF" %>
|
|
<%@ page import="org.gaecounter.Utils" %>
|
|
<%@ page import="java.util.List" %>
|
|
<%@ page import="java.util.ArrayList" %>
|
|
<%@ page import="java.util.Iterator" %>
|
|
<%@ page import="java.util.Map" %>
|
|
<%@ page import="java.util.Map.Entry" %>
|
|
<%@ page import="java.util.HashMap" %>
|
|
<%@ page import="java.util.Collections" %>
|
|
<%@ page import="java.util.Set" %>
|
|
<%@ page import="java.util.HashSet" %>
|
|
<%@ page import="org.joda.time.DateTime" %>
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<title>Downloads</title>
|
|
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
|
|
<script type="text/javascript">
|
|
google.load('visualization', '1', {packages: ['corechart']});
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<%
|
|
// Set type
|
|
Type lType = Type.DAY;
|
|
|
|
// Check type
|
|
String lModeStr = request.getParameter("mode");
|
|
if ("month".equals(lModeStr))
|
|
{
|
|
lType = Type.MONTH;
|
|
}
|
|
else if ("year".equals(lModeStr))
|
|
{
|
|
lType = Type.YEAR;
|
|
}
|
|
|
|
// Fetch data
|
|
List<Counter> lRecords = Counter.getAllByType(lType);
|
|
|
|
// Filename -> DateStr -> Count
|
|
Map<String,Map<String,Integer>> lPerDateStrDownloads = Counter.getPerFilePerDateMap(lRecords);
|
|
|
|
// Date strings
|
|
Set<String> dateStrsSet = new HashSet<String>();
|
|
for (String file : lPerDateStrDownloads.keySet())
|
|
{
|
|
dateStrsSet.addAll(lPerDateStrDownloads.get(file).keySet());
|
|
}
|
|
DateTime lNow = new DateTime();
|
|
List<String> dateStrs = Counter.getDateStrs(lType,
|
|
lType.getPartial(lNow.getYear(), lNow.getMonthOfYear(), lNow.getDayOfMonth()),
|
|
dateStrsSet);
|
|
%>
|
|
<script type="text/javascript">
|
|
function drawVisualization() {
|
|
// Raw data
|
|
var filenames =
|
|
[<%Iterator<String> lFiles = lPerDateStrDownloads.keySet().iterator(); while (lFiles.hasNext()) {%>
|
|
'<%=lFiles.next()%>'<%=(lFiles.hasNext() ? "," : "")%>
|
|
<%}%>];
|
|
var datestrs =
|
|
[<%Iterator<String> dateStrsIter = dateStrs.iterator(); while (dateStrsIter.hasNext()) {%>
|
|
'<%=dateStrsIter.next()%>'<%=(dateStrsIter.hasNext() ? "," : "")%>
|
|
<%}%>];
|
|
var downloadsByFile =
|
|
[
|
|
<%Iterator<Entry<String,Map<String,Integer>>> iter = lPerDateStrDownloads.entrySet().iterator();
|
|
while (iter.hasNext()) {
|
|
Entry<String,Map<String,Integer>> entry = iter.next();
|
|
Map<String,Integer> perDateCount = entry.getValue();
|
|
dateStrsIter = dateStrs.iterator();%>
|
|
[
|
|
<%while(dateStrsIter.hasNext()) {
|
|
String dateStr = dateStrsIter.next();
|
|
Integer lVal = perDateCount.get(dateStr);
|
|
if (lVal == null) lVal = 0;%>
|
|
<%=lVal%><%=(dateStrsIter.hasNext() ? "," : "")%>
|
|
<%}%>
|
|
]<%=(iter.hasNext() ? "," : "")%> // <%=entry.getKey()%>
|
|
<%}%>
|
|
];
|
|
|
|
// Create and populate the data table.
|
|
var data = new google.visualization.DataTable();
|
|
|
|
// Prepare columns
|
|
data.addColumn('string', 'Date');
|
|
for (var i = 0; i < filenames.length; ++i) {
|
|
data.addColumn('number', filenames[i]);
|
|
}
|
|
|
|
// Fill in datestr strings
|
|
data.addRows(datestrs.length);
|
|
for (var i = 0; i < datestrs.length; ++i) {
|
|
data.setCell(i, 0, datestrs[i]);
|
|
}
|
|
|
|
// Fill in download data
|
|
for (var i = 0; i < filenames.length; ++i) {
|
|
var downloads = downloadsByFile[i];
|
|
for (var datestr = 0; datestr < datestrs.length; ++datestr) {
|
|
data.setCell(datestr, i + 1, downloads[datestr]);
|
|
}
|
|
}
|
|
|
|
// Create and draw the visualization.
|
|
var ac = new google.visualization.AreaChart(document.getElementById('visualization'));
|
|
ac.draw(data, {
|
|
title : 'Downloads by Date',
|
|
isStacked: true,
|
|
//width: 600,
|
|
height: 400,
|
|
vAxis: {title: "Downloads"},
|
|
hAxis: {title: "Date"}
|
|
});
|
|
}
|
|
|
|
google.setOnLoadCallback(drawVisualization);
|
|
</script>
|
|
|
|
<script>
|
|
function doClearFile(fileName)
|
|
{ window.location.href = "action?action=clearfile&file=" + fileName + "&redir=downloads.jsp"; }
|
|
|
|
function doClear()
|
|
{ window.location.href = "action?action=clear&redir=downloads.jsp"; }
|
|
|
|
function doTestData()
|
|
{ window.location.href = "action?action=testdata&redir=downloads.jsp"; }
|
|
|
|
function setMode(mode)
|
|
{ window.location.href = "downloads.jsp?mode=" + mode; }
|
|
</script>
|
|
<input type="submit" value="Year" onclick="setMode('year')" />
|
|
<input type="submit" value="Month" onclick="setMode('month')" />
|
|
<input type="submit" value="Day" onclick="setMode('day')" /><br>
|
|
<div style="width: 100%;" id="visualization"></div>
|
|
<table>
|
|
<tr>
|
|
<td>Filename</td>
|
|
<td></td>
|
|
</tr>
|
|
<%
|
|
for (Entry<String,Map<String,Integer>> entry : lPerDateStrDownloads.entrySet()) {
|
|
%>
|
|
<tr>
|
|
<td><%=entry.getKey()%></td>
|
|
<td><input type="submit" value="Clear File" onclick="doClearFile('<%=Utils.enc(entry.getKey())%>')" /></td>
|
|
</tr>
|
|
<% } %>
|
|
</table><br>
|
|
<input type="submit" value="Clear All Data (<%=lPerDateStrDownloads.keySet().size()%> Files)" onclick="doClear()" />
|
|
<br><br><br>
|
|
<input type="submit" value="Create Test Data" onclick="doTestData()" />
|
|
</body>
|
|
</html> |