package zeta.handler.statistic;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
import javax.servlet.ServletException;
import zeta.ZetaServlet;
import zeta.util.CachedQueries;
import zeta.util.DatabaseUtils;
import zeta.util.QueryWithSum;
import zeta.util.Table;
public class TopProducers7DaysHandler extends AbstractHandler {
public TopProducers7DaysHandler(ZetaServlet servlet) {
super(servlet, 1200000, 1200000, 1200000); }
public String createPage(Connection con) throws SQLException, ServletException {
Map names = CachedQueries.getUserNames(con);
StringBuffer buffer = new StringBuffer(70*1024);
HtmlTableGenerator generator = new HtmlTableGeneratorWithSum(servlet, servlet.getHandlerAddress(TopProducersHandler.class), "user");
Table table = new QueryWithSum(names, "SELECT LOWER(c.name) AS \"user\","
+ " COUNT(*) AS \"work units\","
+ " COUNT(DISTINCT workstation_id) AS \"computers used\","
+ " SUM(CAST(a.range AS DECIMAL(15, 0))) AS \"zeros\""
+ " FROM zeta.computation a, zeta.result b, zeta.user c"
+ " WHERE b.stop IS NOT NULL"
+ " AND TIMESTAMPDIFF(4, CAST(CURRENT TIMESTAMP-b.stop AS CHAR(22)))<=10080"
+ " AND a.task_id=b.task_id"
+ " AND a.work_unit_id=b.work_unit_id"
+ " AND a.user_id=c.id"
+ " AND a.server_id=c.server_id"
+ " GROUP BY LOWER(c.name) ORDER BY \"zeros\" DESC", true, null, con, servlet).getResult();
Table userDataTable = CachedQueries.getUserData(con);
if (userDataTable != null && table.getRowCount() > 0 && table.getColumnCount() > 1) {
String user = (String)table.getValue(0, 1);
int userDataIdx = userDataTable.indexOfRow(user, 0);
if (userDataIdx >= 0) {
Object[] userData = userDataTable.getRow(userDataIdx);
Properties properties = new Properties();
if (userData[7] == null) {
userData[7] = "";
}
try {
properties.load(new ByteArrayInputStream(((String)userData[7]).getBytes()));
} catch (IOException ioe) {
}
String s = properties.getProperty("homepage", "");
if (s.length() > 0 || properties.getProperty("freetext", "").length() > 0) {
buffer.append("<tr><td colspan=\"6\" height=\"30pt\" class=\"second-head-gray\"><center>Top producer '");
buffer.append(user);
buffer.append("'</center></td></tr>");
buffer.append("<tr><td colspan=\"6\"><br><center><table cellspacing=\"0\" width=\"90%\" border=\"1\"><colgroup><col width=\"30%\"><col width=\"70%\"></colgroup>");
if (s.length() > 0) {
buffer.append("<tr><td>Homepage </td><td><a href=\"");
buffer.append(s);
buffer.append("\">");
buffer.append(s);
buffer.append("</a></td></tr>");
}
s = properties.getProperty("freetext", "");
if (s.length() > 0) {
buffer.append("<tr bgcolor=\"#eeeeee\"><td colspan=\"2\">");
buffer.append(s);
buffer.append("</td></tr>");
}
buffer.append("</table></center><p>");
}
}
}
buffer.append("<tr><td colspan=\"6\" height=\"30pt\" class=\"second-head-gray\"><center>Top producers of the last 7 days:</center></td></tr>");
buffer.append("<tr><td colspan=\"6\">");
buffer.append("<br><center>");
buffer.append(generator.generate(table));
buffer.append("</center></td></tr>");
return buffer.toString();
}
}