Loading skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java +6 −2 Original line number Diff line number Diff line Loading @@ -53,7 +53,11 @@ public class ChainBuildReducer extends Reducer<Text, Text, Text, IntWritable> { + callChainData, e); } } try { container.saveToHBase(); chainTree.saveToHbase(); } catch (Exception e) { logger.error("Failed to save summaryresult/chainTree.", e); } } } skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/DBCallChainInfoDao.java +6 −31 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild; import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainDetail; import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainDetailForMysql; import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode; import com.ai.cloud.skywalking.analysis.config.Config; import org.slf4j.Logger; Loading Loading @@ -30,16 +30,16 @@ public class DBCallChainInfoDao { } } public synchronized static void saveChainDetail(CallChainDetail callChainDetail) public synchronized static void saveChainDetail(CallChainDetailForMysql callChainDetailForMysql) throws SQLException { PreparedStatement preparedStatement = null; try { preparedStatement = connection .prepareStatement("INSERT INTO sw_chain_detail(cid,uid,traceLevelId,viewpoint,create_time)" + " VALUES(?,?,?,?,?)"); for (ChainNode chainNode : callChainDetail.getChainNodes()) { preparedStatement.setString(1, callChainDetail.getChainToken()); preparedStatement.setString(2, callChainDetail.getUserId()); for (ChainNode chainNode : callChainDetailForMysql.getChainNodes()) { preparedStatement.setString(1, callChainDetailForMysql.getChainToken()); preparedStatement.setString(2, callChainDetailForMysql.getUserId()); preparedStatement.setString(3, chainNode.getTraceLevelId()); preparedStatement.setString(4, chainNode.getViewPoint() + ":" + chainNode.getBusinessKey()); Loading @@ -51,32 +51,7 @@ public class DBCallChainInfoDao { for (int i : result) { if (i != 1) { logger.error("Failed to save chain detail [" + callChainDetail.getChainToken() + "]"); } } } finally { if (preparedStatement != null) preparedStatement.close(); } connection.commit(); } public synchronized static void updateChainLastActiveTime(Map<String, Timestamp> updateChainInfo) throws SQLException { PreparedStatement preparedStatement = null; try { preparedStatement = connection .prepareStatement("UPDATE sw_chain_detail SET update_time = ? WHERE cid = ?"); for (Map.Entry<String, Timestamp> entry : updateChainInfo .entrySet()) { preparedStatement.setTimestamp(1, entry.getValue()); preparedStatement.setString(2, entry.getKey()); preparedStatement.addBatch(); } int[] result = preparedStatement.executeBatch(); for (int i : result) { if (i != 1) { logger.error("Failed to update chain detail"); + callChainDetailForMysql.getChainToken() + "]"); } } } finally { Loading skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainDetail.java→skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainDetailForMysql.java +4 −13 Original line number Diff line number Diff line Loading @@ -12,20 +12,17 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; public class CallChainDetail { private boolean isNormal = true; public class CallChainDetailForMysql { private String chainToken; private Map<String, ChainNode> chainNodeMap = new HashMap<String, ChainNode>(); private String userId; public CallChainDetail(ChainInfo chainInfo, boolean isNormal) { public CallChainDetailForMysql(ChainInfo chainInfo) { chainToken = chainInfo.getCID(); for (ChainNode chainNode : chainInfo.getNodes()) { chainNodeMap.put(chainNode.getTraceLevelId(), chainNode); } userId = chainInfo.getUserId(); this.isNormal = isNormal; } @Override Loading @@ -33,15 +30,9 @@ public class CallChainDetail { return new Gson().toJson(this); } public void save(Put put) throws SQLException { for (Map.Entry<String, ChainNode> entry : chainNodeMap.entrySet()){ put.addColumn(HBaseTableMetaData.TABLE_CHAIN_DETAIL.COLUMN_FAMILY_NAME.getBytes(),entry.getKey().getBytes(), entry.getValue().toString().getBytes()); } if (isNormal) { public void saveToMysql() throws SQLException { DBCallChainInfoDao.saveChainDetail(this); } } public Collection<ChainNode> getChainNodes() { return chainNodeMap.values(); Loading skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/SpecificTimeCallTreeMergedChainIdContainer.java +22 −3 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild.po; import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainDetailForMysql; import com.ai.cloud.skywalking.analysis.chainbuild.util.HBaseUtil; import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData; import com.google.gson.Gson; import org.apache.hadoop.hbase.client.Put; import java.io.IOException; import java.sql.SQLException; import java.util.*; public class SpecificTimeCallTreeMergedChainIdContainer { Loading @@ -14,6 +16,8 @@ public class SpecificTimeCallTreeMergedChainIdContainer { private Map<String, List<String>> hasBeenMergedChainIds; private Map<String, CallChainDetailForMysql> callChainDetailMap; // 本次Reduce合并过的调用链 private Map<String, ChainInfo> combineChains; Loading @@ -21,6 +25,7 @@ public class SpecificTimeCallTreeMergedChainIdContainer { this.treeToken = treeToken; hasBeenMergedChainIds = new HashMap<String, List<String>>(); combineChains = new HashMap<String, ChainInfo>(); callChainDetailMap = new HashMap<String, CallChainDetailForMysql>(); } public void addMergedChainIfNotContain(ChainInfo chainInfo) throws IOException { Loading @@ -34,6 +39,13 @@ public class SpecificTimeCallTreeMergedChainIdContainer { if (!cIds.contains(chainInfo.getCID())) { cIds.add(chainInfo.getCID()); combineChains.put(chainInfo.getCID(), chainInfo); // if (chainInfo.getChainStatus() == ChainInfo.ChainStatus.NORMAL) { callChainDetailMap.put(chainInfo.getCID(), new CallChainDetailForMysql(chainInfo)); } }else{ } } Loading @@ -44,9 +56,16 @@ public class SpecificTimeCallTreeMergedChainIdContainer { return treeToken + "@" + calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH); } public void saveToHBase() throws IOException, InterruptedException { public void saveToHBase() throws IOException, InterruptedException, SQLException { batchSaveCurrentHasBeenMergedChainInfo(); batchSaveMergedChainId(); batchSaveToMysql(); } private void batchSaveToMysql() throws SQLException { for (Map.Entry<String, CallChainDetailForMysql> entry : callChainDetailMap.entrySet()){ entry.getValue().saveToMysql(); } } /** Loading Loading
skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/ChainBuildReducer.java +6 −2 Original line number Diff line number Diff line Loading @@ -53,7 +53,11 @@ public class ChainBuildReducer extends Reducer<Text, Text, Text, IntWritable> { + callChainData, e); } } try { container.saveToHBase(); chainTree.saveToHbase(); } catch (Exception e) { logger.error("Failed to save summaryresult/chainTree.", e); } } }
skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/DBCallChainInfoDao.java +6 −31 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild; import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainDetail; import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainDetailForMysql; import com.ai.cloud.skywalking.analysis.chainbuild.po.ChainNode; import com.ai.cloud.skywalking.analysis.config.Config; import org.slf4j.Logger; Loading Loading @@ -30,16 +30,16 @@ public class DBCallChainInfoDao { } } public synchronized static void saveChainDetail(CallChainDetail callChainDetail) public synchronized static void saveChainDetail(CallChainDetailForMysql callChainDetailForMysql) throws SQLException { PreparedStatement preparedStatement = null; try { preparedStatement = connection .prepareStatement("INSERT INTO sw_chain_detail(cid,uid,traceLevelId,viewpoint,create_time)" + " VALUES(?,?,?,?,?)"); for (ChainNode chainNode : callChainDetail.getChainNodes()) { preparedStatement.setString(1, callChainDetail.getChainToken()); preparedStatement.setString(2, callChainDetail.getUserId()); for (ChainNode chainNode : callChainDetailForMysql.getChainNodes()) { preparedStatement.setString(1, callChainDetailForMysql.getChainToken()); preparedStatement.setString(2, callChainDetailForMysql.getUserId()); preparedStatement.setString(3, chainNode.getTraceLevelId()); preparedStatement.setString(4, chainNode.getViewPoint() + ":" + chainNode.getBusinessKey()); Loading @@ -51,32 +51,7 @@ public class DBCallChainInfoDao { for (int i : result) { if (i != 1) { logger.error("Failed to save chain detail [" + callChainDetail.getChainToken() + "]"); } } } finally { if (preparedStatement != null) preparedStatement.close(); } connection.commit(); } public synchronized static void updateChainLastActiveTime(Map<String, Timestamp> updateChainInfo) throws SQLException { PreparedStatement preparedStatement = null; try { preparedStatement = connection .prepareStatement("UPDATE sw_chain_detail SET update_time = ? WHERE cid = ?"); for (Map.Entry<String, Timestamp> entry : updateChainInfo .entrySet()) { preparedStatement.setTimestamp(1, entry.getValue()); preparedStatement.setString(2, entry.getKey()); preparedStatement.addBatch(); } int[] result = preparedStatement.executeBatch(); for (int i : result) { if (i != 1) { logger.error("Failed to update chain detail"); + callChainDetailForMysql.getChainToken() + "]"); } } } finally { Loading
skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainDetail.java→skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/entity/CallChainDetailForMysql.java +4 −13 Original line number Diff line number Diff line Loading @@ -12,20 +12,17 @@ import java.util.Collection; import java.util.HashMap; import java.util.Map; public class CallChainDetail { private boolean isNormal = true; public class CallChainDetailForMysql { private String chainToken; private Map<String, ChainNode> chainNodeMap = new HashMap<String, ChainNode>(); private String userId; public CallChainDetail(ChainInfo chainInfo, boolean isNormal) { public CallChainDetailForMysql(ChainInfo chainInfo) { chainToken = chainInfo.getCID(); for (ChainNode chainNode : chainInfo.getNodes()) { chainNodeMap.put(chainNode.getTraceLevelId(), chainNode); } userId = chainInfo.getUserId(); this.isNormal = isNormal; } @Override Loading @@ -33,15 +30,9 @@ public class CallChainDetail { return new Gson().toJson(this); } public void save(Put put) throws SQLException { for (Map.Entry<String, ChainNode> entry : chainNodeMap.entrySet()){ put.addColumn(HBaseTableMetaData.TABLE_CHAIN_DETAIL.COLUMN_FAMILY_NAME.getBytes(),entry.getKey().getBytes(), entry.getValue().toString().getBytes()); } if (isNormal) { public void saveToMysql() throws SQLException { DBCallChainInfoDao.saveChainDetail(this); } } public Collection<ChainNode> getChainNodes() { return chainNodeMap.values(); Loading
skywalking-analysis/src/main/java/com/ai/cloud/skywalking/analysis/chainbuild/po/SpecificTimeCallTreeMergedChainIdContainer.java +22 −3 Original line number Diff line number Diff line package com.ai.cloud.skywalking.analysis.chainbuild.po; import com.ai.cloud.skywalking.analysis.chainbuild.entity.CallChainDetailForMysql; import com.ai.cloud.skywalking.analysis.chainbuild.util.HBaseUtil; import com.ai.cloud.skywalking.analysis.config.HBaseTableMetaData; import com.google.gson.Gson; import org.apache.hadoop.hbase.client.Put; import java.io.IOException; import java.sql.SQLException; import java.util.*; public class SpecificTimeCallTreeMergedChainIdContainer { Loading @@ -14,6 +16,8 @@ public class SpecificTimeCallTreeMergedChainIdContainer { private Map<String, List<String>> hasBeenMergedChainIds; private Map<String, CallChainDetailForMysql> callChainDetailMap; // 本次Reduce合并过的调用链 private Map<String, ChainInfo> combineChains; Loading @@ -21,6 +25,7 @@ public class SpecificTimeCallTreeMergedChainIdContainer { this.treeToken = treeToken; hasBeenMergedChainIds = new HashMap<String, List<String>>(); combineChains = new HashMap<String, ChainInfo>(); callChainDetailMap = new HashMap<String, CallChainDetailForMysql>(); } public void addMergedChainIfNotContain(ChainInfo chainInfo) throws IOException { Loading @@ -34,6 +39,13 @@ public class SpecificTimeCallTreeMergedChainIdContainer { if (!cIds.contains(chainInfo.getCID())) { cIds.add(chainInfo.getCID()); combineChains.put(chainInfo.getCID(), chainInfo); // if (chainInfo.getChainStatus() == ChainInfo.ChainStatus.NORMAL) { callChainDetailMap.put(chainInfo.getCID(), new CallChainDetailForMysql(chainInfo)); } }else{ } } Loading @@ -44,9 +56,16 @@ public class SpecificTimeCallTreeMergedChainIdContainer { return treeToken + "@" + calendar.get(Calendar.YEAR) + "-" + calendar.get(Calendar.MONTH); } public void saveToHBase() throws IOException, InterruptedException { public void saveToHBase() throws IOException, InterruptedException, SQLException { batchSaveCurrentHasBeenMergedChainInfo(); batchSaveMergedChainId(); batchSaveToMysql(); } private void batchSaveToMysql() throws SQLException { for (Map.Entry<String, CallChainDetailForMysql> entry : callChainDetailMap.entrySet()){ entry.getValue().saveToMysql(); } } /** Loading