通过Java程序获取Dynatrace数据

标签: 性能测试 测试工具 测试架构 | 发表时间:2012-05-29 12:49 | 作者:yunshuai
出处:http://qa.taobao.com

“dynaTrace Ajax是一个详细的底层追踪工具,它不仅可以显示所有请求和文件在网络中传输的时间,还会记录浏览器Render、CPU消耗、JavaScript解析和运行情况等详细的信息,而这些也只是dynaTrace Ajax的冰山一角。 ”——Stoyan Stefanov

showslow平台同样采集了dynatrace的数据,所以做为kelude平台前端页面测试组件,同样要支持dynatrace数据的获取,该代码由云晰同学编写维护:

public void execute(HttpServletRequest request,Context context)throws IOException, JSONException{

String str=(String)request.getAttribute(“dynatraceJson”);
JSONObject jsonObject =JSONObject.fromObject(str);

try {
if ((null!=str) && (null!=jsonObject.getString(“url”)) && null!=jsonObject.getString(“ranks”)
&& null!=jsonObject.getString(“rank”) )
{

Integer urlId = frontServiceManager.getUrlId(jsonObject.getString(“url”));

if (urlId > 0){

JSONObject ranksObject = JSONObject.fromObject(jsonObject.getString(“ranks”));

DynatraceDO dynatraceDO = new DynatraceDO();
String version=jsonObject.containsKey(“version”)?jsonObject.getString(“version”):null;
dynatraceDO.setVersion(version);
dynatraceDO.setUrlId(urlId);
dynatraceDO.setRank(getJsonValue(jsonObject,”rank”,null,1));
dynatraceDO.setCache(getJsonValue(ranksObject,”cache”,”rank”,2));
dynatraceDO.setNet(getJsonValue(ranksObject,”net”,”rank”,2));
dynatraceDO.setServer(getJsonValue(ranksObject,”server”,”rank”,2));
dynatraceDO.setJs(getJsonValue(ranksObject,”js”,”rank”,2));
dynatraceDO.setTimetoimpression(getJsonValue(jsonObject,”timetoimpression”,null,1));
dynatraceDO.setTimetoonload(getJsonValue(jsonObject,”timetoonload”,null,1));
dynatraceDO.setTimetofullload(getJsonValue(jsonObject,”timetofullload”,null,1));
dynatraceDO.setReqnumber(getJsonValue(jsonObject,”reqnumber”,null,1));
dynatraceDO.setXhrnumber(getJsonValue(jsonObject,”xhrnumber”,null,1));
dynatraceDO.setPagesize(getJsonValue(jsonObject,”pagesize”,null,1));
dynatraceDO.setCachablesize(getJsonValue(jsonObject,”cachablesize”,null,1));
dynatraceDO.setNoncachablesize(getJsonValue(jsonObject,”noncachablesize”,null,1));
dynatraceDO.setTimeonnetwork(getJsonValue(jsonObject,”timeonnetwork”,null,1));
dynatraceDO.setTimeinjs(getJsonValue(jsonObject,”timeinjs”,null,1));
dynatraceDO.setTimeinrendering(getJsonValue(jsonObject,”timeinrendering”,null,1));
dynatraceDO.setTimeonserver(getJsonValue(jsonObject,”timeonserver”,null,1));
dynatraceDO.setTimeonclient(getJsonValue(jsonObject,”timeonclient”,null,1));
dynatraceDO.setDetails(str);

if(autoURLManager.isKelude(jsonObject.getString(“url”))) {
ProjectUrlsDO projectUrlsDO= new ProjectUrlsDO();
projectUrlsDO.setProjectId(18460);
projectUrlsDO.setUrlId(urlId);
projectUrlsDO.setScenarioName(urlId.toString());
projectUrlsDO.setStatus(1);

if (null != frontServiceManager.getProjectUrls(projectUrlsDO))
frontServiceManager.updateProjectUrls(projectUrlsDO);
else
frontServiceManager.insertProjectUrls(projectUrlsDO);
} else if (autoURLManager.isURLExist(jsonObject.getString(“url”), “20650″)) {
ProjectUrlsDO projectUrlsDO= new ProjectUrlsDO();
projectUrlsDO.setProjectId(20650);
projectUrlsDO.setUrlId(urlId);
projectUrlsDO.setScenarioName(urlId.toString());
projectUrlsDO.setStatus(1);

if (null != frontServiceManager.getProjectUrls(projectUrlsDO))
frontServiceManager.updateProjectUrls(projectUrlsDO);
else
frontServiceManager.insertProjectUrls(projectUrlsDO);
}

Integer dynatraceId = frontServiceManager.insertDynatrace(dynatraceDO);
if (dynatraceId > 0){
frontServiceManager.updateUrlAggregates(urlId, dynatraceId, 3);
logger.warn(“Success received Dynatrace Data! postdata:”+str+” IP:”+getRemortIP(request));
}
}
}else{
//papResponse.setFailed(“接收Dynatrace数据失败”);
logger.error(“Failed received Yslow data! postdata:”+str+” IP:”+getRemortIP(request));
}
} catch (Exception e) {
e.printStackTrace();
}finally{
}

备注:在获取dynatrace数据时,需要考虑各字段为空的情况,修改dynatrace上传的方式为:

修改Dynatrace执行文件目录下的配置文件,dtajax.ini,添加如下配置:
-Dcom.dynatrace.diagnostics.ajax.beacon.uploadurl=http://kelude.taobao.net/perf/front/dynatrace.do
-Dcom.dynatrace.diagnostics.ajax.beacon.portalurl=http://kelude.taobao.net/perf/front/frontQuery.htm

云帅(顾永刚)

淘宝(中国)软件有限公司 技术质量部-测试平台与发展-压测工具

相关 [java 程序 dynatrace] 推荐:

通过Java程序获取Dynatrace数据

- - Taobao QA Team
“dynaTrace Ajax是一个详细的底层追踪工具,它不仅可以显示所有请求和文件在网络中传输的时间,还会记录浏览器Render、CPU消耗、JavaScript解析和运行情况等详细的信息,而这些也只是dynaTrace Ajax的冰山一角. showslow平台同样采集了dynatrace的数据,所以做为kelude平台前端页面测试组件,同样要支持dynatrace数据的获取,该代码由云晰同学编写维护:.

Java调用外部程序技巧

- d0ngd0ng - 我自然
前些天使用Java调用外部程序的时候,发现线程会堵塞在waitfor()方法. 如果直接在Shell中调用这个程序,程序会很快结束,不会僵死. 为什么会堵塞呢,原因是当调用exec(cmd)后,JVM会启动一个子进程,该进程会与JVM进程建立3个管道连接,标准输入,标准输出和标准错误流. 假设该程序不断在向标准输出流和标准错误流写数据,而JVM不读取,数据会暂时缓冲在Linux的缓冲区,缓冲区满后该程序将无法继续写数据,会僵死,所以Java程序就会僵死在waitfor(),永远无法结束.

Java程序员常用工具集

- - BlogJava-庄周梦蝶
    我发现很多人没办法高效地解决问题的关键原因是不熟悉工具,不熟悉工具也还罢了,甚至还不知道怎么去找工具,这个问题就大条了. 我想列下我能想到的一个Java程序员会用到的常用工具. 1.IDE: Eclipse或者 IDEA,熟悉尽可能多的快捷键,《 Eclipse常见快捷键列表》. (1) Findbugs,在release之前进行一次静态代码检查是必须的.

Java系统程序员修炼之道

- - 博客 - 伯乐在线
从2002开始接触Java学会HelloWorld这么经典的程序到如今不知不觉已经十年啦,十年中亲耳听到过不少大牛的演讲,见到过项目中的神人在键盘上运指如飞的编程速度,当时就被震撼了. 当编程越来越成体力活,我们还能有自己的思想,还能修炼为Java系统级别的 程序员嘛. 学习与修炼以下知识与技能,帮你早日达成愿望.

Java程序挂掉的几种可能

- - Java译站
今天花了一整天在跟踪一个问题,每次感觉已经快找到原因的时候发现现象又变了,我觉得从中吸取的教训可以给大家分享一下. 为了重现这个现象,我写了一个简单的例子. 在本例中,先初始化了一个map,然后用一个无限循环将一些键值对插入到map里面:. 你可能也猜到了,这段代码编译执行后无法正常结束. 我会在终端中看到java.lang.OutOfMemoryError: GC overhead limit exceeded的异常信息.

准确的java程序性能测试

- - ITeye博客
原创文章,转载请指明出处: http://aub.iteye.com/blog/2124974 , 尊重他人即尊重自己. 1.避免垃圾回收对结果造成的误差. 方案一:JVM启动时使用-verbose:gc观察垃圾回收动作,确认整个测试期间垃圾回收根本不会执行. 方案二:运行足够的次数和时间,这样测试程序能够充分的反应出运行期间分配与垃圾回收的开销(推荐).

Java多线程程序的测试

- - 四火的唠叨
这个问题最初来自于一封公司内部的话题探讨邮件,再加上了一些我的理解. 首先,需要明确的是,用Java通常构建多线程安全的程序“非常”困难,如果还没有体会到“非常”的话,阅读《Java Concurrency in Practice》(中文名叫做《Java并发编程实战》,在我的 书单里面,我认为它基本是最好的系统介绍Java并发的书了)可能可以改变你的看法.

Java程序性能优化技巧

- - CSDN博客推荐文章
如果循环次数很多,循环体内代码处理不好问题就会被放大. for(int i=0;i

Java程序员的现代RPC指南

- - CSDN博客推荐文章
Java程序员的现代RPC指南. 最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦. 于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大作业里凡是涉及到分布式通信的都用RMI,真是方便. 后来用上了Spring,发现Spring提供了好多Exporter,可以无侵入地将一个POJO暴露为RPC服务.

极简Java连接TimesTen程序

- - CSDN博客推荐文章
TimesTen支持用JDBC连接,这是一个非常吸引人的特性,这意味着连接TimesTen的代码和连接传统的关系型数据库的代码几乎没有区别. 其实根本的原因在于TimesTen也是关系型数据库,只不过在内存运行而已,对于SQL-92标准完全支持,因此开发者的学习成本非常之低. 事实上,TimesTen对于Java开发者提供的文档也非常简单,只有一个电子文档,即Java Developer’s Guide.