/** * 获取所有对象属性的性能数据 主要用于获取拓扑图中的性能数据和性能面板中的性能数据 * * @param objXml 要获取性能数据的各对象属性及参数的XML * @return 返回性能数据XML * @throws Exception 异常 */ public String getObjAttrsPerfData(String objXml) throws Exception { // 用于组装返回结果 Document result_doc = DocumentHelper.parseText( "<?xml version=\"1.0\" encoding=\"UTF-8\"?><DataSource></DataSource>"); // 根据传递过来的XML获取要采集哪些对象属性的值 Document doc = DocumentHelper.parseText(objXml); // 根据传过来的objXml组装QueryParam if (doc != null) { // 获取所有的Item,每个Item下是一个对象的所有要获取性能数据的对象属性相关参数 List list = doc.selectNodes("/PerfObjects/Item"); if (list != null) { Iterator it = list.iterator(); if (it != null) { while (it.hasNext()) { Element itemEle = (Element) it.next(); String objId = itemEle.attribute("objId").getValue(); // 获取该对象下的所有要获取性能数据的对象属性相关参数 List<Element> child = itemEle.elements("PerfObject"); if (child != null && child.size() > 0) { List<QueryParam> para = new ArrayList<QueryParam>(); List<String> valueObjAttrArr = new ArrayList<String>(); // 组装QueryParam for (Element e : child) { String objAttrId = e.attribute("objAttrId").getValue(); String attrType = e.attribute("attrType").getValue(); String fetchSize = e.attribute("fetchSize").getValue(); valueObjAttrArr.add(objAttrId); QueryParam qp = new QueryParam(); qp.setObjId(Integer.parseInt(objId)); qp.setObjAttrId(Integer.parseInt(objAttrId)); qp.setAttrType(Integer.parseInt(attrType)); qp.setFetchSize(Integer.parseInt(fetchSize)); para.add(qp); } // 调用接口获取性能数据 QueryParam[] arr = para.toArray(new QueryParam[para.size()]); Map<Integer, List<QueryResult>> values = CollDataQuery.getInstance().query(Integer.valueOf(objId), arr); // 组装结果 if (values != null && values.size() > 0) { // 查询要格式化值的对象属性 List<Map<String, String>> lst = new SqlQueryUtil() .getLst( "SELECT A.OBJATTR_ID,A.ATTRIB_TYPE,B.VALUE_TYPE FROM BMP_OBJATTRIB A LEFT JOIN BMP_ATTRIBUTE B ON A.ATTRIB_ID = B.ATTRIB_ID WHERE B.VALUE_TYPE > 0 AND B.VALUE_TYPE IS NOT NULL AND A.OBJATTR_ID IN (" + StringUtils.join(valueObjAttrArr, ',') + ")"); // 查询枚举信息 List<ValueTableEntity> valueTables = getValueTableByObjAttrIds(valueObjAttrArr); // 组装 String attribType = ""; String valueType = ""; List<ValueTableEntity> valueLst; for (Element e : child) { String objAttrId = e.attribute("objAttrId").getValue(); String objAttrName = e.attribute("objAttrName").getValue(); String bindId = e.attribute("bindId").getValue(); String index = e.attribute("index").getValue(); String fetchSize = e.attribute("fetchSize").getValue(); Element ele = result_doc.getRootElement().addElement("Data"); ele.addAttribute("bindId", bindId); ele.addAttribute("index", index); ele.addAttribute("objAttrId", objAttrId); ele.addAttribute("objAttrName", objAttrName); List<QueryResult> resultLst = values.get(Integer.valueOf(objAttrId)); // 判断是否需要格式化值 valueLst = new ArrayList<ValueTableEntity>(); if (lst != null && lst.size() > 0 && valueTables.size() > 0) { for (Map<String, String> map : lst) { if (objAttrId.equals(map.get("OBJATTR_ID"))) { attribType = map.get("ATTRIB_TYPE"); valueType = map.get("VALUE_TYPE"); for (ValueTableEntity entity : valueTables) { if (valueType.equals(String.valueOf(entity.getValueType()))) { valueLst.add(entity); } } break; } } } // 将结果转化为指定格式XML字符串 ele.appendContent( queryResultListToXml( resultLst, objAttrId, objAttrName, fetchSize, attribType, valueLst) .getRootElement()); } } } } } } } return result_doc.asXML(); }
/** * 获取某对象的某属性的性能数据,可能为多个对象属性 * * @param objId 对象ID * @param attrId 属性ID * @param fetchSize 获取性能数据的条数 * @return 性能数据XML * @throws Exception 异常 */ public String getPerfDataByObjAndAttrib(int objId, int attrId, int fetchSize) throws Exception { // 定义一个Document作为返回结果 Document result_doc = DocumentHelper.parseText( "<?xml version=\"1.0\" encoding=\"UTF-8\"?><DataSource></DataSource>"); // 先查询该对象该属性下所有的对象属性 List<ObjAttribEntity> lst = ClassWrapper.wrapTrans(ObjAttribDal.class) .getByObjIdAndAttribId(objId, attrId, new Integer[] {1}); if (lst != null && lst.size() > 0) { List<QueryParam> para = new ArrayList<QueryParam>(); // 对所有对象属性组装QueryParam,并保存到List for (ObjAttribEntity entity : lst) { QueryParam qp = new QueryParam(); qp.setObjId(objId); qp.setObjAttrId(entity.getObjAttrId()); qp.setAttrType(entity.getAttribType()); qp.setFetchSize(fetchSize); para.add(qp); } // 调用接口取性能数据 QueryParam[] arr = para.toArray(new QueryParam[para.size()]); Map<Integer, List<QueryResult>> values = CollDataQuery.getInstance().query(Integer.valueOf(objId), arr); // 根据结果组装XML if (values != null && values.size() > 0) { // 获取该属性枚举信息 List<String> attrIdArr = new ArrayList<String>(); attrIdArr.add(String.valueOf(attrId)); List<ValueTableEntity> valueTables = getValueTableByAttrIds(attrIdArr); // 组装 for (ObjAttribEntity entity : lst) { String objattrId = String.valueOf(entity.getObjAttrId()); String objattrName = String.valueOf(entity.getAttribType()); Element ele = result_doc.getRootElement().addElement("Data"); ele.addAttribute("OBJATTR_ID", objattrId); ele.addAttribute("OBJATTR_NAME", objattrName); List<QueryResult> resultLst = values.get(Integer.valueOf(objattrId)); // 循环读取每个QueryResult对象,并转化为指定XML格式 ele.appendContent( queryResultListToXml( resultLst, objattrId, objattrName, String.valueOf(fetchSize), String.valueOf(entity.getAttribType()), valueTables) .getRootElement()); } } } return result_doc.asXML(); }