dynatrace的purepath捕获的数据,有利于我们整体测量性能,但由于是xml格式的,所以需要做一些转换才能到数据库。

import java.util.Date;/*<  pathinfo error_state="Transaction failed"purepath="/remind/soa/cxf/SyncLCAMWorkflowMsg#getWorkflowMsg"response_time_ms="2.6969668865203857"breakdown="CPU: 2.668 ms, Sync: -, Wait: -, Suspension: -"size="1"agent="OracleWebLogic_Monitoring[AdminServer]@gdsdb:6113"application="Default Application"start_time="2016-07-20T09:29:18.156+08:00"duration_ms="2.697021484375"/>* */
public class PathInfoVO {private String errorState;private String purePath;private float responseTimeMs;private float breakDownCPU;private String breakDownSync;private String breakDownWait;private String breakDownSuspension;private int size;private String agent;private String application;private Date startTime;private float durationMs;
public String getAgent() {return agent;
}
public void setAgent(String agent) {this.agent = agent;
}
public String getApplication() {return application;
}
public void setApplication(String application) {this.application = application;
}
public float getBreakDownCPU() {return breakDownCPU;
}
public void setBreakDownCPU(float breakDownCPU) {this.breakDownCPU = breakDownCPU;
}
public String getBreakDownSuspension() {return breakDownSuspension;
}
public void setBreakDownSuspension(String breakDownSuspension) {this.breakDownSuspension = breakDownSuspension;
}
public String getBreakDownSync() {return breakDownSync;
}
public void setBreakDownSync(String breakDownSync) {this.breakDownSync = breakDownSync;
}
public String getBreakDownWait() {return breakDownWait;
}
public void setBreakDownWait(String breakDownWait) {this.breakDownWait = breakDownWait;
}
public float getDurationMs() {return durationMs;
}
public void setDurationMs(float durationMs) {this.durationMs = durationMs;
}
public String getErrorState() {return errorState;
}
public void setErrorState(String errorState) {this.errorState = errorState;
}
public String getPurePath() {return purePath;
}
public void setPurePath(String purePath) {this.purePath = purePath;
}
public float getResponseTimeMs() {return responseTimeMs;
}
public void setResponseTimeMs(float responseTimeMs) {this.responseTimeMs = responseTimeMs;
}
public int getSize() {return size;
}
public void setSize(int size) {this.size = size;
}
public Date getStartTime() {return startTime;
}
public void setStartTime(Date startTime) {this.startTime = startTime;
}/** toString method*/public String toString() {StringBuffer sb = new StringBuffer(512);sb.append("PathInfoVO[");sb.append("\n    errorState=").append(this.errorState);sb.append("\n    purePath=").append(this.purePath);sb.append("\n    responseTimeMs=").append(this.responseTimeMs);sb.append("\n    breakDownCPU=").append(this.breakDownCPU);sb.append("\n    breakDownSync=").append(this.breakDownSync);sb.append("\n    breakDownWait=").append(this.breakDownWait);sb.append("\n    breakDownSuspension=").append(this.breakDownSuspension);sb.append("\n    size=").append(this.size);sb.append("\n    agent=").append(this.agent);sb.append("\n    application=").append(this.application);sb.append("\n    startTime=").append(this.startTime);sb.append("\n    durationMs=").append(this.durationMs);sb.append("\n]");return sb.toString();}
}
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.DateFormat;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Stack;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/*
<  pathinfo error_state="Transaction failed"purepath="/remind/soa/cxf/SyncLCAMWorkflowMsg#getWorkflowMsg"response_time_ms="2.6969668865203857"breakdown="CPU: 2.668 ms, Sync: -, Wait: -, Suspension: -"size="1"agent="OracleWebLogic_Monitoring[AdminServer]@gdsdb:6113"application="Default Application"start_time="2016-07-20T09:29:18.156+08:00"duration_ms="2.697021484375"/>
* */
class XMLHandler extends DefaultHandler {//使用栈这个数据结构来保存private Stack<String> stack = new Stack<String>();//数据private String errorState;private String purePath;private String agent;List<PathInfoVO> pathInfoList = new ArrayList();//db定义static final String driver_class  = "oracle.jdbc.driver.OracleDriver";static final String connectionURL = "jdbc:oracle:thin:@10.10.11.16:1521:orcl";static final String userID        = "test";static final String userPassword  = "test";@Overridepublic void startDocument() throws SAXException{System.out.println("start document -> parse begin");}/*** 文档解析到最后*/@Overridepublic void endDocument() throws SAXException{if(pathInfoList.size()>0){insertDB(pathInfoList);}System.out.println("end document -> parse finished");}@Overridepublic void startElement(String uri, String localName, String qName,Attributes attributes) throws SAXException{// 将标签名压入栈stack.push(qName);PathInfoVO pathInfoVO = new PathInfoVO();DecimalFormat decimalFormat=new DecimalFormat(".00");// 处理属性String temp[] = new String[4];String t_CPU;String t_Sync;String t_Wait;String t_Suspension;for (int i = 0; i < attributes.getLength(); ++i){String attrName = attributes.getQName(i);String attrValue = attributes.getValue(i);if("error_state".equals(attrName)){pathInfoVO.setErrorState(attrValue);} else if("purepath".equals(attrName)){pathInfoVO.setPurePath(attrValue);}else if("response_time_ms".equals(attrName)){pathInfoVO.setResponseTimeMs(Float.parseFloat(decimalFormat.format(Float.parseFloat(attrValue))));}else if("breakdown".equals(attrName)){temp =attrValue.split(",");t_CPU = temp[0].replace("CPU: ", "").replace(" ms", "");t_Sync = temp[1].replace("Sync:", "").replace("-", "");t_Wait = temp[2].replace("Wait:", "").replace("-", "");t_Suspension = temp[3].replace(" Suspension:", "").replace("-", "");pathInfoVO.setBreakDownCPU(Float.valueOf(t_CPU).floatValue());pathInfoVO.setBreakDownSync(t_Sync);pathInfoVO.setBreakDownWait(t_Wait);pathInfoVO.setBreakDownSuspension(t_Suspension);}else if("size".equals(attrName)){pathInfoVO.setSize(Integer.parseInt(attrValue));}else if("agent".equals(attrName)){pathInfoVO.setAgent(attrValue);}else if("application".equals(attrName)){pathInfoVO.setApplication(attrValue);}else if("start_time".equals(attrName)){pathInfoVO.setStartTime(parseStringToDate(attrValue));}else if("duration_ms".equals(attrName)){pathInfoVO.setDurationMs(Float.parseFloat(decimalFormat.format(Float.parseFloat(attrValue))));}//System.out.println("属性: " + attrName + "=" + attrValue)}//System.out.println(pathInfoVO);pathInfoList.add(pathInfoVO);}private Date parseStringToDate(String time){DateFormat format ;Date newDate = new Date();try {format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");newDate = format.parse(time.replace("T", " ").replace("+08:00", ""));}catch(Exception e){e.printStackTrace();}return newDate;}@Overridepublic void characters(char[] ch, int start, int length)throws SAXException{// 取出标签名String tag = stack.peek();if ("error_state".equals(tag)){errorState = new String(ch, start, length);}else if ("purepath".equals(tag)){purePath = new String(ch, start, length);}else if ("agent".equals(tag)){agent = new String(ch, start, length);}}/*** 每一个实体*/@Overridepublic void endElement(String uri, String localName, String qName)throws SAXException{stack.pop();// 表示该元素解析完毕,需要从栈中弹出标签}private String dateToString(Date dateTime){SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String str= "1999-01-01 00:00:00";if(dateTime != null){str=sdf.format(dateTime);}return str;}private void insertDB(List pathInfoVOList) {Connection  con = null;Statement   stmt = null;String  s_sql = "insert into t_purepath values(?,?,?,?,?,?,?,?,?,to_date(?, 'yyyy-mm-dd hh24:mi:ss'),?)";try {Class.forName (driver_class).newInstance();con = DriverManager.getConnection(connectionURL, userID, userPassword);PreparedStatement pstmt = con.prepareStatement(s_sql);con.setAutoCommit(false);PathInfoVO pathInfoVO ;for(int i=0; i<pathInfoVOList.size(); i++){pathInfoVO = (PathInfoVO)pathInfoList.get(i);//error_state varchar2pstmt.setString(1, pathInfoVO.getErrorState());//purepath varchar2pstmt.setString(2, pathInfoVO.getPurePath());//response_time_ms numberpstmt.setFloat(3, pathInfoVO.getResponseTimeMs());//breakdown_cpu numberpstmt.setFloat(4, pathInfoVO.getBreakDownCPU());//breakdown_Sync varchar2pstmt.setString(5, pathInfoVO.getBreakDownSync());//breakdown_Wait varchar2pstmt.setString(6, pathInfoVO.getBreakDownWait());//breakdown_Suspension varchar2pstmt.setString(7, pathInfoVO.getBreakDownSuspension());//agent  varchar2pstmt.setString(8, pathInfoVO.getAgent());//application varchar2pstmt.setString(9, pathInfoVO.getApplication());//start_time datepstmt.setString(10, dateToString(pathInfoVO.getStartTime()));//duration_ms  numberpstmt.setFloat(11, pathInfoVO.getDurationMs());pstmt.addBatch();if(i % 10000 == 0){pstmt.executeBatch();con.commit();}}//不足一万条的pstmt.executeBatch();con.commit();}  catch (SQLException e) {e.printStackTrace();} catch (Exception e) {e.printStackTrace();}finally{if(stmt != null){try {stmt.close();} catch (SQLException e) {e.printStackTrace();}finally{stmt = null;//--> 让他迅速成为java gc的对象}}if(con != null){try {con.close();} catch (SQLException e) {e.printStackTrace();}finally{con = null;//--> 让他迅速成为java gc的对象}}}}
}
import java.io.File;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;public class ParsePurePathXML {public static void main(String[] args) throws Exception{//获得SAX解析器工厂实例SAXParserFactory factory = SAXParserFactory.newInstance();//获得SAX解析器实例SAXParser parser = factory.newSAXParser();//开始进行解析,传入待解析的文档的处理器parser.parse(new File("d:/purepathinfo.xml"), new XMLHandler());}
}

dynatrace purepath数据转换到数据库相关推荐

  1. SQL中的数据转换服务,数据库迁移

    DTS DTS(Data Transformation Service) DTS 在SQL中也叫数据转换服务 DTS简介 大多数组织都使用多种格式和多个位置来存储数据.为了支持决策.改善系统性能或对现 ...

  2. 【数据库】数据库的四个基本概念Data DB DBMS DBS

    数据 Data 一.数据的定义: 数据(Data) 是数据库中存储的基本对象. 数据库 DB 一.数据库的定义: 数据库(Database,DB) 数据库是长期储存在计算机内,有组织.可共享.大量的数 ...

  3. 『数据库』朴实无华的数据库绪论

    『数据库』 朴实无华且枯燥的数据库教程–入门必看!(不收藏,真的吃亏了) 文章目录 数据库系统概述 数据模型 概念模型 数据库系统结构 数据库系统的组成 数据库系统概述 一.四个基本概念 1.数据(D ...

  4. 数据库学习之(5)详解DBMS

    DBMS是数据库系统的核心软件,数据库的一切操作都是通过DBMS进行的.用户对数据库进行操作,是由DBMS把操作从应用程序带到外模式.模式,再导向内模式,进而操作存储器中的数据的.DBMS的主要目的是 ...

  5. mysql代码导出excel_数据库导出excel代码

    GridView导出为Excel后,导出的.xls文件无法作为源文件导入的问题 今天有人问了一个导出到Excel的问题,经典的导出代码想来大家也都知道,就是循环读数据,写成一个HTML,然后存为一个. ...

  6. 使用pymysql将excel表格的数据导入mysql数据库(CRUD)(附代码)

    通过这个就感觉到写代码的时候逻辑有多么重要 把excel中的数据存到数据库里面 ① 所用资料链接 把excel的数据转换到数据库,使用数据库的一些语句进行操作 pymysql 的使用以及 commit ...

  7. SQL Server 2000管理专家系列课程之二:如何让数据库中的数据更有条理性? – 规范SQL Server 2000数据...

    讲解都是一些基础知识,故不多花时间整理笔记. KeyWord:数据导入 数据迁移 数据转换 数据分析 数据库 数据仓库 软件开发 深圳A8数据分析处理工作室 咨询热线:137-143-400-99 地 ...

  8. 数据库 第一章 绪论

    1 数据库系统概述 1.1 数据库的4个基本概念 1.数据(Data) 数据(Data)是数据库中存储的基本对象 数据的定义 描述事物的符号记录 2.数据库(Database) 数据库的定义 数据库( ...

  9. 数据库系统概述-4个基本概念、 数据管理技术的产生和发展、 数据库系统的特点

    数据库的4个基本概念 数据(Data).数据库(Database,DB).数据库管理系统(DataBase Management System,DBMS).数据库系统(DataBase System, ...

最新文章

  1. sklearn自学指南(part41)--使用手册的目录
  2. Linux C 算法分析初步
  3. 数字化时代在线教育行业营销解决方案
  4. 学习面向对象编程OOP 第一天
  5. Rancher 2.0集群与工作负载告警
  6. 自定义数组名做参数(传指针教学)
  7. 浅谈JS中的原型对象和原型链
  8. heartbeat+lvs+Keepalive
  9. 航空订票系统java_航空订票系统(JAVA+SSH+MYSQL)
  10. 实用:旋转矩阵与方向余弦矩阵(DCM)
  11. win10 企业版 2016长期服务版激活方法
  12. cadence导生产文件_【分享】写了个Allegro导出bom和坐标文件的教程, 仅供参考~
  13. msi z170 网卡 linux,麻雀虽小五脏俱全:msi 微星 发布 Z170I Gaming Pro AC Mini-ITX主板...
  14. python实用教程答案 郑阿奇_VisualC++实用教程第4版_郑阿奇,习题参考答案,精品资料...
  15. 如何录屏?电脑屏幕录制软件哪个好?
  16. Mac系统升级中途断电/关机,升级/开机失败的恢复方法
  17. Android无线蓝牙开发总结
  18. 建立一个复数类Complex,其私有数据成员mX和mY表示复数的实部和虚部,构造函数Complex用于对复数的实部和虚部初始化
  19. 乱世识英雄 你选什么品牌的ERP
  20. 红米有android,超23款小米、红米升Android O以上系统,日前又一款尝鲜Andro

热门文章

  1. 光模块和光纤如何区分单模,多模
  2. SFKP • 计算机百科丨中国数据库发展史
  3. KEPServerEX6 之 Mitsubishi Ethernet驱动三菱Q系列使用方式
  4. 阿里云边缘云助力东京奥运会高清点播 畅享奥运精彩瞬间
  5. C. Serval and Toxel‘s Arrays(数学贡献法)
  6. GitlabCI与JenkinsCI对比
  7. JDK工具(查看JVM参数、内存使用情况及分析等)
  8. 【思维导图】富士相机的胶片模拟详解 史上最全资料汇总
  9. JAVA中将数据保存到EXCEL文件
  10. linux 弹出usb设备,linux安全移除USB设备