[jetrix-cvs] SF.net SVN: jetrix:[742] monitor/trunk/src/main
Brought to you by:
smanux
From: <sm...@us...> - 2008-08-26 13:31:19
|
Revision: 742 http://jetrix.svn.sourceforge.net/jetrix/?rev=742&view=rev Author: smanux Date: 2008-08-26 13:31:14 +0000 (Tue, 26 Aug 2008) Log Message: ----------- Added the player stats Modified Paths: -------------- monitor/trunk/src/main/java/net/jetrix/monitor/StyleUtils.java monitor/trunk/src/main/java/net/jetrix/monitor/job/ServerSurveyJob.java monitor/trunk/src/main/resources/applicationContext.xml monitor/trunk/src/main/resources/hibernate-mapping.xml monitor/trunk/src/main/webapp/server.jsp Added Paths: ----------- monitor/trunk/src/main/java/net/jetrix/monitor/PlayerStats.java monitor/trunk/src/main/java/net/jetrix/monitor/dao/PlayerStatsDao.java monitor/trunk/src/main/webapp/player.jsp Added: monitor/trunk/src/main/java/net/jetrix/monitor/PlayerStats.java =================================================================== --- monitor/trunk/src/main/java/net/jetrix/monitor/PlayerStats.java (rev 0) +++ monitor/trunk/src/main/java/net/jetrix/monitor/PlayerStats.java 2008-08-26 13:31:14 UTC (rev 742) @@ -0,0 +1,115 @@ +/** + * Jetrix TetriNET Server + * Copyright (C) 2008 Emmanuel Bourg + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package net.jetrix.monitor; + +import java.util.Date; + +/** + * @author Emmanuel Bourg + * @version $Revision$, $Date$ + */ +public class PlayerStats +{ + private String name; + private String team; + private String channel; + private Date firstSeen; + private Date lastSeen; + private Date lastPlayed; + private ServerInfo lastServer; + + public String getName() + { + return name; + } + + public void setName(String name) + { + this.name = name; + } + + public String getTeam() + { + return team; + } + + public void setTeam(String team) + { + this.team = team; + } + + public String getChannel() + { + return channel; + } + + public void setChannel(String channel) + { + this.channel = channel; + } + + public Date getFirstSeen() + { + return firstSeen; + } + + public void setFirstSeen(Date firstSeen) + { + this.firstSeen = firstSeen; + } + + public Date getLastSeen() + { + return lastSeen; + } + + public void setLastSeen(Date lastSeen) + { + this.lastSeen = lastSeen; + } + + public Date getLastPlayed() + { + return lastPlayed; + } + + public void setLastPlayed(Date lastPlayed) + { + this.lastPlayed = lastPlayed; + } + + public ServerInfo getLastServer() + { + return lastServer; + } + + public void setLastServer(ServerInfo lastServer) + { + this.lastServer = lastServer; + } + + /** + * Tells if the player has been active in the last 15 minutes. + */ + public boolean isActive() + { + return lastPlayed != null && lastPlayed.getTime() > System.currentTimeMillis() - 15 * 60 * 1000; + } +} Property changes on: monitor/trunk/src/main/java/net/jetrix/monitor/PlayerStats.java ___________________________________________________________________ Added: svn:keywords + Date Author Id Revision HeadURL Added: svn:eol-style + native Modified: monitor/trunk/src/main/java/net/jetrix/monitor/StyleUtils.java =================================================================== --- monitor/trunk/src/main/java/net/jetrix/monitor/StyleUtils.java 2008-08-26 13:28:21 UTC (rev 741) +++ monitor/trunk/src/main/java/net/jetrix/monitor/StyleUtils.java 2008-08-26 13:31:14 UTC (rev 742) @@ -91,4 +91,24 @@ return result.toString(); } + + /** + * Remove the style markers from the specified string. + * + * @param text + */ + public static String strip(String text) + { + StringBuilder result = new StringBuilder(); + + for (char c : text.toCharArray()) + { + if (!STYLES.keySet().contains(c)) + { + result.append(c); + } + } + + return result.toString(); + } } Added: monitor/trunk/src/main/java/net/jetrix/monitor/dao/PlayerStatsDao.java =================================================================== --- monitor/trunk/src/main/java/net/jetrix/monitor/dao/PlayerStatsDao.java (rev 0) +++ monitor/trunk/src/main/java/net/jetrix/monitor/dao/PlayerStatsDao.java 2008-08-26 13:31:14 UTC (rev 742) @@ -0,0 +1,41 @@ +/** + * Jetrix TetriNET Server + * Copyright (C) 2008 Emmanuel Bourg + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + */ + +package net.jetrix.monitor.dao; + +import org.springframework.orm.hibernate3.support.HibernateDaoSupport; + +import net.jetrix.monitor.PlayerStats; + +/** + * @author Emmanuel Bourg + * @version $Revision$, $Date$ + */ +public class PlayerStatsDao extends HibernateDaoSupport +{ + public PlayerStats getStats(String name) + { + return (PlayerStats) getSession().get(PlayerStats.class, name); + } + + public void save(PlayerStats stats) + { + getSession().saveOrUpdate(stats); + } +} Property changes on: monitor/trunk/src/main/java/net/jetrix/monitor/dao/PlayerStatsDao.java ___________________________________________________________________ Added: svn:keywords + Date Author Id Revision HeadURL Added: svn:eol-style + native Modified: monitor/trunk/src/main/java/net/jetrix/monitor/job/ServerSurveyJob.java =================================================================== --- monitor/trunk/src/main/java/net/jetrix/monitor/job/ServerSurveyJob.java 2008-08-26 13:28:21 UTC (rev 741) +++ monitor/trunk/src/main/java/net/jetrix/monitor/job/ServerSurveyJob.java 2008-08-26 13:31:14 UTC (rev 742) @@ -37,11 +37,14 @@ import net.jetrix.agent.QueryAgent; import net.jetrix.agent.QueryInfo; +import net.jetrix.agent.PlayerInfo; import net.jetrix.monitor.NetworkUtils; import net.jetrix.monitor.ServerInfo; import net.jetrix.monitor.ServerStats; +import net.jetrix.monitor.PlayerStats; import net.jetrix.monitor.dao.ServerInfoDao; import net.jetrix.monitor.dao.ServerStatsDao; +import net.jetrix.monitor.dao.PlayerStatsDao; /** * Job polling the tetrinet servers. @@ -56,6 +59,7 @@ ApplicationContext context = (ApplicationContext) jobExecutionContext.getMergedJobDataMap().get("applicationContext"); ServerInfoDao serverInfoDao = (ServerInfoDao) context.getBean("serverInfoDao"); ServerStatsDao serverStatsDao = (ServerStatsDao) context.getBean("serverStatsDao"); + PlayerStatsDao playerStatsDao = (PlayerStatsDao) context.getBean("playerStatsDao"); List<ServerInfo> servers = serverInfoDao.getServers(); @@ -76,10 +80,16 @@ for (Future<ServerInfo> result : results) { - try { + try + { ServerInfo server = result.get(); + if (!server.isOnline()) + { + server.getPlayers().clear(); + } serverInfoDao.save(server); + // update the server stats for the activity graph ServerStats stats = server.getStats(); stats.setServerId(server.getId()); stats.setDate(server.getLastChecked()); @@ -87,9 +97,35 @@ { serverStatsDao.save(stats); } - } catch (ExecutionException e) { + + // update the player stats + for (PlayerInfo player : server.getPlayers()) + { + PlayerStats playerStats = playerStatsDao.getStats(player.getNick()); + if (playerStats == null) + { + playerStats = new PlayerStats(); + playerStats.setName(player.getNick()); + playerStats.setFirstSeen(server.getLastOnline()); + } + + playerStats.setTeam(player.getTeam()); + playerStats.setLastSeen(server.getLastOnline()); + playerStats.setLastServer(server); + if (player.isPlaying()) + { + playerStats.setLastPlayed(server.getLastOnline()); + } + + playerStatsDao.save(playerStats); + } + } + catch (ExecutionException e) + { log.log(Level.WARNING, "Error when checking the server", e); - } catch (CancellationException e) { + } + catch (CancellationException e) + { log.log(Level.WARNING, "Server survey task cancelled", e); } } Modified: monitor/trunk/src/main/resources/applicationContext.xml =================================================================== --- monitor/trunk/src/main/resources/applicationContext.xml 2008-08-26 13:28:21 UTC (rev 741) +++ monitor/trunk/src/main/resources/applicationContext.xml 2008-08-26 13:31:14 UTC (rev 742) @@ -37,6 +37,7 @@ <bean id="serverInfoDao" class="net.jetrix.monitor.dao.ServerInfoDao"/> <bean id="serverStatsDao" class="net.jetrix.monitor.dao.ServerStatsDao"/> + <bean id="playerStatsDao" class="net.jetrix.monitor.dao.PlayerStatsDao"/> <bean id="ipToCountryDao" class="net.jetrix.monitor.dao.IpToCountryDao"/> </beans> Modified: monitor/trunk/src/main/resources/hibernate-mapping.xml =================================================================== --- monitor/trunk/src/main/resources/hibernate-mapping.xml 2008-08-26 13:28:21 UTC (rev 741) +++ monitor/trunk/src/main/resources/hibernate-mapping.xml 2008-08-26 13:31:14 UTC (rev 742) @@ -11,9 +11,10 @@ <property name="IP" column="ip"/> <property name="version" column="version"/> <property name="description" column="description"/> - <property name="spectate" column="spec" not-null="true"/> <property name="country" column="country"/> <property name="website" column="website"/> + <property name="spectate" column="spec" not-null="true"/> + <property name="spectatorPassword" column="spec_pass"/> <property name="dateAdded" column="date_added"/> <property name="lastChecked" column="last_checked"/> @@ -77,4 +78,17 @@ <property name="activeChannelCount" column="active_channel_count" not-null="true"/> </class> + <class name="net.jetrix.monitor.PlayerStats" table="player_stat"> + <id name="name" column="name"> + <generator class="assigned"/> + </id> + <many-to-one name="lastServer" column="server"/> + <property name="channel" column="channel"/> + <property name="team" column="team"/> + + <property name="firstSeen" column="first_seen"/> + <property name="lastSeen" column="last_seen"/> + <property name="lastPlayed" column="last_played"/> + </class> + </hibernate-mapping> Added: monitor/trunk/src/main/webapp/player.jsp =================================================================== --- monitor/trunk/src/main/webapp/player.jsp (rev 0) +++ monitor/trunk/src/main/webapp/player.jsp 2008-08-26 13:31:14 UTC (rev 742) @@ -0,0 +1,52 @@ +<%@ page import="org.springframework.web.context.ContextLoader" %> +<%@ page import="org.springframework.web.context.WebApplicationContext" %> +<%@ page import="net.jetrix.monitor.PlayerStats" %> +<%@ page import="net.jetrix.monitor.dao.PlayerStatsDao" %> +<%@ page import="net.jetrix.monitor.StyleUtils" %> +<% + WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext(); + PlayerStatsDao dao = (PlayerStatsDao) context.getBean("playerStatsDao"); + + PlayerStats player = dao.getStats(request.getParameter("id")); + +%> +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<html> +<head> + <title>TetriNET Player - <%= StyleUtils.strip(player.getName()) %></title> + <link rel="stylesheet" type="text/css" href="stylesheets/style.css"> + <link rel="Shorcut Icon" href="favicon.ico"> +</head> +<body> + +<h1>TetriNET Player - <%= StyleUtils.strip(player.getName()) %></h1> + +<table class="thin" border="1" cellspacing="0" style="min-width: 40%"> + <tr> + <th width="25%">First Seen</th> + <td><%= player.getFirstSeen() %></td> + </tr> + <tr> + <th>Last Seen</th> + <td><%= player.getLastSeen() %></td> + </tr> + <tr> + <th>Last Played</th> + <td><%= player.getLastPlayed() != null ? player.getLastPlayed() : "-" %></td> + </tr> + <tr> + <th>Server</th> + <td><a href="server.jsp?id=<%= player.getLastServer().getId() %>"><%= player.getLastServer().getHostname() %></a></td> + </tr> + <tr> + <th>Channel</th> + <td><%= player.getChannel() != null ? player.getChannel() : "" %></td> + </tr> + <tr> + <th>Team</th> + <td><%= player.getTeam() != null ? player.getTeam() : "" %></td> + </tr> +</table> + +</body> +</html> Modified: monitor/trunk/src/main/webapp/server.jsp =================================================================== --- monitor/trunk/src/main/webapp/server.jsp 2008-08-26 13:28:21 UTC (rev 741) +++ monitor/trunk/src/main/webapp/server.jsp 2008-08-26 13:31:14 UTC (rev 742) @@ -130,7 +130,7 @@ <tbody> <% for (PlayerInfo player : server.getPlayers()) { %> <tr> - <td<%= player.getAuthenticationLevel() > 1 ? " style=\"font-weight: bold\"" : "" %>><%= StyleUtils.toHTML(player.getNick()) %></td> + <td<%= player.getAuthenticationLevel() > 1 ? " style=\"font-weight: bold\"" : "" %>><a style="text-decoration: none; color: black" href="player.jsp?id=<%= player.getNick() %>"><%= StyleUtils.toHTML(player.getNick()) %></a></td> <td><%= StyleUtils.toHTML(player.getTeam()) %></td> <td><%= player.getChannel() %></td> <td><%= player.getSlot() %></td> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |