⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 monitordata.java

📁 xwiki 源码
💻 JAVA
字号:
/**
 * ===================================================================
 *
 * Copyright (c) 2003,2004 Ludovic Dubost, All rights reserved.
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details, published at 
 * http://www.gnu.org/copyleft/lesser.html or in lesser.txt in the
 * root folder of this distribution.

 * Created by
 * User: Ludovic Dubost
 * Date: 3 d閏. 2004
 * Time: 17:39:48
 */
package com.xpn.xwiki.monitor.api;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import java.util.*;
import java.net.URL;

public class MonitorData {
    private static final Log log = LogFactory.getLog(MonitorData.class);

    private URL url;
    private String wikiPage;
    private String action;
    private String threadName;
    private Date startTime;
    private Date endTime;

    private Map timers = new HashMap();
    private Map timerSummaries = new HashMap();
    private List timerList = new ArrayList();

    public MonitorData(String wikiPage, String action, URL url, String threadName) {
        this.setWikiPage(wikiPage);
        this.setURL(url);
        this.setThreadName(threadName);
        this.setStartTime(new Date());
        this.setAction(action);
    }

    public void startRequest(String page, URL url) {
        setWikiPage(page);
        setURL(url);
        setStartTime(new Date());
    }

    public void endRequest() {
        endRequest(true);
    }

    public void endRequest(boolean normal) {
        setEndTime(new Date());
        log();
    }

    public URL getURL() {
        return url;
    }

    public void setURL(URL url) {
        this.url = url;
    }

    public String getWikiPage() {
        return wikiPage;
    }

    public void setWikiPage(String page) {
        this.wikiPage = page;
    }

    public Date getStartTime() {
        return startTime;
    }

    public void setStartTime(Date startTime) {
        this.startTime = startTime;
    }

    public Date getEndTime() {
        return endTime;
    }

    public void setEndTime(Date endTime) {
        this.endTime = endTime;
    }

    public long getDuration() {
        return (endTime.getTime()-startTime.getTime());
    }

    public long getDuration(String timer) {
        MonitorTimerSummary tsummary = (MonitorTimerSummary) timerSummaries.get(timer);
        if (tsummary==null)
         return 0;
        else
         return tsummary.getDuration();
    }

    public void startTimer(String timername, String details) {

        if (startTime==null)
            return;

        MonitorTimer timer;
        timer = (MonitorTimer)timers.get(timername);
        if (timer!=null) {
          if (log.isInfoEnabled()) {
              log.info("MONITOR: error recursive timers for " + timername);
          }
        } else {
          timer = new MonitorTimer(timername, details);
          timer.setStartDate();
          timers.put(timername, timer);
        }
    }

    public void startTimer(String timername) {
        startTimer(timername, null);
    }

    public void setTimerDetails(String timername, String details) {
        MonitorTimer timer;
        timer = (MonitorTimer)timers.get(timername);
        if (timer==null) {
          if (log.isInfoEnabled()) {
              log.info("MONITOR: could not find timer for " + timername);
          }
        } else {
            timer.setDetails(details);
        }
    }

    public void endTimer(String timername) {
        if (startTime==null)
            return;

        MonitorTimer timer;
        timer = (MonitorTimer)timers.get(timername);
        if (timer==null) {
          if (log.isInfoEnabled()) {
              log.info("MONITOR: could not find timer for " + timername);
          }
        } else {
          timer.setEndDate();
          if (timer.getDetails()!=null)
           timerList.add(timer);
          timers.remove(timername);
          MonitorTimerSummary tsummary = (MonitorTimerSummary) timerSummaries.get(timername);
          if (tsummary==null) {
              tsummary = new MonitorTimerSummary(timername);
              timerSummaries.put(timername, tsummary);
          }
          tsummary.addTimer(timer.getDuration());
            if (log.isDebugEnabled()) {
                   log.debug("MONITOR " + wikiPage + " " + action + " " + timer.getName() + ": " + timer.getDuration() + "ms " + timer.getDetails());
            }
        }
    }

    public List getTimerList() {
        return timerList;
    }

    public Map getTimerSummaries() {
        return timerSummaries;
    }

    public void log() {
        if (log.isWarnEnabled()) {
            log.warn("MONITOR " + wikiPage + ": " + getDuration() + "ms");
        }
        if (log.isInfoEnabled()) {
            Iterator it = timerSummaries.values().iterator();
            while (it.hasNext()) {
                MonitorTimerSummary tsummary = (MonitorTimerSummary) it.next();
               log.info("MONITOR " + wikiPage + " " + action + " " + tsummary.getName() + ": " + tsummary.getDuration() + "ms " + tsummary.getNbCalls());
            }
        }
    }

    public String getThreadName() {
        return threadName;
    }

    public void setThreadName(String threadName) {
        this.threadName = threadName;
    }

    public long getNbCalls(String timer) {
        MonitorTimerSummary tsummary = (MonitorTimerSummary) timerSummaries.get(timer);
        if (tsummary==null)
         return 0;
        else
         return tsummary.getNbCalls();
    }
    
    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public String toString() {
        StringBuffer  str = new StringBuffer();
        str.append("WikiPage: ");
        str.append(wikiPage);
        str.append(" Action: ");
        str.append(action);
        str.append(" URL: ");
        str.append(url.toString());
        str.append(" Thread: ");
        str.append(threadName);
        str.append(" StartTime: " + startTime);
        str.append(" EndTime: " + endTime);
        str.append(getTimerSummaries());
        str.append(getTimerList());
        return str.toString();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -