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

📄 serverhitbin.java

📁 国外的一套开源CRM
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * $Id: ServerHitBin.java,v 1.2 2003/09/14 05:36:47 jonesde Exp $
 *
 *  Copyright (c) 2001-2003 The Open For Business Project - www.ofbiz.org
 *
 *  Permission is hereby granted, free of charge, to any person obtaining a
 *  copy of this software and associated documentation files (the "Software"),
 *  to deal in the Software without restriction, including without limitation
 *  the rights to use, copy, modify, merge, publish, distribute, sublicense,
 *  and/or sell copies of the Software, and to permit persons to whom the
 *  Software is furnished to do so, subject to the following conditions:
 *
 *  The above copyright notice and this permission notice shall be included
 *  in all copies or substantial portions of the Software.
 *
 *  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
 *  OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
 *  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
 *  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
 *  CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
 *  OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR
 *  THE USE OR OTHER DEALINGS IN THE SOFTWARE.
 */
package org.ofbiz.content.stats;

import java.net.InetAddress;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import org.ofbiz.base.util.Debug;
import org.ofbiz.base.util.UtilHttp;
import org.ofbiz.base.util.UtilMisc;
import org.ofbiz.base.util.UtilProperties;
import org.ofbiz.entity.GenericDelegator;
import org.ofbiz.entity.GenericEntityException;
import org.ofbiz.entity.GenericValue;

/**
 * <p>Counts server hits and tracks statistics for request, events and views
 * <p>Handles total stats since the server started and binned 
 *  stats according to settings in the serverstats.properties file.
 *
 * @author     <a href="mailto:jonesde@ofbiz.org">David E. Jones</a>
 * @version    $Revision: 1.2 $
 * @since      2.0
 */
public class ServerHitBin {
    // Debug module name
    public static final String module = ServerHitBin.class.getName();

    public static final int REQUEST = 1;
    public static final int EVENT = 2;
    public static final int VIEW = 3;
    public static final int ENTITY = 4;
    public static final int SERVICE = 5;
    public static final String[] typeNames = {"", "Request", "Event", "View", "Entity", "Service"};
    public static final String[] typeIds = {"", "REQUEST", "EVENT", "VIEW", "ENTITY", "SERVICE"};

    public static void countRequest(String id, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin,
        GenericDelegator delegator) {
        countHit(id, REQUEST, request, startTime, runningTime, userLogin, delegator);
    }

    public static void countEvent(String id, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin,
        GenericDelegator delegator) {
        countHit(id, EVENT, request, startTime, runningTime, userLogin, delegator);
    }

    public static void countView(String id, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin,
        GenericDelegator delegator) {
        countHit(id, VIEW, request, startTime, runningTime, userLogin, delegator);
    }

    public static void countEntity(String id, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin,
        GenericDelegator delegator) {
        countHit(id, ENTITY, request, startTime, runningTime, userLogin, delegator);
    }

    public static void countService(String id, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin,
        GenericDelegator delegator) {
        countHit(id, SERVICE, request, startTime, runningTime, userLogin, delegator);
    }

    public static void countHit(String id, int type, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin,
        GenericDelegator delegator) {
        // only count hits if enabled, if not specified defaults to false
        if (!"true".equals(UtilProperties.getPropertyValue("serverstats", "stats.enable." + typeIds[type]))) return;
        countHit(id, type, request, startTime, runningTime, userLogin, delegator, true);
    }

    public static void advanceAllBins(long toTime) {
        advanceAllBins(toTime, requestHistory);
        advanceAllBins(toTime, eventHistory);
        advanceAllBins(toTime, viewHistory);
        advanceAllBins(toTime, entityHistory);
        advanceAllBins(toTime, serviceHistory);
    }

    static void advanceAllBins(long toTime, Map binMap) {
        Iterator entries = binMap.entrySet().iterator();

        while (entries.hasNext()) {
            Map.Entry entry = (Map.Entry) entries.next();

            if (entry.getValue() != null) {
                ServerHitBin bin = (ServerHitBin) entry.getValue();

                bin.advanceBin(toTime);
            }
        }
    }

    protected static void countHit(String id, int type, HttpServletRequest request, long startTime, long runningTime, GenericValue userLogin,
        GenericDelegator delegator, boolean isOriginal) {
        if (delegator == null) {
            throw new IllegalArgumentException("The delgator passed to countHit cannot be null");
        }

        ServerHitBin bin = null;
        LinkedList binList = null;

        switch (type) {
        case REQUEST:
            binList = (LinkedList) requestHistory.get(id);
            break;

        case EVENT:
            binList = (LinkedList) eventHistory.get(id);
            break;

        case VIEW:
            binList = (LinkedList) viewHistory.get(id);
            break;

        case ENTITY:
            binList = (LinkedList) entityHistory.get(id);
            break;

        case SERVICE:
            binList = (LinkedList) serviceHistory.get(id);
            break;
        }

        if (binList == null) {
            synchronized (ServerHitBin.class) {
                switch (type) {
                case REQUEST:
                    binList = (LinkedList) requestHistory.get(id);
                    break;

                case EVENT:
                    binList = (LinkedList) eventHistory.get(id);
                    break;

                case VIEW:
                    binList = (LinkedList) viewHistory.get(id);
                    break;

                case ENTITY:
                    binList = (LinkedList) entityHistory.get(id);
                    break;

                case SERVICE:
                    binList = (LinkedList) serviceHistory.get(id);
                    break;
                }
                if (binList == null) {
                    binList = new LinkedList();
                    switch (type) {
                    case REQUEST:
                        requestHistory.put(id, binList);
                        break;

                    case EVENT:
                        eventHistory.put(id, binList);
                        break;

                    case VIEW:
                        viewHistory.put(id, binList);
                        break;

                    case ENTITY:
                        entityHistory.put(id, binList);
                        break;

                    case SERVICE:
                        serviceHistory.put(id, binList);
                        break;
                    }
                }
            }
        }

        if (binList.size() > 0) {
            bin = (ServerHitBin) binList.getFirst();
        }
        if (bin == null) {
            synchronized (ServerHitBin.class) {
                if (binList.size() > 0) {
                    bin = (ServerHitBin) binList.getFirst();
                }
                if (bin == null) {
                    bin = new ServerHitBin(id, type, true, delegator);
                    binList.addFirst(bin);
                }
            }
        }

        bin.addHit(startTime, runningTime);
        if (isOriginal && !"GLOBAL".equals(id)) {
            bin.saveHit(request, startTime, runningTime, userLogin);
        }

        // count since start global and per id hits
        if (!"GLOBAL".equals(id))
            countHitSinceStart(id, type, startTime, runningTime, isOriginal, delegator);

        // also count hits up the hierarchy if the id contains a '.'
        if (id.indexOf('.') > 0) {
            countHit(id.substring(0, id.lastIndexOf('.')), type, request, startTime, runningTime, userLogin, delegator, false);
        }

        if (isOriginal && !"GLOBAL".equals(id))
            countHit("GLOBAL", type, request, startTime, runningTime, userLogin, delegator, true);
    }

    static void countHitSinceStart(String id, int type, long startTime, long runningTime, boolean isOriginal,
        GenericDelegator delegator) {
        if (delegator == null) {
            throw new IllegalArgumentException("The delgator passed to countHitSinceStart cannot be null");
        }

        ServerHitBin bin = null;

        // save in global, and try to get bin by id
        switch (type) {
        case REQUEST:
            bin = (ServerHitBin) requestSinceStarted.get(id);
            break;

        case EVENT:
            bin = (ServerHitBin) eventSinceStarted.get(id);
            break;

        case VIEW:
            bin = (ServerHitBin) viewSinceStarted.get(id);
            break;

        case ENTITY:
            bin = (ServerHitBin) entitySinceStarted.get(id);
            break;

        case SERVICE:
            bin = (ServerHitBin) serviceSinceStarted.get(id);
            break;
        }

        if (bin == null) {
            synchronized (ServerHitBin.class) {
                switch (type) {
                case REQUEST:
                    bin = (ServerHitBin) requestSinceStarted.get(id);
                    break;

                case EVENT:
                    bin = (ServerHitBin) eventSinceStarted.get(id);
                    break;

                case VIEW:
                    bin = (ServerHitBin) viewSinceStarted.get(id);
                    break;

                case ENTITY:
                    bin = (ServerHitBin) entitySinceStarted.get(id);
                    break;

                case SERVICE:
                    bin = (ServerHitBin) serviceSinceStarted.get(id);
                    break;
                }

                if (bin == null) {
                    bin = new ServerHitBin(id, type, false, delegator);
                    switch (type) {
                    case REQUEST:
                        requestSinceStarted.put(id, bin);
                        break;

                    case EVENT:
                        eventSinceStarted.put(id, bin);
                        break;

                    case VIEW:
                        viewSinceStarted.put(id, bin);
                        break;

                    case ENTITY:
                        entitySinceStarted.put(id, bin);
                        break;

                    case SERVICE:
                        serviceSinceStarted.put(id, bin);
                        break;
                    }
                }
            }
        }

        bin.addHit(startTime, runningTime);

        if (isOriginal)
            countHitSinceStart("GLOBAL", type, startTime, runningTime, false, delegator);
    }

    // these Maps contain Lists of ServerHitBin objects by id, the most recent is first in the list
    public static Map requestHistory = new HashMap();
    public static Map eventHistory = new HashMap();
    public static Map viewHistory = new HashMap();
    public static Map entityHistory = new HashMap();
    public static Map serviceHistory = new HashMap();

    // these Maps contain ServerHitBin objects by id
    public static Map requestSinceStarted = new HashMap();
    public static Map eventSinceStarted = new HashMap();
    public static Map viewSinceStarted = new HashMap();
    public static Map entitySinceStarted = new HashMap();
    public static Map serviceSinceStarted = new HashMap();

    GenericDelegator delegator;
    String delegatorName;
    String id;

⌨️ 快捷键说明

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