diff --git a/src/main/java/com/nhn/hippo/web/dao/HbaseTraceDao.java b/src/main/java/com/nhn/hippo/web/dao/HbaseTraceDao.java index cf2bd6586..9f33c94a5 100644 --- a/src/main/java/com/nhn/hippo/web/dao/HbaseTraceDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/HbaseTraceDao.java @@ -1,17 +1,23 @@ package com.nhn.hippo.web.dao; import com.nhn.hippo.web.mapper.SpanMapper; +import com.nhn.hippo.web.vo.TraceId; import com.profiler.common.dto.thrift.Span; import com.profiler.common.hbase.HBaseTables; import com.profiler.common.hbase.HbaseTemplate2; import com.profiler.common.util.BytesUtils; +import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.util.Bytes; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; +import org.springframework.data.hadoop.hbase.RowMapper; import org.springframework.stereotype.Repository; +import java.util.ArrayList; import java.util.List; +import java.util.Set; import java.util.UUID; /** @@ -27,12 +33,42 @@ public class HbaseTraceDao implements TraceDao { private HbaseTemplate2 template2; @Autowired - private SpanMapper> spanMapper; + @Qualifier("spanMapper") + private RowMapper> spanMapper; @Override - public List readSpan(UUID uuid) { - byte[] uuidBytes = BytesUtils.longLongToBytes(uuid.getMostSignificantBits(), uuid.getLeastSignificantBits()); + public List selectSpan(UUID traceId) { + byte[] uuidBytes = BytesUtils.longLongToBytes(traceId.getMostSignificantBits(), traceId.getLeastSignificantBits()); return template2.get(HBaseTables.TRACES, uuidBytes, COLFAM_SPAN, spanMapper); } + + @Override + public List selectSpan(long traceIdMost, long traceIdLeast) { + byte[] uuidBytes = BytesUtils.longLongToBytes(traceIdMost, traceIdLeast); + return template2.get(HBaseTables.TRACES, uuidBytes, COLFAM_SPAN, spanMapper); + } + + @Override + public List> selectSpans(List traceIds) { + List gets = new ArrayList(traceIds.size()); + for (UUID traceId : traceIds) { + byte[] uuidBytes = BytesUtils.longLongToBytes(traceId.getMostSignificantBits(), traceId.getLeastSignificantBits()); + Get get = new Get(uuidBytes); + get.addFamily(COLFAM_SPAN); + gets.add(get); + } + return template2.get(HBaseTables.TRACES, gets, spanMapper); + } + + @Override + public List> selectSpans(Set traceIds) { + List gets = new ArrayList(traceIds.size()); + for (TraceId traceId : traceIds) { + Get get = new Get(traceId.getBytes()); + get.addFamily(COLFAM_SPAN); + gets.add(get); + } + return template2.get(HBaseTables.TRACES, gets, spanMapper); + } } diff --git a/src/main/java/com/nhn/hippo/web/dao/TraceDao.java b/src/main/java/com/nhn/hippo/web/dao/TraceDao.java index ec4901746..d6263618b 100644 --- a/src/main/java/com/nhn/hippo/web/dao/TraceDao.java +++ b/src/main/java/com/nhn/hippo/web/dao/TraceDao.java @@ -1,9 +1,11 @@ package com.nhn.hippo.web.dao; +import com.nhn.hippo.web.vo.TraceId; import com.profiler.common.dto.thrift.Span; import java.util.List; +import java.util.Set; import java.util.UUID; /** @@ -11,6 +13,12 @@ import java.util.UUID; */ public interface TraceDao { - List readSpan(UUID uuid); + List selectSpan(UUID traceId); + + List selectSpan(long traceIdMost, long traceIdLeast); + + List> selectSpans(List traceIds); + + List> selectSpans(Set traceIds); } diff --git a/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java b/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java index aeccde9b8..3d662adc0 100755 --- a/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java +++ b/src/main/java/com/nhn/hippo/web/service/FlowChartServiceImpl.java @@ -8,10 +8,13 @@ import java.util.List; import java.util.Map; import java.util.Set; +import com.nhn.hippo.web.dao.TraceDao; import org.apache.commons.lang.ArrayUtils; import org.apache.hadoop.hbase.client.Get; import org.apache.hadoop.hbase.client.Result; import org.apache.hadoop.hbase.util.Bytes; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Service; @@ -27,125 +30,112 @@ import com.profiler.common.hbase.HBaseQuery.HbaseColumn; import com.profiler.common.hbase.HBaseTables; /** - * * @author netspider - * */ @Service public class FlowChartServiceImpl implements FlowChartService { - @Autowired - @Qualifier("hbaseClient") - HBaseClient client; + private Logger logger = LoggerFactory.getLogger(this.getClass()); - @Override - public String[] selectAgentIds(String[] hosts) { - List column = new ArrayList(); - column.add(new HbaseColumn("Agents", "AgentID")); + @Autowired + @Qualifier("hbaseClient") + HBaseClient client; - HBaseQuery query = new HBaseQuery(HBaseTables.SERVERS, null, null, column); - Iterator> iterator = client.getHBaseData(query); + @Autowired + private TraceDao traceDao; - while (iterator.hasNext()) { - System.out.println("selectedAgentId=" + iterator.next()); - } + @Override + public String[] selectAgentIds(String[] hosts) { + List column = new ArrayList(); + column.add(new HbaseColumn("Agents", "AgentID")); - System.out.println("!!!==============WARNING==============!!!"); - System.out.println("!!! selectAgentIds IS NOT IMPLEMENTED !!!"); - System.out.println("!!!===================================!!!"); + HBaseQuery query = new HBaseQuery(HBaseTables.SERVERS, null, null, column); + Iterator> iterator = client.getHBaseData(query); - return hosts; - } + while (iterator.hasNext()) { + System.out.println("selectedAgentId=" + iterator.next()); + } - @Override - public Set selectTraceIdsFromTraceIndex(String[] agentIds, long from, long to) { - List column = new ArrayList(); - column.add(new HbaseColumn("Trace", "ID")); + System.out.println("!!!==============WARNING==============!!!"); + System.out.println("!!! selectAgentIds IS NOT IMPLEMENTED !!!"); + System.out.println("!!!===================================!!!"); - Set set = new HashSet(); + return hosts; + } - for (String agentId : agentIds) { - byte[] s = ArrayUtils.addAll(Bytes.toBytes(agentId), Bytes.toBytes(from)); - byte[] e = ArrayUtils.addAll(Bytes.toBytes(agentId), Bytes.toBytes(to)); + @Override + public Set selectTraceIdsFromTraceIndex(String[] agentIds, long from, long to) { + List column = new ArrayList(); + column.add(new HbaseColumn("Trace", "ID")); - HBaseQuery query = new HBaseQuery(HBaseTables.TRACE_INDEX, s, e, column); - Iterator> result = client.getHBaseData(query); + Set set = new HashSet(); - while (result.hasNext()) { - set.add(new TraceId(result.next().get("ID"))); - } - } + for (String agentId : agentIds) { + byte[] s = ArrayUtils.addAll(Bytes.toBytes(agentId), Bytes.toBytes(from)); + byte[] e = ArrayUtils.addAll(Bytes.toBytes(agentId), Bytes.toBytes(to)); - return set; - } + HBaseQuery query = new HBaseQuery(HBaseTables.TRACE_INDEX, s, e, column); + Iterator> result = client.getHBaseData(query); - @Override - public Map> selectTraces(List traceIds) { - List gets = new ArrayList(traceIds.size()); - for (byte[] traceId : traceIds) { - gets.add(new Get(traceId)); - } + while (result.hasNext()) { + set.add(new TraceId(result.next().get("ID"))); + } + } - Result[] results = client.get(HBaseTables.TRACES, gets); + return set; + } - // traceId, SpanList - final Map> result = new HashMap>(); + @Override + public Map> selectTraces(List traceIds) { + List gets = new ArrayList(traceIds.size()); + for (byte[] traceId : traceIds) { + gets.add(new Get(traceId)); + } - TracesProcessor.process(results, new SpanHandler() { - @Override - public void handleSpan(byte[] row, byte[] family, byte[] column, Span span) { - if (result.containsKey(row)) { - result.get(row).add(span); - } else { - List list = new ArrayList(); - list.add(span); - result.put(row, list); - } - } - }); + Result[] results = client.get(HBaseTables.TRACES, gets); - return result; - } + // traceId, SpanList + final Map> result = new HashMap>(); - @Override - public RPCCallTree selectRPCCallTree(Set traceIds) { - List gets = new ArrayList(traceIds.size()); - for (TraceId traceId : traceIds) { - gets.add(new Get(traceId.getBytes())); - } + TracesProcessor.process(results, new SpanHandler() { + @Override + public void handleSpan(byte[] row, byte[] family, byte[] column, Span span) { + if (result.containsKey(row)) { + result.get(row).add(span); + } else { + List list = new ArrayList(); + list.add(span); + result.put(row, list); + } + } + }); - Result[] results = client.get(HBaseTables.TRACES, gets); + return result; + } - final RPCCallTree tree = new RPCCallTree(); + @Override + public RPCCallTree selectRPCCallTree(Set traceIds) { + final RPCCallTree tree = new RPCCallTree(); + List> traces = this.traceDao.selectSpans(traceIds); + for (List transaction : traces) { + for (Span eachTransaction : transaction) { + tree.addSpan(eachTransaction); + } + } + return tree.build(); + } - TracesProcessor.process(results, new SpanHandler() { - @Override - public void handleSpan(byte[] row, byte[] family, byte[] column, Span span) { - tree.addSpan(span); - } - }); + @Override + public ServerCallTree selectServerCallTree(Set traceIds) { + final ServerCallTree tree = new ServerCallTree(); - return tree.build(); - } + List> traces = this.traceDao.selectSpans(traceIds); + for (List transaction : traces) { + for (Span eachTransaction : transaction) { + tree.addSpan(eachTransaction); + } + } + return tree.build(); + } - @Override - public ServerCallTree selectServerCallTree(Set traceIds) { - List gets = new ArrayList(traceIds.size()); - for (TraceId traceId : traceIds) { - gets.add(new Get(traceId.getBytes())); - } - - Result[] results = client.get(HBaseTables.TRACES, gets); - - final ServerCallTree tree = new ServerCallTree(); - - TracesProcessor.process(results, new SpanHandler() { - @Override - public void handleSpan(byte[] row, byte[] family, byte[] column, Span span) { - tree.addSpan(span); - } - }); - - return tree.build(); - } } diff --git a/src/main/java/com/nhn/hippo/web/service/SpanServiceImpl.java b/src/main/java/com/nhn/hippo/web/service/SpanServiceImpl.java index dbccadfe2..e0181322a 100644 --- a/src/main/java/com/nhn/hippo/web/service/SpanServiceImpl.java +++ b/src/main/java/com/nhn/hippo/web/service/SpanServiceImpl.java @@ -25,13 +25,13 @@ public class SpanServiceImpl implements SpanService { @Override public List selectSpan(String uuid) { UUID id = UUID.fromString(uuid); - List spans = traceDao.readSpan(id); + List spans = traceDao.selectSpan(id); if (spans == null) { return Collections.emptyList(); } List order = order(spans); - if(order.size() != spans.size()) { + if (order.size() != spans.size()) { logger.info("span node not complete! "); } return order; diff --git a/src/main/resources/hbase.properties b/src/main/resources/hbase.properties index f9e28d69c..409edad0a 100644 --- a/src/main/resources/hbase.properties +++ b/src/main/resources/hbase.properties @@ -1,2 +1,4 @@ -hbase.client.host=localhost +#hbase.client.host=localhost +hbase.client.host=10.25.131.38 + hbase.client.port=2181 \ No newline at end of file diff --git a/src/test/resources/test-web-applicationContext.xml b/src/test/resources/test-web-applicationContext.xml index c7b5c9ba8..d612dcd74 100644 --- a/src/test/resources/test-web-applicationContext.xml +++ b/src/test/resources/test-web-applicationContext.xml @@ -23,7 +23,7 @@ - +