📄 stats-dashboard.jsp
字号:
<%@ page import="org.jivesoftware.openfire.archive.Conversation" %><%@ page import="org.jivesoftware.openfire.archive.ConversationManager" %><%@ page import="org.jivesoftware.openfire.reporting.graph.GraphEngine" %><%@ page import="org.jivesoftware.openfire.reporting.stats.StatisticsModule" %><%@ page import="org.jivesoftware.openfire.reporting.stats.StatsAction"%><%@ page import="org.jivesoftware.openfire.reporting.stats.StatsViewer"%><%@ page import="org.jivesoftware.openfire.user.UserNameManager"%><%@ page import="org.jivesoftware.openfire.user.UserNotFoundException"%><%@ page import="org.jivesoftware.util.CookieUtils"%><%@ page import="org.jivesoftware.util.LocaleUtils"%><%@ page import="org.jivesoftware.util.StringUtils"%><%@ page import="org.xmpp.packet.JID"%><%@ page import="javax.servlet.http.Cookie"%><%@ page import="java.net.URLEncoder"%><%@ page import="java.util.*"%><%@ page import="org.jivesoftware.openfire.XMPPServer" %><%@ page import="org.jivesoftware.openfire.plugin.MonitoringPlugin" %><%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %><%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %><% String sessionKey = StatisticsModule.SESSIONS_KEY; MonitoringPlugin plugin = (MonitoringPlugin) XMPPServer.getInstance().getPluginManager().getPlugin("monitoring"); ConversationManager conversationManager = (ConversationManager)plugin.getModule(ConversationManager.class); StatsViewer viewer = (StatsViewer)plugin.getModule(StatsViewer.class); String timePeriod = "last60minutes"; Cookie timePeriodCookie = CookieUtils.getCookie(request, COOKIE_TIMEPERIOD); if (timePeriodCookie != null) { String cookieValue = timePeriodCookie.getValue(); timePeriod = cookieValue; }%><html><head> <title><fmt:message key="admin.sidebar.statistics.name" /></title> <meta name="pageID" content="statistics"/> <script src="/js/prototype.js" type="text/javascript"></script> <script src="/js/scriptaculous.js" type="text/javascript"></script> <script src="dwr/engine.js" type="text/javascript" ></script> <script src="dwr/util.js" type="text/javascript" ></script> <script src="dwr/interface/Stats.js" type="text/javascript"></script> <style type="text/css"> .stats-description { color : black; font-size : 18px; font-weight : bold; } .stats-current { color : #555555; font-size : 20px; font-weight : bold; } .stat { border : 1px; border-color : #ccc; border-style : solid; background-color : #fffBe2; -moz-border-radius: 5px; } .stat_selected { border : 1px; border-color : #f6ab4d; border-style : solid; background-color : #fffBc2; -moz-border-radius: 5px; } .stat_enlarge_link { display: block; position: relative; margin: 4px 0px 2px 6px; padding-left: 18px; background: url(images/reports_dash-expand-small.gif) no-repeat; font-size: 11px; } .stat_shrink_link { position: relative; margin: 4px 0px 2px 6px; padding-left: 18px; background: url(images/reports_dash-contract-small.gif) no-repeat; font-size: 11px; } .timeControl { border : 1px; border-color : #ccc; border-style : solid; background-color : white; } .wrapper { border : 1px; border-color : #ccc; border-style : solid; -moz-border-radius: 5px; } .quickstats { border: 1px solid #cccccc; border-bottom: none; } .quickstats thead th { background-color: #eeeeee; text-align: left; padding: 3px; border-bottom: 1px solid #cccccc; } .quickstats tbody td { padding: 6px; border-bottom: 1px solid #cccccc; font-size: 11px; } .conversation { border-bottom : 1px; border-top : 0px; border-right : 0px; border-left : 0px; border-color : #ccc; border-style : solid; } .conversation table td { font-size: 11px; } conv-users, conv-messages { float: left; display: block; text-decoration: none; }</style><style type="text/css"> @import "style/style.css";</style></head><body><script type="text/javascript">PeriodicalExecuter.prototype.registerCallback = function() { this.intervalID = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);}PeriodicalExecuter.prototype.stop = function() { clearInterval(this.intervalID);}DWREngine.setErrorHandler(handleError);window.onerror = handleError;function handleError() { // swallow errors: probably caused by the server being down}var peStats = new PeriodicalExecuter(statsUpdater, 30);var currentTimePeriod = '<%= timePeriod %>';function statsUpdater() { try { Stats.getUpdatedStats(currentTimePeriod, updateStats); } catch(err) { // swallow errors }}function changeTimePeriod(period) { if (currentTimePeriod != period) { $(currentTimePeriod).className = ''; $(period).className = 'timeControl'; currentTimePeriod = period; createCookie("<%= COOKIE_TIMEPERIOD %>",currentTimePeriod,1000); Stats.getUpdatedStats(currentTimePeriod, updateStats); }}function updateStats(stats) { for (var stat in stats) { updateTable(stat, stats[stat]); if (stat == 'conversations' || stat == 'packet_count' || stat == 'sessions') { updateGraph('sparklines-' + stat, 'stat=' + stat + '&sparkline=true'); } else { updateGraph('sparklines-' + stat, 'stat=' + stat + '&sparkline=true&color=dark'); } }}function updateTable(id, data) { $(id + '.low').innerHTML = data.low; $(id + '.high').innerHTML = data.high; if ($(id + '.count') != undefined) { $(id + '.count').innerHTML = data.count; }}function updateGraph(graphid, graphkey) { var d = new Date(); var t = d.getTime() $(graphid).src = 'graph?' + graphkey + '&t=' + t + "&timeperiod=" + currentTimePeriod + "&format=png"; statParam = graphkey.split('&'); statName = statParam[0].split('='); if (isSnapshotDetailVisible && currentSnapshot == statName[1]) { viewElement = $('snapshot-detail-image'); viewElement.src = 'graph?stat=' + statName[1] + '&t=' + t + '&timeperiod=' + currentTimePeriod + '&width=700&height=250&format=png' }}var lastConversationID = 0;var getConversationsDelay = 10000;var insertConversationsDelay = 2000;var peGetConversations;var peInsertConversations;var conversations = new Array();function startupConversations() { conversationUpdater(); peGetConversations = new PeriodicalExecuter(conversationUpdater, getConversationsDelay/1000);}function conversationUpdater() { Stats.getNLatestConversations(6, lastConversationID, updateConversations);}function updateConversations(data) { // list of map objects with users, lastactivity, messages keys if (data.length > 0) { for (var i=0; i<data.length; i++) { conversations[conversations.length] = data[i]; } lastConversationID = conversations[conversations.length -1].conversationid; } // adjust insert frequency based on how many are in the queue if (data.length > 0 && Math.round(getConversationsDelay/(data.length)) > 2000) { insertConversationsDelay = Math.round(10000/(data.length)); } else { insertConversationsDelay = 2000; } if (peInsertConversations) { peInsertConversations.stop(); } peInsertConversations = new PeriodicalExecuter(insertConversation, insertConversationsDelay/1000);}function insertConversation() { if (conversations.length > 0) { if ($('conversations-scroller-none') != undefined) { Element.hide('conversations-scroller-none'); Element.show('conversations-scroller'); } var conversation = conversations.shift(); convTableID = 'conversations-scroller'; var tbody = $(convTableID); var rows = tbody.getElementsByTagName("div"); for (var i = rows.length-1; i > 0; i--) { rows[i].innerHTML = rows[i-1].innerHTML; } newRow = document.createElement("div"); newRow.setAttribute("class", "conversation"); newRow.setAttribute('conversationid', conversation.conversationid); users = conversation.users; userString = ''; for (i=0; i<users.length; i++) { userString += users[i] + "<br />"; } newRowHTML = '<table cellspacing="0" cellpadding="0" border="0">' +
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -