Wicket SeverAndClientTimeFilter

本文介绍了一个用于Wicket框架的性能监控过滤器,该过滤器能够测量客户端解析时间,并记录服务器响应时间和响应大小。

package wicket.markup.html;
import java.util.HashMap;
import java.util.Map;

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

import wicket.Application;
import wicket.IResponseFilter;
import wicket.RequestCycle;
import wicket.Session;
import wicket.model.Model;
import wicket.util.string.AppendingStringBuffer;
import wicket.util.string.JavascriptUtils;

/**
 * This is a filter that injects javascript code to the top head portion and
 * after the body so that the time can me measured what the client parse time
 * was for this page. It also reports the total server parse/response time in
 * the client and logs the server response time and response size it took for a
 * specific response in the server log.
 *
 * You can specify what the status text should be like this:
 * ServerAndClientTimeFilter.statustext=My Application, Server parsetime:
 * ${servertime}, Client parsetime: ${clienttime}
 * likewise for ajax request use ajax.ServerAndClientTimeFilter.statustext
 *
 * @author jcompagner
 */
public class ServerAndClientTimeFilter implements IResponseFilter
{
        private static Log log = LogFactory.getLog(ServerAndClientTimeFilter.class);

        /**
         * @see wicket.IResponseFilter#filter(java.lang.StringBuffer)
         */
        public AppendingStringBuffer filter(AppendingStringBuffer responseBuffer)
        {
                int headIndex = responseBuffer.indexOf("<head>");
                int bodyIndex = responseBuffer.indexOf("</body>");
                int ajaxStart=responseBuffer.indexOf("<ajax-response>");
                int ajaxEnd=responseBuffer.indexOf("</ajax-response>");
                long timeTaken = System.currentTimeMillis() -
RequestCycle.get().getStartTime();
                if(headIndex != -1 && bodyIndex != -1)
                {
                        AppendingStringBuffer endScript = new AppendingStringBuffer(150);
                        endScript.append("\n").append(JavascriptUtils.SCRIPT_OPEN_TAG);
                        endScript.append("\nwindow.defaultStatus='");
                        endScript.append(getStatusString(timeTaken,
"ServerAndClientTimeFilter.statustext"));
                        endScript.append("';\n").append(JavascriptUtils.SCRIPT_CLOSE_TAG).append("\n");
                        responseBuffer.insert(bodyIndex - 1, endScript);
                        responseBuffer.insert(headIndex + 6, "\n" + JavascriptUtils.SCRIPT_OPEN_TAG
                                        + "\nvar clientTimeVariable = new Date().getTime();\n"
                                        + JavascriptUtils.SCRIPT_CLOSE_TAG + "\n");
                }
                else if(ajaxStart !=-1 && ajaxEnd!=-1)
                {
                        AppendingStringBuffer startScript = new AppendingStringBuffer(250);
                        startScript.append("<evaluate><![CDATA[window.defaultStatus='");
                        startScript.append(getStatusString(timeTaken,
"ajax.ServerAndClientTimeFilter.statustext"));
                        startScript.append("';]]></evaluate>");
                        responseBuffer.insert(ajaxEnd,startScript.toString());
                        responseBuffer.insert(ajaxStart+15,
"<evaluate><![CDATA[clientTimeVariable = new
Date().getTime();]]></evaluate>");
                }
                log.info( timeTaken + "ms server time taken for request " +
RequestCycle.get().getRequest().getURL() + " response size: " +
responseBuffer.length());
                return responseBuffer;
        }

        /**
         * Returns a locale specific status message about the server and client time.
         * @param timeTaken the server time it took
         * @param resourceKey The key for the locale specific string lookup
         * @return String with the status message
         */
        private String getStatusString(long timeTaken, String resourceKey)
        {
                Map<String,String> map = new HashMap<String,String>(4);
                map.put("clienttime", "' + (new Date().getTime() -
clientTimeVariable)/1000 +  's");
                map.put("servertime", ((double)timeTaken) / 1000 + "s");
                AppendingStringBuffer defaultValue = new AppendingStringBuffer(128);
                defaultValue.append("Server parsetime: ");
                defaultValue.append(((double)timeTaken) / 1000);
                defaultValue
                                .append("s, Client parsetime: ' + (new Date().getTime() -
clientTimeVariable)/1000 +  's");
                String txt = Application.get().getResourceSettings().getLocalizer().getString(
                                resourceKey, null, Model.valueOf(map),
                                Session.get().getLocale(), Session.get().getStyle(),
defaultValue.toString());
                return txt;
        }

}

六自由度机械臂ANN人工神经网络设计:正向逆向运动学求解、正向动力学控制、拉格朗日-欧拉法推导逆向动力学方程(Matlab代码实现)内容概要:本文档围绕六自由度机械臂的ANN人工神经网络设计展开,详细介绍了正向与逆向运动学求解、正向动力学控制以及基于拉格朗日-欧拉法推导逆向动力学方程的理论与Matlab代码实现过程。文档还涵盖了PINN物理信息神经网络在微分方程求解、主动噪声控制、天线分析、电动汽车调度、储能优化等多个工程与科研领域的应用案例,并提供了丰富的Matlab/Simulink仿真资源和技术支持方向,体现了其在多学科交叉仿真与优化中的综合性价值。; 适合人群:具备一定Matlab编程基础,从事机器人控制、自动化、智能制造、电力系统或相关工程领域研究的科研人员、研究生及工程师。; 使用场景及目标:①掌握六自由度机械臂的运动学与动力学建模方法;②学习人工神经网络在复杂非线性系统控制中的应用;③借助Matlab实现动力学方程推导与仿真验证;④拓展至路径规划、优化调度、信号处理等相关课题的研究与复现。; 阅读建议:建议按目录顺序系统学习,重点关注机械臂建模与神经网络控制部分的代码实现,结合提供的网盘资源进行实践操作,并参考文中列举的优化算法与仿真方法拓展自身研究思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值