提交 03a5db8e 编写于 作者: wu-sheng's avatar wu-sheng 提交者: GitHub

Merge pull request #404 from wu-sheng/feature/debugging

Feature/debugging
......@@ -38,29 +38,29 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe
private final Logger logger = LoggerFactory.getLogger(JVMMetricsServiceHandler.class);
@Override public void collect(JVMMetrics request, StreamObserver<Downstream> responseObserver) {
int applicationInstanceId = request.getApplicationInstanceId();
logger.debug("receive the jvm metric from application instance, id: {}", applicationInstanceId);
int instanceId = request.getApplicationInstanceId();
logger.debug("receive the jvm metric from application instance, id: {}", instanceId);
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
request.getMetricsList().forEach(metric -> {
long time = TimeBucketUtils.INSTANCE.getSecondTimeBucket(metric.getTime());
senToInstanceHeartBeatPersistenceWorker(context, applicationInstanceId, metric.getTime());
sendToCpuMetricPersistenceWorker(context, applicationInstanceId, time, metric.getCpu());
sendToMemoryMetricPersistenceWorker(context, applicationInstanceId, time, metric.getMemoryList());
sendToMemoryPoolMetricPersistenceWorker(context, applicationInstanceId, time, metric.getMemoryPoolList());
sendToGCMetricPersistenceWorker(context, applicationInstanceId, time, metric.getGcList());
senToInstanceHeartBeatPersistenceWorker(context, instanceId, metric.getTime());
sendToCpuMetricPersistenceWorker(context, instanceId, time, metric.getCpu());
sendToMemoryMetricPersistenceWorker(context, instanceId, time, metric.getMemoryList());
sendToMemoryPoolMetricPersistenceWorker(context, instanceId, time, metric.getMemoryPoolList());
sendToGCMetricPersistenceWorker(context, instanceId, time, metric.getGcList());
});
responseObserver.onNext(Downstream.newBuilder().build());
responseObserver.onCompleted();
}
private void senToInstanceHeartBeatPersistenceWorker(StreamModuleContext context, int applicationInstanceId,
private void senToInstanceHeartBeatPersistenceWorker(StreamModuleContext context, int instanceId,
long heartBeatTime) {
InstanceHeartBeatDataDefine.InstanceHeartBeat heartBeat = new InstanceHeartBeatDataDefine.InstanceHeartBeat();
heartBeat.setId(String.valueOf(applicationInstanceId));
heartBeat.setId(String.valueOf(instanceId));
heartBeat.setHeartBeatTime(TimeBucketUtils.INSTANCE.getSecondTimeBucket(heartBeatTime));
heartBeat.setInstanceId(applicationInstanceId);
heartBeat.setInstanceId(instanceId);
try {
logger.debug("send to instance heart beat persistence worker, id: {}", heartBeat.getId());
context.getClusterWorkerContext().lookup(InstHeartBeatPersistenceWorker.WorkerRole.INSTANCE).tell(heartBeat.toData());
......@@ -69,11 +69,11 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe
}
}
private void sendToCpuMetricPersistenceWorker(StreamModuleContext context, int applicationInstanceId,
private void sendToCpuMetricPersistenceWorker(StreamModuleContext context, int instanceId,
long timeBucket, CPU cpu) {
CpuMetricDataDefine.CpuMetric cpuMetric = new CpuMetricDataDefine.CpuMetric();
cpuMetric.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId);
cpuMetric.setApplicationInstanceId(applicationInstanceId);
cpuMetric.setId(timeBucket + Const.ID_SPLIT + instanceId);
cpuMetric.setInstanceId(instanceId);
cpuMetric.setUsagePercent(cpu.getUsagePercent());
cpuMetric.setTimeBucket(timeBucket);
try {
......@@ -84,13 +84,13 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe
}
}
private void sendToMemoryMetricPersistenceWorker(StreamModuleContext context, int applicationInstanceId,
private void sendToMemoryMetricPersistenceWorker(StreamModuleContext context, int instanceId,
long timeBucket, List<Memory> memories) {
memories.forEach(memory -> {
MemoryMetricDataDefine.MemoryMetric memoryMetric = new MemoryMetricDataDefine.MemoryMetric();
memoryMetric.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId + Const.ID_SPLIT + String.valueOf(memory.getIsHeap()));
memoryMetric.setApplicationInstanceId(applicationInstanceId);
memoryMetric.setId(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + String.valueOf(memory.getIsHeap()));
memoryMetric.setApplicationInstanceId(instanceId);
memoryMetric.setHeap(memory.getIsHeap());
memoryMetric.setInit(memory.getInit());
memoryMetric.setMax(memory.getMax());
......@@ -106,13 +106,13 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe
});
}
private void sendToMemoryPoolMetricPersistenceWorker(StreamModuleContext context, int applicationInstanceId,
private void sendToMemoryPoolMetricPersistenceWorker(StreamModuleContext context, int instanceId,
long timeBucket, List<MemoryPool> memoryPools) {
memoryPools.forEach(memoryPool -> {
MemoryPoolMetricDataDefine.MemoryPoolMetric memoryPoolMetric = new MemoryPoolMetricDataDefine.MemoryPoolMetric();
memoryPoolMetric.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId + Const.ID_SPLIT + memoryPool.getIsHeap() + Const.ID_SPLIT + String.valueOf(memoryPool.getType().getNumber()));
memoryPoolMetric.setApplicationInstanceId(applicationInstanceId);
memoryPoolMetric.setId(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + memoryPool.getIsHeap() + Const.ID_SPLIT + String.valueOf(memoryPool.getType().getNumber()));
memoryPoolMetric.setInstanceId(instanceId);
memoryPoolMetric.setPoolType(memoryPool.getType().getNumber());
memoryPoolMetric.setHeap(memoryPool.getIsHeap());
memoryPoolMetric.setInit(memoryPool.getInit());
......@@ -129,17 +129,16 @@ public class JVMMetricsServiceHandler extends JVMMetricsServiceGrpc.JVMMetricsSe
});
}
private void sendToGCMetricPersistenceWorker(StreamModuleContext context, int applicationInstanceId,
private void sendToGCMetricPersistenceWorker(StreamModuleContext context, int instanceId,
long timeBucket, List<GC> gcs) {
gcs.forEach(gc -> {
GCMetricDataDefine.GCMetric gcMetric = new GCMetricDataDefine.GCMetric();
gcMetric.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId + Const.ID_SPLIT + String.valueOf(gc.getPhraseValue()));
gcMetric.setApplicationInstanceId(applicationInstanceId);
gcMetric.setId(timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + String.valueOf(gc.getPhraseValue()));
gcMetric.setInstanceId(instanceId);
gcMetric.setPhrase(gc.getPhraseValue());
gcMetric.setCount(gc.getCount());
gcMetric.setTime(gc.getTime());
gcMetric.setTimeBucket(timeBucket);
gcMetric.setS5TimeBucket(TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(timeBucket));
try {
logger.debug("send to gc metric persistence worker, id: {}", gcMetric.getId());
context.getClusterWorkerContext().lookup(GCMetricPersistenceWorker.WorkerRole.INSTANCE).tell(gcMetric.toData());
......
......@@ -25,7 +25,7 @@ public class CpuMetricEsDAO extends EsDAO implements ICpuMetricDAO, IPersistence
@Override public IndexRequestBuilder prepareBatchInsert(Data data) {
Map<String, Object> source = new HashMap<>();
source.put(CpuMetricTable.COLUMN_APPLICATION_INSTANCE_ID, data.getDataInteger(0));
source.put(CpuMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0));
source.put(CpuMetricTable.COLUMN_USAGE_PERCENT, data.getDataDouble(0));
source.put(CpuMetricTable.COLUMN_TIME_BUCKET, data.getDataLong(0));
......
......@@ -26,7 +26,7 @@ public class CpuMetricEsTableDefine extends ElasticSearchTableDefine {
}
@Override public void initialize() {
addColumn(new ElasticSearchColumnDefine(CpuMetricTable.COLUMN_APPLICATION_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(CpuMetricTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(CpuMetricTable.COLUMN_USAGE_PERCENT, ElasticSearchColumnDefine.Type.Double.name()));
addColumn(new ElasticSearchColumnDefine(CpuMetricTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name()));
}
......
......@@ -15,7 +15,7 @@ public class CpuMetricH2TableDefine extends H2TableDefine {
@Override public void initialize() {
addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name()));
addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_APPLICATION_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_USAGE_PERCENT, H2ColumnDefine.Type.Double.name()));
addColumn(new H2ColumnDefine(CpuMetricTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name()));
}
......
......@@ -21,12 +21,11 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO, IPersistenceDA
@Override public IndexRequestBuilder prepareBatchInsert(Data data) {
Map<String, Object> source = new HashMap<>();
source.put(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, data.getDataInteger(0));
source.put(GCMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0));
source.put(GCMetricTable.COLUMN_PHRASE, data.getDataInteger(1));
source.put(GCMetricTable.COLUMN_COUNT, data.getDataLong(0));
source.put(GCMetricTable.COLUMN_TIME, data.getDataLong(1));
source.put(GCMetricTable.COLUMN_TIME_BUCKET, data.getDataLong(2));
source.put(GCMetricTable.COLUMN_5S_TIME_BUCKET, data.getDataLong(3));
return getClient().prepareIndex(GCMetricTable.TABLE, data.getDataString(0)).setSource(source);
}
......
......@@ -26,11 +26,10 @@ public class GCMetricEsTableDefine extends ElasticSearchTableDefine {
}
@Override public void initialize() {
addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_PHRASE, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_COUNT, ElasticSearchColumnDefine.Type.Long.name()));
addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_TIME, ElasticSearchColumnDefine.Type.Long.name()));
addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name()));
addColumn(new ElasticSearchColumnDefine(GCMetricTable.COLUMN_5S_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name()));
}
}
......@@ -15,11 +15,10 @@ public class GCMetricH2TableDefine extends H2TableDefine {
@Override public void initialize() {
addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name()));
addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_PHRASE, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_COUNT, H2ColumnDefine.Type.Bigint.name()));
addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_TIME, H2ColumnDefine.Type.Bigint.name()));
addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name()));
addColumn(new H2ColumnDefine(GCMetricTable.COLUMN_5S_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name()));
}
}
......@@ -21,7 +21,7 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO
@Override public IndexRequestBuilder prepareBatchInsert(Data data) {
Map<String, Object> source = new HashMap<>();
source.put(MemoryPoolMetricTable.COLUMN_APPLICATION_INSTANCE_ID, data.getDataInteger(0));
source.put(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, data.getDataInteger(0));
source.put(MemoryPoolMetricTable.COLUMN_POOL_TYPE, data.getDataInteger(1));
source.put(MemoryPoolMetricTable.COLUMN_IS_HEAP, data.getDataBoolean(0));
source.put(MemoryPoolMetricTable.COLUMN_INIT, data.getDataLong(0));
......
......@@ -26,7 +26,7 @@ public class MemoryPoolMetricEsTableDefine extends ElasticSearchTableDefine {
}
@Override public void initialize() {
addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_APPLICATION_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_POOL_TYPE, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_IS_HEAP, ElasticSearchColumnDefine.Type.Boolean.name()));
addColumn(new ElasticSearchColumnDefine(MemoryPoolMetricTable.COLUMN_INIT, ElasticSearchColumnDefine.Type.Long.name()));
......
......@@ -15,7 +15,7 @@ public class MemoryPoolMetricH2TableDefine extends H2TableDefine {
@Override public void initialize() {
addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name()));
addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_APPLICATION_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_POOL_TYPE, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_IS_HEAP, H2ColumnDefine.Type.Boolean.name()));
addColumn(new H2ColumnDefine(MemoryPoolMetricTable.COLUMN_INIT, H2ColumnDefine.Type.Bigint.name()));
......
......@@ -23,14 +23,18 @@ public class ApplicationRegisterServiceHandler extends ApplicationRegisterServic
@Override public void register(Application request, StreamObserver<ApplicationMapping> responseObserver) {
logger.debug("register application");
ProtocolStringList applicationCodes = request.getApplicationCodeList();
ApplicationMapping.Builder builder = ApplicationMapping.newBuilder();
for (int i = 0; i < applicationCodes.size(); i++) {
String applicationCode = applicationCodes.get(i);
int applicationId = applicationIDService.getOrCreate(applicationCode);
KeyWithIntegerValue value = KeyWithIntegerValue.newBuilder().setKey(applicationCode).setValue(applicationId).build();
ApplicationMapping mapping = ApplicationMapping.newBuilder().addApplication(i, value).build();
responseObserver.onNext(mapping);
if (applicationId != 0) {
KeyWithIntegerValue value = KeyWithIntegerValue.newBuilder().setKey(applicationCode).setValue(applicationId).build();
builder.addApplication(value);
}
}
responseObserver.onNext(builder.build());
responseObserver.onCompleted();
}
}
......@@ -30,10 +30,13 @@ public class ServiceNameDiscoveryServiceHandler extends ServiceNameDiscoveryServ
int applicationId = serviceNameElement.getApplicationId();
String serviceName = serviceNameElement.getServiceName();
int serviceId = serviceNameService.getOrCreate(applicationId, serviceName);
ServiceNameMappingElement.Builder mappingElement = ServiceNameMappingElement.newBuilder();
mappingElement.setServiceId(serviceId);
mappingElement.setElement(serviceNameElement);
builder.addElements(mappingElement);
if (serviceId != 0) {
ServiceNameMappingElement.Builder mappingElement = ServiceNameMappingElement.newBuilder();
mappingElement.setServiceId(serviceId);
mappingElement.setElement(serviceNameElement);
builder.addElements(mappingElement);
}
}
responseObserver.onNext(builder.build());
......
......@@ -33,7 +33,7 @@ public class InstanceIDService {
logger.error(e.getMessage(), e);
}
}
return applicationId;
return instanceId;
}
public void recover(int instanceId, int applicationId, long registerTime, String osInfo) {
......
......@@ -2,11 +2,12 @@ package org.skywalking.apm.collector.agentstream.worker.global;
import java.util.ArrayList;
import java.util.List;
import org.skywalking.apm.collector.storage.define.global.GlobalTraceDataDefine;
import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.GlobalTraceIdsListener;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.core.framework.CollectorContextHelper;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.global.GlobalTraceDataDefine;
import org.skywalking.apm.collector.stream.StreamModuleContext;
import org.skywalking.apm.collector.stream.StreamModuleGroupDefine;
import org.skywalking.apm.collector.stream.worker.WorkerInvokeException;
......@@ -35,7 +36,13 @@ public class GlobalTraceSpanListener implements FirstSpanListener, GlobalTraceId
@Override public void parseGlobalTraceId(UniqueId uniqueId) {
StringBuilder globalTraceIdBuilder = new StringBuilder();
uniqueId.getIdPartsList().forEach(globalTraceIdBuilder::append);
for (int i = 0; i < uniqueId.getIdPartsList().size(); i++) {
if (i == 0) {
globalTraceIdBuilder.append(uniqueId.getIdPartsList().get(i));
} else {
globalTraceIdBuilder.append(".").append(uniqueId.getIdPartsList().get(i));
}
}
globalTraceIds.add(globalTraceIdBuilder.toString());
}
......@@ -46,7 +53,7 @@ public class GlobalTraceSpanListener implements FirstSpanListener, GlobalTraceId
for (String globalTraceId : globalTraceIds) {
GlobalTraceDataDefine.GlobalTrace globalTrace = new GlobalTraceDataDefine.GlobalTrace();
globalTrace.setGlobalTraceId(globalTraceId);
globalTrace.setId(segmentId + globalTraceId);
globalTrace.setId(segmentId + Const.ID_SPLIT + globalTraceId);
globalTrace.setSegmentId(segmentId);
globalTrace.setTimeBucket(timeBucket);
try {
......
......@@ -22,7 +22,7 @@ public class InstPerformanceSpanListener implements EntrySpanListener, FirstSpan
private final Logger logger = LoggerFactory.getLogger(InstPerformanceSpanListener.class);
private int applicationId;
private int applicationInstanceId;
private int instanceId;
private long cost;
private long timeBucket;
......@@ -33,7 +33,7 @@ public class InstPerformanceSpanListener implements EntrySpanListener, FirstSpan
@Override
public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) {
this.applicationId = applicationId;
this.applicationInstanceId = applicationInstanceId;
this.instanceId = applicationInstanceId;
this.cost = spanObject.getEndTime() - spanObject.getStartTime();
timeBucket = TimeBucketUtils.INSTANCE.getSecondTimeBucket(spanObject.getStartTime());
}
......@@ -42,13 +42,12 @@ public class InstPerformanceSpanListener implements EntrySpanListener, FirstSpan
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
InstPerformanceDataDefine.InstPerformance instPerformance = new InstPerformanceDataDefine.InstPerformance();
instPerformance.setId(timeBucket + Const.ID_SPLIT + applicationInstanceId);
instPerformance.setId(timeBucket + Const.ID_SPLIT + instanceId);
instPerformance.setApplicationId(applicationId);
instPerformance.setInstanceId(applicationInstanceId);
instPerformance.setCallTimes(1);
instPerformance.setInstanceId(instanceId);
instPerformance.setCalls(1);
instPerformance.setCostTotal(cost);
instPerformance.setTimeBucket(timeBucket);
instPerformance.setS5TimeBucket(TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(timeBucket));
try {
logger.debug("send to instance performance persistence worker, id: {}", instPerformance.getId());
......
......@@ -28,10 +28,9 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO,
Map<String, Object> source = getResponse.getSource();
data.setDataInteger(0, (Integer)source.get(InstPerformanceTable.COLUMN_APPLICATION_ID));
data.setDataInteger(1, (Integer)source.get(InstPerformanceTable.COLUMN_INSTANCE_ID));
data.setDataInteger(2, (Integer)source.get(InstPerformanceTable.COLUMN_CALL_TIMES));
data.setDataInteger(2, (Integer)source.get(InstPerformanceTable.COLUMN_CALLS));
data.setDataLong(0, ((Number)source.get(InstPerformanceTable.COLUMN_COST_TOTAL)).longValue());
data.setDataLong(1, ((Number)source.get(InstPerformanceTable.COLUMN_TIME_BUCKET)).longValue());
data.setDataLong(2, ((Number)source.get(InstPerformanceTable.COLUMN_5S_TIME_BUCKET)).longValue());
return data;
} else {
return null;
......@@ -42,10 +41,9 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO,
Map<String, Object> source = new HashMap<>();
source.put(InstPerformanceTable.COLUMN_APPLICATION_ID, data.getDataInteger(0));
source.put(InstPerformanceTable.COLUMN_INSTANCE_ID, data.getDataInteger(1));
source.put(InstPerformanceTable.COLUMN_CALL_TIMES, data.getDataInteger(2));
source.put(InstPerformanceTable.COLUMN_CALLS, data.getDataInteger(2));
source.put(InstPerformanceTable.COLUMN_COST_TOTAL, data.getDataLong(0));
source.put(InstPerformanceTable.COLUMN_TIME_BUCKET, data.getDataLong(1));
source.put(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, data.getDataLong(2));
return getClient().prepareIndex(InstPerformanceTable.TABLE, data.getDataString(0)).setSource(source);
}
......@@ -54,10 +52,9 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO,
Map<String, Object> source = new HashMap<>();
source.put(InstPerformanceTable.COLUMN_APPLICATION_ID, data.getDataInteger(0));
source.put(InstPerformanceTable.COLUMN_INSTANCE_ID, data.getDataInteger(1));
source.put(InstPerformanceTable.COLUMN_CALL_TIMES, data.getDataInteger(2));
source.put(InstPerformanceTable.COLUMN_CALLS, data.getDataInteger(2));
source.put(InstPerformanceTable.COLUMN_COST_TOTAL, data.getDataLong(0));
source.put(InstPerformanceTable.COLUMN_TIME_BUCKET, data.getDataLong(1));
source.put(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, data.getDataLong(2));
return getClient().prepareUpdate(InstPerformanceTable.TABLE, data.getDataString(0)).setDoc(source);
}
......
......@@ -28,9 +28,8 @@ public class InstPerformanceEsTableDefine extends ElasticSearchTableDefine {
@Override public void initialize() {
addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_APPLICATION_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_INSTANCE_ID, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_CALL_TIMES, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_CALLS, ElasticSearchColumnDefine.Type.Integer.name()));
addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_COST_TOTAL, ElasticSearchColumnDefine.Type.Long.name()));
addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name()));
addColumn(new ElasticSearchColumnDefine(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, ElasticSearchColumnDefine.Type.Long.name()));
}
}
......@@ -17,9 +17,8 @@ public class InstPerformanceH2TableDefine extends H2TableDefine {
addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_ID, H2ColumnDefine.Type.Varchar.name()));
addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_APPLICATION_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_INSTANCE_ID, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_CALL_TIMES, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_CALLS, H2ColumnDefine.Type.Int.name()));
addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_COST_TOTAL, H2ColumnDefine.Type.Bigint.name()));
addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name()));
addColumn(new H2ColumnDefine(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, H2ColumnDefine.Type.Bigint.name()));
}
}
package org.skywalking.apm.collector.agentstream.worker.noderef;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache;
import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener;
import org.skywalking.apm.collector.core.framework.CollectorContextHelper;
import org.skywalking.apm.collector.core.util.CollectionUtils;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceDataDefine;
......@@ -23,106 +23,75 @@ import org.slf4j.LoggerFactory;
/**
* @author pengys5
*/
public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanListener, FirstSpanListener, RefsListener {
public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanListener, RefsListener {
private final Logger logger = LoggerFactory.getLogger(NodeReferenceSpanListener.class);
private List<NodeReferenceDataDefine.NodeReferenceSum> nodeExitReferences = new ArrayList<>();
private List<NodeReferenceDataDefine.NodeReferenceSum> nodeEntryReferences = new ArrayList<>();
private List<NodeReferenceDataDefine.NodeReferenceSum> nodeReferences = new ArrayList<>();
private long timeBucket;
private boolean hasReference = false;
private long startTime;
private long endTime;
private boolean isError;
private List<NodeReferenceDataDefine.NodeReference> nodeReferences = new LinkedList<>();
private List<NodeReferenceDataDefine.NodeReference> references = new LinkedList<>();
@Override
public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) {
NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum();
referenceSum.setApplicationId(applicationId);
referenceSum.setBehindApplicationId(spanObject.getPeerId());
NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference();
nodeReference.setFrontApplicationId(applicationId);
nodeReference.setBehindApplicationId(spanObject.getPeerId());
nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()));
String id = String.valueOf(applicationId);
StringBuilder idBuilder = new StringBuilder();
idBuilder.append(nodeReference.getTimeBucket()).append(Const.ID_SPLIT).append(applicationId);
if (spanObject.getPeerId() != 0) {
referenceSum.setBehindPeer(Const.EMPTY_STRING);
id = id + Const.ID_SPLIT + String.valueOf(spanObject.getPeerId());
nodeReference.setBehindPeer(Const.EMPTY_STRING);
idBuilder.append(Const.ID_SPLIT).append(spanObject.getPeerId());
} else {
referenceSum.setBehindPeer(spanObject.getPeer());
id = id + Const.ID_SPLIT + spanObject.getPeer();
nodeReference.setBehindPeer(spanObject.getPeer());
idBuilder.append(Const.ID_SPLIT).append(spanObject.getPeer());
}
referenceSum.setId(id);
nodeExitReferences.add(buildNodeRefSum(referenceSum, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError()));
nodeReference.setId(idBuilder.toString());
nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError()));
}
@Override
public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) {
NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum();
referenceSum.setApplicationId(Const.USER_ID);
referenceSum.setBehindApplicationId(applicationId);
referenceSum.setBehindPeer(Const.EMPTY_STRING);
if (CollectionUtils.isNotEmpty(references)) {
references.forEach(nodeReference -> {
nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()));
String idBuilder = String.valueOf(nodeReference.getTimeBucket()) + Const.ID_SPLIT + nodeReference.getFrontApplicationId() +
Const.ID_SPLIT + nodeReference.getBehindApplicationId();
nodeReference.setId(idBuilder);
nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError()));
});
} else {
NodeReferenceDataDefine.NodeReference nodeReference = new NodeReferenceDataDefine.NodeReference();
nodeReference.setFrontApplicationId(Const.USER_ID);
nodeReference.setBehindApplicationId(applicationId);
nodeReference.setBehindPeer(Const.EMPTY_STRING);
nodeReference.setTimeBucket(TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime()));
String id = String.valueOf(Const.USER_ID) + Const.ID_SPLIT + String.valueOf(applicationId);
referenceSum.setId(id);
nodeEntryReferences.add(buildNodeRefSum(referenceSum, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError()));
}
String idBuilder = String.valueOf(nodeReference.getTimeBucket()) + Const.ID_SPLIT + nodeReference.getFrontApplicationId() +
Const.ID_SPLIT + nodeReference.getBehindApplicationId();
private NodeReferenceDataDefine.NodeReferenceSum buildNodeRefSum(NodeReferenceDataDefine.NodeReferenceSum referenceSum,
long startTime, long endTime, boolean isError) {
long cost = endTime - startTime;
if (cost <= 1000 && !isError) {
referenceSum.setS1LTE(1);
} else if (1000 < cost && cost <= 3000 && !isError) {
referenceSum.setS3LTE(1);
} else if (3000 < cost && cost <= 5000 && !isError) {
referenceSum.setS5LTE(1);
} else if (5000 < cost && !isError) {
referenceSum.setS5GT(1);
} else {
referenceSum.setError(1);
nodeReference.setId(idBuilder);
nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError()));
}
referenceSum.setSummary(1);
return referenceSum;
}
@Override
public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) {
timeBucket = TimeBucketUtils.INSTANCE.getMinuteTimeBucket(spanObject.getStartTime());
startTime = spanObject.getStartTime();
endTime = spanObject.getEndTime();
isError = spanObject.getIsError();
}
@Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId,
String segmentId) {
int parentApplicationId = InstanceCache.get(reference.getParentApplicationInstanceId());
NodeReferenceDataDefine.NodeReferenceSum referenceSum = new NodeReferenceDataDefine.NodeReferenceSum();
referenceSum.setApplicationId(parentApplicationId);
NodeReferenceDataDefine.NodeReference referenceSum = new NodeReferenceDataDefine.NodeReference();
referenceSum.setFrontApplicationId(parentApplicationId);
referenceSum.setBehindApplicationId(applicationId);
referenceSum.setBehindPeer(Const.EMPTY_STRING);
String id = String.valueOf(parentApplicationId) + Const.ID_SPLIT + String.valueOf(applicationId);
referenceSum.setId(id);
hasReference = true;
nodeReferences.add(referenceSum);
references.add(referenceSum);
}
@Override public void build() {
logger.debug("node reference summary listener build");
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
if (!hasReference) {
nodeExitReferences.addAll(nodeEntryReferences);
} else {
nodeReferences.forEach(referenceSum -> {
nodeExitReferences.add(buildNodeRefSum(referenceSum, startTime, endTime, isError));
});
}
for (NodeReferenceDataDefine.NodeReferenceSum referenceSum : nodeExitReferences) {
referenceSum.setId(timeBucket + Const.ID_SPLIT + referenceSum.getId());
referenceSum.setTimeBucket(timeBucket);
for (NodeReferenceDataDefine.NodeReference referenceSum : nodeReferences) {
try {
logger.debug("send to node reference summary aggregation worker, id: {}", referenceSum.getId());
context.getClusterWorkerContext().lookup(NodeReferenceAggregationWorker.WorkerRole.INSTANCE).tell(referenceSum.toData());
......@@ -131,4 +100,22 @@ public class NodeReferenceSpanListener implements EntrySpanListener, ExitSpanLis
}
}
}
private NodeReferenceDataDefine.NodeReference buildNodeRefSum(NodeReferenceDataDefine.NodeReference reference,
long startTime, long endTime, boolean isError) {
long cost = endTime - startTime;
if (cost <= 1000 && !isError) {
reference.setS1LTE(1);
} else if (1000 < cost && cost <= 3000 && !isError) {
reference.setS3LTE(1);
} else if (3000 < cost && cost <= 5000 && !isError) {
reference.setS5LTE(1);
} else if (5000 < cost && !isError) {
reference.setS5GT(1);
} else {
reference.setError(1);
}
reference.setSummary(1);
return reference;
}
}
package org.skywalking.apm.collector.agentstream.worker.register.instance;
import org.skywalking.apm.collector.agentstream.worker.register.IdAutoIncrement;
import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefine;
import org.skywalking.apm.collector.agentstream.worker.register.instance.dao.IInstanceDAO;
import org.skywalking.apm.collector.storage.dao.DAOContainer;
import org.skywalking.apm.collector.storage.define.DataDefine;
import org.skywalking.apm.collector.storage.define.register.ApplicationDataDefine;
import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine;
import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorker;
import org.skywalking.apm.collector.stream.worker.AbstractLocalAsyncWorkerProvider;
......@@ -11,7 +11,6 @@ import org.skywalking.apm.collector.stream.worker.ClusterWorkerContext;
import org.skywalking.apm.collector.stream.worker.ProviderNotFoundException;
import org.skywalking.apm.collector.stream.worker.Role;
import org.skywalking.apm.collector.stream.worker.WorkerException;
import org.skywalking.apm.collector.storage.define.DataDefine;
import org.skywalking.apm.collector.stream.worker.selector.ForeverFirstSelector;
import org.skywalking.apm.collector.stream.worker.selector.WorkerSelector;
import org.slf4j.Logger;
......@@ -40,16 +39,25 @@ public class InstanceRegisterSerialWorker extends AbstractLocalAsyncWorker {
IInstanceDAO dao = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName());
int instanceId = dao.getInstanceId(instance.getApplicationId(), instance.getAgentUUID());
if (instanceId == 0) {
int min = dao.getMinInstanceId();
if (min == 0) {
// int min = dao.getMinInstanceId();
// if (min == 0) {
// instance.setId("1");
// instance.setInstanceId(1);
// } else {
// int max = dao.getMaxInstanceId();
// instanceId = IdAutoIncrement.INSTANCE.increment(min, max);
// instance.setId(String.valueOf(instanceId));
// instance.setInstanceId(instanceId);
// }
int max = dao.getMaxInstanceId();
if (max == 0) {
instance.setId("1");
instance.setInstanceId(1);
} else {
int max = dao.getMaxInstanceId();
instanceId = IdAutoIncrement.INSTANCE.increment(min, max);
instance.setId(String.valueOf(instanceId));
instance.setInstanceId(instanceId);
instance.setId(String.valueOf(max + 1));
instance.setInstanceId(max + 1);
}
dao.save(instance);
}
}
......
......@@ -2,6 +2,7 @@ package org.skywalking.apm.collector.agentstream.worker.register.servicename;
import org.skywalking.apm.collector.agentstream.worker.register.IdAutoIncrement;
import org.skywalking.apm.collector.agentstream.worker.register.servicename.dao.IServiceNameDAO;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.storage.dao.DAOContainer;
import org.skywalking.apm.collector.storage.define.DataDefine;
import org.skywalking.apm.collector.storage.define.register.ServiceNameDataDefine;
......@@ -42,8 +43,11 @@ public class ServiceNameRegisterSerialWorker extends AbstractLocalAsyncWorker {
if (serviceId == 0) {
int min = dao.getMinServiceId();
if (min == 0) {
serviceName.setServiceId(1);
serviceName.setId("1");
ServiceNameDataDefine.ServiceName noneServiceName = new ServiceNameDataDefine.ServiceName("1", Const.NONE_SERVICE_NAME, 0, Const.NONE_SERVICE_ID);
dao.save(noneServiceName);
serviceName.setServiceId(-1);
serviceName.setId("-1");
} else {
int max = dao.getMaxServiceId();
serviceId = IdAutoIncrement.INSTANCE.increment(min, max);
......
......@@ -49,9 +49,15 @@ public class SegmentParse {
public void parse(List<UniqueId> traceIds, TraceSegmentObject segmentObject) {
StringBuilder segmentIdBuilder = new StringBuilder();
segmentObject.getTraceSegmentId().getIdPartsList().forEach(part -> {
segmentIdBuilder.append(part);
});
for (int i = 0; i < segmentObject.getTraceSegmentId().getIdPartsList().size(); i++) {
if (i == 0) {
segmentIdBuilder.append(segmentObject.getTraceSegmentId().getIdPartsList().get(i));
} else {
segmentIdBuilder.append(".").append(segmentObject.getTraceSegmentId().getIdPartsList().get(i));
}
}
String segmentId = segmentIdBuilder.toString();
for (UniqueId uniqueId : traceIds) {
......@@ -88,7 +94,7 @@ public class SegmentParse {
buildSegment(segmentId, segmentObject.toByteArray());
}
public void buildSegment(String id, byte[] dataBinary) {
private void buildSegment(String id, byte[] dataBinary) {
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
SegmentDataDefine.Segment segment = new SegmentDataDefine.Segment();
segment.setId(id);
......@@ -103,7 +109,7 @@ public class SegmentParse {
}
private void notifyListenerToBuild() {
spanListeners.forEach(listener -> listener.build());
spanListeners.forEach(SpanListener::build);
}
private void notifyExitListener(SpanObject spanObject, int applicationId, int applicationInstanceId,
......
......@@ -2,14 +2,14 @@ package org.skywalking.apm.collector.agentstream.worker.segment.cost;
import java.util.ArrayList;
import java.util.List;
import org.skywalking.apm.collector.agentstream.worker.cache.ServiceCache;
import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.LocalSpanListener;
import org.skywalking.apm.collector.storage.define.segment.SegmentCostDataDefine;
import org.skywalking.apm.collector.agentstream.worker.util.ExchangeMarkUtils;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.core.framework.CollectorContextHelper;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.segment.SegmentCostDataDefine;
import org.skywalking.apm.collector.stream.StreamModuleContext;
import org.skywalking.apm.collector.stream.StreamModuleGroupDefine;
import org.skywalking.apm.collector.stream.worker.WorkerInvokeException;
......@@ -45,7 +45,7 @@ public class SegmentCostSpanListener implements EntrySpanListener, ExitSpanListe
if (spanObject.getOperationNameId() == 0) {
segmentCost.setServiceName(spanObject.getOperationName());
} else {
segmentCost.setServiceName(ExchangeMarkUtils.INSTANCE.buildMarkedID(spanObject.getOperationNameId()));
segmentCost.setServiceName(ServiceCache.getServiceName(spanObject.getOperationNameId()));
}
segmentCosts.add(segmentCost);
......
......@@ -29,6 +29,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener
private int applicationId;
private int entryServiceId;
private String entryServiceName;
private boolean hasEntry = false;
@Override
public void parseEntry(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) {
......@@ -39,6 +40,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener
} else {
this.entryServiceName = ServiceCache.getServiceName(this.entryServiceId);
}
this.hasEntry = true;
}
@Override public void parseRef(TraceSegmentReference reference, int applicationId, int applicationInstanceId,
......@@ -54,7 +56,7 @@ public class ServiceEntrySpanListener implements RefsListener, FirstSpanListener
@Override public void build() {
logger.debug("entry service listener build");
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
if (!hasReference) {
if (!hasReference && hasEntry) {
ServiceEntryDataDefine.ServiceEntry serviceEntry = new ServiceEntryDataDefine.ServiceEntry();
serviceEntry.setId(applicationId + Const.ID_SPLIT + entryServiceName);
serviceEntry.setApplicationId(applicationId);
......
package org.skywalking.apm.collector.agentstream.worker.serviceref;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import org.skywalking.apm.collector.agentstream.worker.cache.InstanceCache;
import org.skywalking.apm.collector.agentstream.worker.segment.EntrySpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.ExitSpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.FirstSpanListener;
import org.skywalking.apm.collector.agentstream.worker.segment.RefsListener;
import org.skywalking.apm.collector.core.framework.CollectorContextHelper;
......@@ -15,7 +14,6 @@ import org.skywalking.apm.collector.stream.StreamModuleContext;
import org.skywalking.apm.collector.stream.StreamModuleGroupDefine;
import org.skywalking.apm.collector.stream.worker.WorkerInvokeException;
import org.skywalking.apm.collector.stream.worker.WorkerNotFoundException;
import org.skywalking.apm.network.proto.SpanLayer;
import org.skywalking.apm.network.proto.SpanObject;
import org.skywalking.apm.network.proto.TraceSegmentReference;
import org.slf4j.Logger;
......@@ -24,18 +22,18 @@ import org.slf4j.LoggerFactory;
/**
* @author pengys5
*/
public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpanListener, ExitSpanListener, RefsListener {
public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpanListener, RefsListener {
private final Logger logger = LoggerFactory.getLogger(ServiceReferenceSpanListener.class);
private List<ServiceReferenceDataDefine.ServiceReference> exitServiceRefs = new ArrayList<>();
private List<TraceSegmentReference> referenceServices = new ArrayList<>();
private List<TraceSegmentReference> referenceServices = new LinkedList<>();
private int serviceId = 0;
private String serviceName = "";
private long startTime = 0;
private long endTime = 0;
private boolean isError = false;
private long timeBucket;
private boolean hasEntry = false;
@Override
public void parseFirst(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) {
......@@ -58,21 +56,7 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa
startTime = spanObject.getStartTime();
endTime = spanObject.getEndTime();
isError = spanObject.getIsError();
}
@Override
public void parseExit(SpanObject spanObject, int applicationId, int applicationInstanceId, String segmentId) {
if (spanObject.getSpanLayer().equals(SpanLayer.Database)) {
ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference();
serviceReference.setBehindServiceId(spanObject.getOperationNameId());
if (spanObject.getOperationNameId() == 0) {
serviceReference.setBehindServiceName(String.valueOf(applicationId) + Const.ID_SPLIT + spanObject.getOperationName());
} else {
serviceReference.setBehindServiceName(Const.EMPTY_STRING);
}
calculateCost(serviceReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError());
exitServiceRefs.add(serviceReference);
}
this.hasEntry = true;
}
private void calculateCost(ServiceReferenceDataDefine.ServiceReference serviceReference, long startTime,
......@@ -96,65 +80,41 @@ public class ServiceReferenceSpanListener implements FirstSpanListener, EntrySpa
@Override public void build() {
logger.debug("service reference listener build");
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
if (referenceServices.size() > 0) {
referenceServices.forEach(reference -> {
ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference();
int entryServiceId = reference.getEntryServiceId();
String entryServiceName = buildServiceName(reference.getEntryApplicationInstanceId(), reference.getEntryServiceId(), reference.getEntryServiceName());
if (hasEntry) {
StreamModuleContext context = (StreamModuleContext)CollectorContextHelper.INSTANCE.getContext(StreamModuleGroupDefine.GROUP_NAME);
int frontServiceId = reference.getParentServiceId();
String frontServiceName = buildServiceName(reference.getParentApplicationInstanceId(), reference.getParentServiceId(), reference.getParentServiceName());
int behindServiceId = serviceId;
String behindServiceName = serviceName;
calculateCost(serviceReference, startTime, endTime, isError);
logger.debug("has reference, entryServiceId: {}, entryServiceName: {}", entryServiceId, entryServiceName);
sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName);
});
} else {
ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference();
int entryServiceId = serviceId;
String entryServiceName = serviceName;
int frontServiceId = Const.NONE_SERVICE_ID;
String frontServiceName = Const.EMPTY_STRING;
int behindServiceId = serviceId;
String behindServiceName = serviceName;
calculateCost(serviceReference, startTime, endTime, isError);
sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName);
}
exitServiceRefs.forEach(serviceReference -> {
if (referenceServices.size() > 0) {
referenceServices.forEach(reference -> {
ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference();
int entryServiceId = reference.getEntryServiceId();
String entryServiceName = buildServiceName(reference.getEntryApplicationInstanceId(), reference.getEntryServiceId(), reference.getEntryServiceName());
int frontServiceId = reference.getParentServiceId();
String frontServiceName = buildServiceName(reference.getParentApplicationInstanceId(), reference.getParentServiceId(), reference.getParentServiceName());
int behindServiceId = serviceReference.getBehindServiceId();
String behindServiceName = serviceReference.getBehindServiceName();
int behindServiceId = serviceId;
String behindServiceName = serviceName;
calculateCost(serviceReference, startTime, endTime, isError);
logger.debug("has reference, entryServiceId: {}, entryServiceName: {}", entryServiceId, entryServiceName);
sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName);
});
} else {
ServiceReferenceDataDefine.ServiceReference serviceReference = new ServiceReferenceDataDefine.ServiceReference();
int entryServiceId = serviceId;
String entryServiceName = serviceName;
int frontServiceId = serviceId;
String frontServiceName = serviceName;
int frontServiceId = Const.NONE_SERVICE_ID;
String frontServiceName = Const.EMPTY_STRING;
int behindServiceId = serviceReference.getBehindServiceId();
String behindServiceName = serviceReference.getBehindServiceName();
int behindServiceId = serviceId;
String behindServiceName = serviceName;
calculateCost(serviceReference, startTime, endTime, isError);
sendToAggregationWorker(context, serviceReference, entryServiceId, entryServiceName, frontServiceId, frontServiceName, behindServiceId, behindServiceName);
}
});
}
}
private void sendToAggregationWorker(StreamModuleContext context,
......
package org.skywalking.apm.collector.agentstream.mock.grpc;
import io.grpc.ManagedChannel;
import org.skywalking.apm.network.proto.Application;
import org.skywalking.apm.network.proto.ApplicationMapping;
import org.skywalking.apm.network.proto.ApplicationRegisterServiceGrpc;
/**
* @author pengys5
*/
public class ApplicationRegister {
public static int register(ManagedChannel channel, String applicationCode) {
ApplicationRegisterServiceGrpc.ApplicationRegisterServiceBlockingStub stub = ApplicationRegisterServiceGrpc.newBlockingStub(channel);
Application application = Application.newBuilder().addApplicationCode(applicationCode).build();
ApplicationMapping mapping = stub.register(application);
int applicationId = mapping.getApplication(0).getValue();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
return applicationId;
}
}
......@@ -8,21 +8,10 @@ import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
import org.junit.Test;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.network.proto.Application;
import org.skywalking.apm.network.proto.ApplicationInstance;
import org.skywalking.apm.network.proto.ApplicationInstanceMapping;
import org.skywalking.apm.network.proto.ApplicationMapping;
import org.skywalking.apm.network.proto.ApplicationRegisterServiceGrpc;
import org.skywalking.apm.network.proto.Downstream;
import org.skywalking.apm.network.proto.InstanceDiscoveryServiceGrpc;
import org.skywalking.apm.network.proto.KeyWithStringValue;
import org.skywalking.apm.network.proto.LogMessage;
import org.skywalking.apm.network.proto.OSInfo;
import org.skywalking.apm.network.proto.RefType;
import org.skywalking.apm.network.proto.ServiceNameCollection;
import org.skywalking.apm.network.proto.ServiceNameDiscoveryServiceGrpc;
import org.skywalking.apm.network.proto.ServiceNameElement;
import org.skywalking.apm.network.proto.ServiceNameMappingCollection;
import org.skywalking.apm.network.proto.SpanLayer;
import org.skywalking.apm.network.proto.SpanObject;
import org.skywalking.apm.network.proto.SpanType;
......@@ -58,28 +47,28 @@ public class GrpcSegmentPost {
int providerEntryServiceId = 0;
while (consumerApplicationId == 0) {
consumerApplicationId = registerApplication(channel, "consumer");
consumerApplicationId = ApplicationRegister.register(channel, "consumer");
}
while (consumerExitApplicationId == 0) {
consumerExitApplicationId = registerApplication(channel, "172.25.0.4:20880");
consumerExitApplicationId = ApplicationRegister.register(channel, "172.25.0.4:20880");
}
while (providerApplicationId == 0) {
providerApplicationId = registerApplication(channel, "provider");
providerApplicationId = ApplicationRegister.register(channel, "provider");
}
while (consumerInstanceId == 0) {
consumerInstanceId = registerInstanceId(channel, "ConsumerUUID", consumerApplicationId, "consumer_host_name", 1);
consumerInstanceId = InstanceRegister.register(channel, "ConsumerUUID", consumerApplicationId, "consumer_host_name", 1);
}
while (providerInstanceId == 0) {
providerInstanceId = registerInstanceId(channel, "ProviderUUID", providerApplicationId, "provider_host_name", 2);
providerInstanceId = InstanceRegister.register(channel, "ProviderUUID", providerApplicationId, "provider_host_name", 2);
}
while (consumerEntryServiceId == 0) {
consumerEntryServiceId = registerServiceId(channel, consumerApplicationId, "/dubbox-case/case/dubbox-rest");
consumerEntryServiceId = ServiceRegister.register(channel, consumerApplicationId, "/dubbox-case/case/dubbox-rest");
}
while (consumerExitServiceId == 0) {
consumerExitServiceId = registerServiceId(channel, consumerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()");
consumerExitServiceId = ServiceRegister.register(channel, consumerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()");
}
while (providerEntryServiceId == 0) {
providerEntryServiceId = registerServiceId(channel, providerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()");
providerEntryServiceId = ServiceRegister.register(channel, providerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()");
}
Ids ids = new Ids();
......@@ -121,64 +110,6 @@ public class GrpcSegmentPost {
}
}
private int registerApplication(ManagedChannel channel, String applicationCode) {
ApplicationRegisterServiceGrpc.ApplicationRegisterServiceBlockingStub stub = ApplicationRegisterServiceGrpc.newBlockingStub(channel);
Application application = Application.newBuilder().addApplicationCode(applicationCode).build();
ApplicationMapping mapping = stub.register(application);
int applicationId = mapping.getApplication(0).getValue();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
return applicationId;
}
private int registerInstanceId(ManagedChannel channel, String agentUUId, Integer applicationId,
String hostName, int processNo) {
InstanceDiscoveryServiceGrpc.InstanceDiscoveryServiceBlockingStub stub = InstanceDiscoveryServiceGrpc.newBlockingStub(channel);
ApplicationInstance.Builder instance = ApplicationInstance.newBuilder();
instance.setApplicationId(applicationId);
instance.setRegisterTime(System.currentTimeMillis());
instance.setAgentUUID(agentUUId);
OSInfo.Builder osInfo = OSInfo.newBuilder();
osInfo.setHostname(hostName);
osInfo.setOsName("Linux");
osInfo.setProcessNo(processNo);
osInfo.addIpv4S("10.0.0.1");
osInfo.addIpv4S("10.0.0.2");
instance.setOsinfo(osInfo.build());
ApplicationInstanceMapping mapping = stub.register(instance.build());
int instanceId = mapping.getApplicationInstanceId();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
return instanceId;
}
private int registerServiceId(ManagedChannel channel, int applicationId, String serviceName) {
ServiceNameDiscoveryServiceGrpc.ServiceNameDiscoveryServiceBlockingStub stub = ServiceNameDiscoveryServiceGrpc.newBlockingStub(channel);
ServiceNameCollection.Builder collection = ServiceNameCollection.newBuilder();
ServiceNameElement.Builder element = ServiceNameElement.newBuilder();
element.setApplicationId(applicationId);
element.setServiceName(serviceName);
collection.addElements(element);
ServiceNameMappingCollection mappingCollection = stub.discovery(collection.build());
int serviceId = mappingCollection.getElements(0).getServiceId();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
return serviceId;
}
class BuildNewSegment implements Runnable {
private final ManagedChannel segmentChannel;
private final Ids ids;
......
package org.skywalking.apm.collector.agentstream.mock.grpc;
import io.grpc.ManagedChannel;
import org.skywalking.apm.network.proto.ApplicationInstance;
import org.skywalking.apm.network.proto.ApplicationInstanceMapping;
import org.skywalking.apm.network.proto.InstanceDiscoveryServiceGrpc;
import org.skywalking.apm.network.proto.OSInfo;
/**
* @author pengys5
*/
public class InstanceRegister {
public static int register(ManagedChannel channel, String agentUUId, Integer applicationId,
String hostName, int processNo) {
InstanceDiscoveryServiceGrpc.InstanceDiscoveryServiceBlockingStub stub = InstanceDiscoveryServiceGrpc.newBlockingStub(channel);
ApplicationInstance.Builder instance = ApplicationInstance.newBuilder();
instance.setApplicationId(applicationId);
instance.setRegisterTime(System.currentTimeMillis());
instance.setAgentUUID(agentUUId);
OSInfo.Builder osInfo = OSInfo.newBuilder();
osInfo.setHostname(hostName);
osInfo.setOsName("Linux");
osInfo.setProcessNo(processNo);
osInfo.addIpv4S("10.0.0.1");
osInfo.addIpv4S("10.0.0.2");
instance.setOsinfo(osInfo.build());
ApplicationInstanceMapping mapping = stub.register(instance.build());
int instanceId = mapping.getApplicationInstanceId();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
return instanceId;
}
}
package org.skywalking.apm.collector.agentstream.mock.grpc;
import io.grpc.ManagedChannel;
import org.skywalking.apm.network.proto.ServiceNameCollection;
import org.skywalking.apm.network.proto.ServiceNameDiscoveryServiceGrpc;
import org.skywalking.apm.network.proto.ServiceNameElement;
import org.skywalking.apm.network.proto.ServiceNameMappingCollection;
/**
* @author pengys5
*/
public class ServiceRegister {
public static int register(ManagedChannel channel, int applicationId, String serviceName) {
ServiceNameDiscoveryServiceGrpc.ServiceNameDiscoveryServiceBlockingStub stub = ServiceNameDiscoveryServiceGrpc.newBlockingStub(channel);
ServiceNameCollection.Builder collection = ServiceNameCollection.newBuilder();
ServiceNameElement.Builder element = ServiceNameElement.newBuilder();
element.setApplicationId(applicationId);
element.setServiceName(serviceName);
collection.addElements(element);
ServiceNameMappingCollection mappingCollection = stub.discovery(collection.build());
int serviceId = mappingCollection.getElements(0).getServiceId();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
}
return serviceId;
}
}
package org.skywalking.apm.collector.agentstream.mock.grpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.stub.StreamObserver;
import org.skywalking.apm.network.proto.Downstream;
import org.skywalking.apm.network.proto.SpanLayer;
import org.skywalking.apm.network.proto.SpanObject;
import org.skywalking.apm.network.proto.SpanType;
import org.skywalking.apm.network.proto.TraceSegmentObject;
import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc;
import org.skywalking.apm.network.proto.UniqueId;
import org.skywalking.apm.network.proto.UpstreamSegment;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author pengys5
*/
public class SingleHasEntryHasExitNoRefSpan {
public static void main(String[] args) {
Post post = new Post();
post.send();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
static class Post {
private final Logger logger = LoggerFactory.getLogger(Post.class);
public void send() {
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build();
int applicationId = 0;
int instanceId = 0;
int entryServiceId = 0;
while (applicationId == 0) {
applicationId = ApplicationRegister.register(channel, "consumer");
}
while (instanceId == 0) {
instanceId = InstanceRegister.register(channel, "ConsumerUUID", applicationId, "consumer_host_name", 1);
}
while (entryServiceId == 0) {
entryServiceId = ServiceRegister.register(channel, applicationId, "/dubbox-case/case/dubbox-rest");
}
TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel);
StreamObserver<UpstreamSegment> streamObserver = stub.collect(new StreamObserver<Downstream>() {
@Override public void onNext(Downstream downstream) {
}
@Override public void onError(Throwable throwable) {
logger.error(throwable.getMessage(), throwable);
}
@Override public void onCompleted() {
}
});
long now = System.currentTimeMillis();
int id = 1;
UniqueId.Builder builder = UniqueId.newBuilder();
builder.addIdParts(id);
builder.addIdParts(id);
builder.addIdParts(id);
UniqueId segmentId = builder.build();
UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder();
upstream.addGlobalTraceIds(segmentId);
TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder();
segmentBuilder.setApplicationId(applicationId);
segmentBuilder.setApplicationInstanceId(instanceId);
segmentBuilder.setTraceSegmentId(segmentId);
SpanObject.Builder entrySpan = SpanObject.newBuilder();
entrySpan.setSpanId(0);
entrySpan.setSpanType(SpanType.Entry);
entrySpan.setSpanLayer(SpanLayer.Http);
entrySpan.setParentSpanId(-1);
entrySpan.setStartTime(now);
entrySpan.setEndTime(now + 3000);
entrySpan.setComponentId(ComponentsDefine.TOMCAT.getId());
entrySpan.setOperationNameId(entryServiceId);
entrySpan.setIsError(false);
segmentBuilder.addSpans(entrySpan);
SpanObject.Builder exitSpan = SpanObject.newBuilder();
exitSpan.setSpanId(1);
exitSpan.setSpanType(SpanType.Exit);
exitSpan.setSpanLayer(SpanLayer.Database);
exitSpan.setParentSpanId(0);
exitSpan.setStartTime(now);
exitSpan.setEndTime(now + 3000);
exitSpan.setComponentId(ComponentsDefine.MONGODB.getId());
exitSpan.setOperationNameId(entryServiceId);
exitSpan.setIsError(false);
exitSpan.setPeer("localhost:8888");
segmentBuilder.addSpans(exitSpan);
upstream.setSegment(segmentBuilder.build().toByteString());
streamObserver.onNext(upstream.build());
streamObserver.onCompleted();
}
}
}
package org.skywalking.apm.collector.agentstream.mock.grpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.stub.StreamObserver;
import org.skywalking.apm.network.proto.Downstream;
import org.skywalking.apm.network.proto.RefType;
import org.skywalking.apm.network.proto.SpanLayer;
import org.skywalking.apm.network.proto.SpanObject;
import org.skywalking.apm.network.proto.SpanType;
import org.skywalking.apm.network.proto.TraceSegmentObject;
import org.skywalking.apm.network.proto.TraceSegmentReference;
import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc;
import org.skywalking.apm.network.proto.UniqueId;
import org.skywalking.apm.network.proto.UpstreamSegment;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author pengys5
*/
public class SingleHasEntryNoExitHasRefSpan {
public static void main(String[] args) {
Post post = new Post();
post.send();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
static class Post {
private final Logger logger = LoggerFactory.getLogger(Post.class);
public void send() {
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build();
int consumerApplicationId = 0;
int providerApplicationId = 0;
int consumerInstanceId = 0;
int providerInstanceId = 0;
int consumerEntryServiceId = 0;
int consumerExitServiceId = 0;
int consumerExitApplicationId = 0;
int providerEntryServiceId = 0;
while (consumerApplicationId == 0) {
consumerApplicationId = ApplicationRegister.register(channel, "consumer");
}
while (consumerExitApplicationId == 0) {
consumerExitApplicationId = ApplicationRegister.register(channel, "172.25.0.4:20880");
}
while (providerApplicationId == 0) {
providerApplicationId = ApplicationRegister.register(channel, "provider");
}
while (consumerInstanceId == 0) {
consumerInstanceId = InstanceRegister.register(channel, "ConsumerUUID", consumerApplicationId, "consumer_host_name", 1);
}
while (providerInstanceId == 0) {
providerInstanceId = InstanceRegister.register(channel, "ProviderUUID", providerApplicationId, "provider_host_name", 2);
}
while (consumerEntryServiceId == 0) {
consumerEntryServiceId = ServiceRegister.register(channel, consumerApplicationId, "/dubbox-case/case/dubbox-rest");
}
while (consumerExitServiceId == 0) {
consumerExitServiceId = ServiceRegister.register(channel, consumerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()");
}
while (providerEntryServiceId == 0) {
providerEntryServiceId = ServiceRegister.register(channel, providerApplicationId, "org.skywaking.apm.testcase.dubbo.services.GreetService.doBusiness()");
}
TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel);
StreamObserver<UpstreamSegment> streamObserver = stub.collect(new StreamObserver<Downstream>() {
@Override public void onNext(Downstream downstream) {
}
@Override public void onError(Throwable throwable) {
logger.error(throwable.getMessage(), throwable);
}
@Override public void onCompleted() {
}
});
long now = System.currentTimeMillis();
int id = 1;
UniqueId.Builder builder = UniqueId.newBuilder();
builder.addIdParts(id);
builder.addIdParts(id);
builder.addIdParts(id);
UniqueId segmentId = builder.build();
UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder();
upstream.addGlobalTraceIds(segmentId);
TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder();
segmentBuilder.setApplicationId(consumerApplicationId);
segmentBuilder.setApplicationInstanceId(consumerInstanceId);
segmentBuilder.setTraceSegmentId(segmentId);
TraceSegmentReference.Builder referenceBuilder = TraceSegmentReference.newBuilder();
referenceBuilder.setEntryApplicationInstanceId(providerInstanceId);
referenceBuilder.setEntryServiceName("/rest/test");
referenceBuilder.setParentApplicationInstanceId(providerInstanceId);
referenceBuilder.setParentServiceName("/rest/test");
referenceBuilder.setRefType(RefType.CrossProcess);
referenceBuilder.setNetworkAddress("localhost:8080");
segmentBuilder.addRefs(referenceBuilder);
SpanObject.Builder entrySpan = SpanObject.newBuilder();
entrySpan.setSpanId(0);
entrySpan.setSpanType(SpanType.Entry);
entrySpan.setSpanLayer(SpanLayer.Http);
entrySpan.setParentSpanId(-1);
entrySpan.setStartTime(now);
entrySpan.setEndTime(now + 3000);
entrySpan.setComponentId(ComponentsDefine.TOMCAT.getId());
entrySpan.setOperationNameId(consumerEntryServiceId);
entrySpan.setIsError(false);
segmentBuilder.addSpans(entrySpan);
upstream.setSegment(segmentBuilder.build().toByteString());
streamObserver.onNext(upstream.build());
streamObserver.onCompleted();
}
}
}
package org.skywalking.apm.collector.agentstream.mock.grpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.stub.StreamObserver;
import org.skywalking.apm.network.proto.Downstream;
import org.skywalking.apm.network.proto.SpanLayer;
import org.skywalking.apm.network.proto.SpanObject;
import org.skywalking.apm.network.proto.SpanType;
import org.skywalking.apm.network.proto.TraceSegmentObject;
import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc;
import org.skywalking.apm.network.proto.UniqueId;
import org.skywalking.apm.network.proto.UpstreamSegment;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author pengys5
*/
public class SingleHasEntryNoExitNoRefSpan {
public static void main(String[] args) {
Post post = new Post();
post.send();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
static class Post {
private final Logger logger = LoggerFactory.getLogger(Post.class);
public void send() {
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build();
int applicationId = 0;
int instanceId = 0;
int entryServiceId = 0;
while (applicationId == 0) {
applicationId = ApplicationRegister.register(channel, "consumer");
}
while (instanceId == 0) {
instanceId = InstanceRegister.register(channel, "ConsumerUUID", applicationId, "consumer_host_name", 1);
}
while (entryServiceId == 0) {
entryServiceId = ServiceRegister.register(channel, applicationId, "/dubbox-case/case/dubbox-rest");
}
TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel);
StreamObserver<UpstreamSegment> streamObserver = stub.collect(new StreamObserver<Downstream>() {
@Override public void onNext(Downstream downstream) {
}
@Override public void onError(Throwable throwable) {
logger.error(throwable.getMessage(), throwable);
}
@Override public void onCompleted() {
}
});
long now = System.currentTimeMillis();
int id = 1;
UniqueId.Builder builder = UniqueId.newBuilder();
builder.addIdParts(id);
builder.addIdParts(id);
builder.addIdParts(id);
UniqueId segmentId = builder.build();
UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder();
upstream.addGlobalTraceIds(segmentId);
TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder();
segmentBuilder.setApplicationId(applicationId);
segmentBuilder.setApplicationInstanceId(instanceId);
segmentBuilder.setTraceSegmentId(segmentId);
SpanObject.Builder entrySpan = SpanObject.newBuilder();
entrySpan.setSpanId(0);
entrySpan.setSpanType(SpanType.Entry);
entrySpan.setSpanLayer(SpanLayer.Http);
entrySpan.setParentSpanId(-1);
entrySpan.setStartTime(now);
entrySpan.setEndTime(now + 3000);
entrySpan.setComponentId(ComponentsDefine.TOMCAT.getId());
entrySpan.setOperationNameId(entryServiceId);
entrySpan.setIsError(false);
segmentBuilder.addSpans(entrySpan);
upstream.setSegment(segmentBuilder.build().toByteString());
streamObserver.onNext(upstream.build());
streamObserver.onCompleted();
}
}
}
package org.skywalking.apm.collector.agentstream.mock.grpc;
import io.grpc.ManagedChannel;
import io.grpc.ManagedChannelBuilder;
import io.grpc.stub.StreamObserver;
import org.skywalking.apm.network.proto.Downstream;
import org.skywalking.apm.network.proto.SpanLayer;
import org.skywalking.apm.network.proto.SpanObject;
import org.skywalking.apm.network.proto.SpanType;
import org.skywalking.apm.network.proto.TraceSegmentObject;
import org.skywalking.apm.network.proto.TraceSegmentServiceGrpc;
import org.skywalking.apm.network.proto.UniqueId;
import org.skywalking.apm.network.proto.UpstreamSegment;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author pengys5
*/
public class SingleNoEntryHasExitNoRefSpan {
public static void main(String[] args) {
Post post = new Post();
post.send();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
}
}
static class Post {
private final Logger logger = LoggerFactory.getLogger(Post.class);
public void send() {
ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", 11800).maxInboundMessageSize(1024 * 1024 * 50).usePlaintext(true).build();
int applicationId = 0;
int instanceId = 0;
int entryServiceId = 0;
while (applicationId == 0) {
applicationId = ApplicationRegister.register(channel, "consumer");
}
while (instanceId == 0) {
instanceId = InstanceRegister.register(channel, "ConsumerUUID", applicationId, "consumer_host_name", 1);
}
while (entryServiceId == 0) {
entryServiceId = ServiceRegister.register(channel, applicationId, "/dubbox-case/case/dubbox-rest");
}
TraceSegmentServiceGrpc.TraceSegmentServiceStub stub = TraceSegmentServiceGrpc.newStub(channel);
StreamObserver<UpstreamSegment> streamObserver = stub.collect(new StreamObserver<Downstream>() {
@Override public void onNext(Downstream downstream) {
}
@Override public void onError(Throwable throwable) {
logger.error(throwable.getMessage(), throwable);
}
@Override public void onCompleted() {
}
});
long now = System.currentTimeMillis();
int id = 1;
UniqueId.Builder builder = UniqueId.newBuilder();
builder.addIdParts(id);
builder.addIdParts(id);
builder.addIdParts(id);
UniqueId segmentId = builder.build();
UpstreamSegment.Builder upstream = UpstreamSegment.newBuilder();
upstream.addGlobalTraceIds(segmentId);
TraceSegmentObject.Builder segmentBuilder = TraceSegmentObject.newBuilder();
segmentBuilder.setApplicationId(applicationId);
segmentBuilder.setApplicationInstanceId(instanceId);
segmentBuilder.setTraceSegmentId(segmentId);
SpanObject.Builder exitSpan = SpanObject.newBuilder();
exitSpan.setSpanId(0);
exitSpan.setSpanType(SpanType.Exit);
exitSpan.setSpanLayer(SpanLayer.Database);
exitSpan.setParentSpanId(-1);
exitSpan.setStartTime(now);
exitSpan.setEndTime(now + 3000);
exitSpan.setComponentId(ComponentsDefine.MONGODB.getId());
exitSpan.setOperationNameId(entryServiceId);
exitSpan.setIsError(false);
exitSpan.setPeer("localhost:8888");
segmentBuilder.addSpans(exitSpan);
upstream.setSegment(segmentBuilder.build().toByteString());
streamObserver.onNext(upstream.build());
streamObserver.onCompleted();
}
}
}
......@@ -25,6 +25,4 @@ storage:
elasticsearch:
cluster_name: CollectorDBCluster
cluster_transport_sniffer: true
cluster_nodes: 10.0.0.19:9300,10.0.0.6:9300
cluster_nodes: localhost:9300
\ No newline at end of file
......@@ -10,7 +10,7 @@
<logger name="org.eclipse.jetty" level="INFO"/>
<logger name="org.apache.zookeeper" level="INFO"/>
<root level="debug">
<root level="info">
<appender-ref ref="STDOUT"/>
</root>
</configuration>
\ No newline at end of file
......@@ -19,4 +19,8 @@ public class CollectionUtils {
public static boolean isNotEmpty(List list) {
return !isEmpty(list);
}
public static <T> boolean isNotEmpty(T[] array) {
return array != null && array.length > 0;
}
}
......@@ -7,6 +7,7 @@ public class Const {
public static final String ID_SPLIT = "_";
public static final int USER_ID = 1;
public static final int NONE_SERVICE_ID = 1;
public static final String NONE_SERVICE_NAME = "None";
public static final String USER_CODE = "User";
public static final String SEGMENT_SPAN_SPLIT = "S";
public static final String UNKNOWN = "Unknown";
......
......@@ -67,15 +67,18 @@ public enum TimeBucketUtils {
}
}
public long getFiveSecondTimeBucket(long secondTimeBucket) {
long mantissa = secondTimeBucket % 10;
if (mantissa < 5) {
return (secondTimeBucket / 10) * 10;
} else if (mantissa == 5) {
return secondTimeBucket;
} else {
return ((secondTimeBucket / 10) + 1) * 10;
public long[] getFiveSecondTimeBuckets(long secondTimeBucket) {
long timeStamp = changeTimeBucket2TimeStamp(TimeBucketType.SECOND.name(), secondTimeBucket);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(timeStamp);
long[] timeBuckets = new long[5];
timeBuckets[0] = secondTimeBucket;
for (int i = 0; i < 4; i++) {
calendar.add(Calendar.SECOND, -1);
timeBuckets[i + 1] = getSecondTimeBucket(calendar.getTimeInMillis());
}
return timeBuckets;
}
public long changeToUTCTimeBucket(long timeBucket) {
......@@ -88,6 +91,17 @@ public enum TimeBucketUtils {
}
}
public long addSecondForSecondTimeBucket(String timeBucketType, long timeBucket, int second) {
if (!TimeBucketType.SECOND.name().equals(timeBucketType)) {
throw new UnexpectedException("time bucket type must be second ");
}
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(changeTimeBucket2TimeStamp(timeBucketType, timeBucket));
calendar.add(Calendar.SECOND, second);
return getSecondTimeBucket(calendar.getTimeInMillis());
}
public enum TimeBucketType {
SECOND, MINUTE, HOUR, DAY
}
......
......@@ -11,14 +11,12 @@ public class TimeBucketUtilsTestCase {
@Test
public void testGetFiveSecondTimeBucket() {
long fiveSecondTimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(20170804224812L);
Assert.assertEquals(20170804224810L, fiveSecondTimeBucket);
fiveSecondTimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(20170804224818L);
Assert.assertEquals(20170804224820L, fiveSecondTimeBucket);
fiveSecondTimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(20170804224815L);
Assert.assertEquals(20170804224815L, fiveSecondTimeBucket);
long[] timeBuckets = TimeBucketUtils.INSTANCE.getFiveSecondTimeBuckets(20170804224810L);
Assert.assertEquals(20170804224810L, timeBuckets[0]);
Assert.assertEquals(20170804224809L, timeBuckets[1]);
Assert.assertEquals(20170804224808L, timeBuckets[2]);
Assert.assertEquals(20170804224807L, timeBuckets[3]);
Assert.assertEquals(20170804224806L, timeBuckets[4]);
}
@Test
......
......@@ -8,5 +8,4 @@ public class CommonTable {
public static final String COLUMN_ID = "id";
public static final String COLUMN_AGG = "agg";
public static final String COLUMN_TIME_BUCKET = "time_bucket";
public static final String COLUMN_5S_TIME_BUCKET = "s5_time_bucket";
}
......@@ -16,17 +16,16 @@ import org.skywalking.apm.collector.storage.define.DataDefine;
public class InstPerformanceDataDefine extends DataDefine {
@Override protected int initialCapacity() {
return 7;
return 6;
}
@Override protected void attributeDefine() {
addAttribute(0, new Attribute(InstPerformanceTable.COLUMN_ID, AttributeType.STRING, new NonOperation()));
addAttribute(1, new Attribute(InstPerformanceTable.COLUMN_APPLICATION_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(2, new Attribute(InstPerformanceTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(3, new Attribute(InstPerformanceTable.COLUMN_CALL_TIMES, AttributeType.INTEGER, new AddOperation()));
addAttribute(3, new Attribute(InstPerformanceTable.COLUMN_CALLS, AttributeType.INTEGER, new AddOperation()));
addAttribute(4, new Attribute(InstPerformanceTable.COLUMN_COST_TOTAL, AttributeType.LONG, new AddOperation()));
addAttribute(5, new Attribute(InstPerformanceTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation()));
addAttribute(6, new Attribute(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, AttributeType.LONG, new CoverOperation()));
}
@Override public Object deserialize(RemoteData remoteData) {
......@@ -41,21 +40,18 @@ public class InstPerformanceDataDefine extends DataDefine {
private String id;
private int applicationId;
private int instanceId;
private int callTimes;
private int calls;
private long costTotal;
private long timeBucket;
private long s5TimeBucket;
public InstPerformance(String id, int applicationId, int instanceId, int callTimes, long costTotal,
long timeBucket,
long s5TimeBucket) {
public InstPerformance(String id, int applicationId, int instanceId, int calls, long costTotal,
long timeBucket) {
this.id = id;
this.applicationId = applicationId;
this.instanceId = instanceId;
this.callTimes = callTimes;
this.calls = calls;
this.costTotal = costTotal;
this.timeBucket = timeBucket;
this.s5TimeBucket = s5TimeBucket;
}
public InstPerformance() {
......@@ -67,10 +63,9 @@ public class InstPerformanceDataDefine extends DataDefine {
data.setDataString(0, this.id);
data.setDataInteger(0, this.applicationId);
data.setDataInteger(1, this.instanceId);
data.setDataInteger(2, this.callTimes);
data.setDataInteger(2, this.calls);
data.setDataLong(0, this.costTotal);
data.setDataLong(1, this.timeBucket);
data.setDataLong(2, this.s5TimeBucket);
return data;
}
......@@ -78,10 +73,9 @@ public class InstPerformanceDataDefine extends DataDefine {
this.id = data.getDataString(0);
this.applicationId = data.getDataInteger(0);
this.instanceId = data.getDataInteger(1);
this.callTimes = data.getDataInteger(2);
this.calls = data.getDataInteger(2);
this.costTotal = data.getDataLong(0);
this.timeBucket = data.getDataLong(1);
this.s5TimeBucket = data.getDataLong(2);
return this;
}
......@@ -101,12 +95,12 @@ public class InstPerformanceDataDefine extends DataDefine {
this.instanceId = instanceId;
}
public int getCallTimes() {
return callTimes;
public int getCalls() {
return calls;
}
public void setCallTimes(int callTimes) {
this.callTimes = callTimes;
public void setCalls(int calls) {
this.calls = calls;
}
public long getCostTotal() {
......@@ -132,13 +126,5 @@ public class InstPerformanceDataDefine extends DataDefine {
public void setApplicationId(int applicationId) {
this.applicationId = applicationId;
}
public long getS5TimeBucket() {
return s5TimeBucket;
}
public void setS5TimeBucket(long s5TimeBucket) {
this.s5TimeBucket = s5TimeBucket;
}
}
}
......@@ -9,6 +9,6 @@ public class InstPerformanceTable extends CommonTable {
public static final String TABLE = "instance_performance";
public static final String COLUMN_APPLICATION_ID = "application_id";
public static final String COLUMN_INSTANCE_ID = "instance_id";
public static final String COLUMN_CALL_TIMES = "call_times";
public static final String COLUMN_CALLS = "calls";
public static final String COLUMN_COST_TOTAL = "cost_total";
}
......@@ -3,12 +3,13 @@ package org.skywalking.apm.collector.storage.define.jvm;
import org.skywalking.apm.collector.core.framework.UnexpectedException;
import org.skywalking.apm.collector.core.stream.Data;
import org.skywalking.apm.collector.core.stream.Transform;
import org.skywalking.apm.collector.core.stream.operate.AddOperation;
import org.skywalking.apm.collector.core.stream.operate.CoverOperation;
import org.skywalking.apm.collector.core.stream.operate.NonOperation;
import org.skywalking.apm.collector.remote.grpc.proto.RemoteData;
import org.skywalking.apm.collector.storage.define.Attribute;
import org.skywalking.apm.collector.storage.define.AttributeType;
import org.skywalking.apm.collector.storage.define.DataDefine;
import org.skywalking.apm.collector.core.stream.operate.CoverOperation;
import org.skywalking.apm.collector.core.stream.operate.NonOperation;
/**
* @author pengys5
......@@ -21,8 +22,8 @@ public class CpuMetricDataDefine extends DataDefine {
@Override protected void attributeDefine() {
addAttribute(0, new Attribute(CpuMetricTable.COLUMN_ID, AttributeType.STRING, new NonOperation()));
addAttribute(1, new Attribute(CpuMetricTable.COLUMN_APPLICATION_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(2, new Attribute(CpuMetricTable.COLUMN_USAGE_PERCENT, AttributeType.DOUBLE, new CoverOperation()));
addAttribute(1, new Attribute(CpuMetricTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(2, new Attribute(CpuMetricTable.COLUMN_USAGE_PERCENT, AttributeType.DOUBLE, new AddOperation()));
addAttribute(3, new Attribute(CpuMetricTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation()));
}
......@@ -36,13 +37,13 @@ public class CpuMetricDataDefine extends DataDefine {
public static class CpuMetric implements Transform<CpuMetric> {
private String id;
private int applicationInstanceId;
private int instanceId;
private double usagePercent;
private long timeBucket;
public CpuMetric(String id, int applicationInstanceId, double usagePercent, long timeBucket) {
public CpuMetric(String id, int instanceId, double usagePercent, long timeBucket) {
this.id = id;
this.applicationInstanceId = applicationInstanceId;
this.instanceId = instanceId;
this.usagePercent = usagePercent;
this.timeBucket = timeBucket;
}
......@@ -54,7 +55,7 @@ public class CpuMetricDataDefine extends DataDefine {
CpuMetricDataDefine define = new CpuMetricDataDefine();
Data data = define.build(id);
data.setDataString(0, this.id);
data.setDataInteger(0, this.applicationInstanceId);
data.setDataInteger(0, this.instanceId);
data.setDataDouble(0, this.usagePercent);
data.setDataLong(0, this.timeBucket);
return data;
......@@ -62,7 +63,7 @@ public class CpuMetricDataDefine extends DataDefine {
@Override public CpuMetric toSelf(Data data) {
this.id = data.getDataString(0);
this.applicationInstanceId = data.getDataInteger(0);
this.instanceId = data.getDataInteger(0);
this.usagePercent = data.getDataDouble(0);
this.timeBucket = data.getDataLong(0);
return this;
......@@ -72,8 +73,8 @@ public class CpuMetricDataDefine extends DataDefine {
this.id = id;
}
public void setApplicationInstanceId(int applicationInstanceId) {
this.applicationInstanceId = applicationInstanceId;
public void setInstanceId(int instanceId) {
this.instanceId = instanceId;
}
public void setUsagePercent(double usagePercent) {
......@@ -88,8 +89,8 @@ public class CpuMetricDataDefine extends DataDefine {
return id;
}
public int getApplicationInstanceId() {
return applicationInstanceId;
public int getInstanceId() {
return instanceId;
}
public double getUsagePercent() {
......
......@@ -7,6 +7,6 @@ import org.skywalking.apm.collector.storage.define.CommonTable;
*/
public class CpuMetricTable extends CommonTable {
public static final String TABLE = "cpu_metric";
public static final String COLUMN_APPLICATION_INSTANCE_ID = "application_instance_id";
public static final String COLUMN_INSTANCE_ID = "instance_id";
public static final String COLUMN_USAGE_PERCENT = "usage_percent";
}
......@@ -16,17 +16,16 @@ import org.skywalking.apm.collector.storage.define.DataDefine;
public class GCMetricDataDefine extends DataDefine {
@Override protected int initialCapacity() {
return 7;
return 6;
}
@Override protected void attributeDefine() {
addAttribute(0, new Attribute(GCMetricTable.COLUMN_ID, AttributeType.STRING, new NonOperation()));
addAttribute(1, new Attribute(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(1, new Attribute(GCMetricTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(2, new Attribute(GCMetricTable.COLUMN_PHRASE, AttributeType.INTEGER, new CoverOperation()));
addAttribute(3, new Attribute(GCMetricTable.COLUMN_COUNT, AttributeType.LONG, new CoverOperation()));
addAttribute(4, new Attribute(GCMetricTable.COLUMN_TIME, AttributeType.LONG, new CoverOperation()));
addAttribute(5, new Attribute(GCMetricTable.COLUMN_TIME_BUCKET, AttributeType.LONG, new CoverOperation()));
addAttribute(6, new Attribute(GCMetricTable.COLUMN_5S_TIME_BUCKET, AttributeType.LONG, new CoverOperation()));
}
@Override public Object deserialize(RemoteData remoteData) {
......@@ -39,22 +38,19 @@ public class GCMetricDataDefine extends DataDefine {
public static class GCMetric implements Transform<GCMetric> {
private String id;
private int applicationInstanceId;
private int instanceId;
private int phrase;
private long count;
private long time;
private long timeBucket;
private long s5TimeBucket;
public GCMetric(String id, int applicationInstanceId, int phrase, long count, long time, long timeBucket,
long s5TimeBucket) {
public GCMetric(String id, int instanceId, int phrase, long count, long time, long timeBucket) {
this.id = id;
this.applicationInstanceId = applicationInstanceId;
this.instanceId = instanceId;
this.phrase = phrase;
this.count = count;
this.time = time;
this.timeBucket = timeBucket;
this.s5TimeBucket = s5TimeBucket;
}
public GCMetric() {
......@@ -64,23 +60,21 @@ public class GCMetricDataDefine extends DataDefine {
GCMetricDataDefine define = new GCMetricDataDefine();
Data data = define.build(id);
data.setDataString(0, this.id);
data.setDataInteger(0, this.applicationInstanceId);
data.setDataInteger(0, this.instanceId);
data.setDataInteger(1, this.phrase);
data.setDataLong(0, this.count);
data.setDataLong(1, this.time);
data.setDataLong(2, this.timeBucket);
data.setDataLong(3, this.s5TimeBucket);
return data;
}
@Override public GCMetric toSelf(Data data) {
this.id = data.getDataString(0);
this.applicationInstanceId = data.getDataInteger(0);
this.instanceId = data.getDataInteger(0);
this.phrase = data.getDataInteger(1);
this.count = data.getDataLong(0);
this.time = data.getDataLong(1);
this.timeBucket = data.getDataLong(2);
this.s5TimeBucket = data.getDataLong(3);
return this;
}
......@@ -88,8 +82,8 @@ public class GCMetricDataDefine extends DataDefine {
this.id = id;
}
public void setApplicationInstanceId(int applicationInstanceId) {
this.applicationInstanceId = applicationInstanceId;
public void setInstanceId(int instanceId) {
this.instanceId = instanceId;
}
public void setTimeBucket(long timeBucket) {
......@@ -100,8 +94,8 @@ public class GCMetricDataDefine extends DataDefine {
return id;
}
public int getApplicationInstanceId() {
return applicationInstanceId;
public int getInstanceId() {
return instanceId;
}
public long getTimeBucket() {
......@@ -131,13 +125,5 @@ public class GCMetricDataDefine extends DataDefine {
public void setTime(long time) {
this.time = time;
}
public long getS5TimeBucket() {
return s5TimeBucket;
}
public void setS5TimeBucket(long s5TimeBucket) {
this.s5TimeBucket = s5TimeBucket;
}
}
}
......@@ -7,7 +7,7 @@ import org.skywalking.apm.collector.storage.define.CommonTable;
*/
public class GCMetricTable extends CommonTable {
public static final String TABLE = "gc_metric";
public static final String COLUMN_APPLICATION_INSTANCE_ID = "application_instance_id";
public static final String COLUMN_INSTANCE_ID = "instance_id";
public static final String COLUMN_PHRASE = "phrase";
public static final String COLUMN_COUNT = "count";
public static final String COLUMN_TIME = "time";
......
......@@ -21,7 +21,7 @@ public class MemoryPoolMetricDataDefine extends DataDefine {
@Override protected void attributeDefine() {
addAttribute(0, new Attribute(MemoryPoolMetricTable.COLUMN_ID, AttributeType.STRING, new NonOperation()));
addAttribute(1, new Attribute(MemoryPoolMetricTable.COLUMN_APPLICATION_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(1, new Attribute(MemoryPoolMetricTable.COLUMN_INSTANCE_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(2, new Attribute(MemoryPoolMetricTable.COLUMN_POOL_TYPE, AttributeType.INTEGER, new CoverOperation()));
addAttribute(3, new Attribute(MemoryPoolMetricTable.COLUMN_IS_HEAP, AttributeType.BOOLEAN, new CoverOperation()));
addAttribute(4, new Attribute(MemoryPoolMetricTable.COLUMN_INIT, AttributeType.LONG, new CoverOperation()));
......@@ -41,7 +41,7 @@ public class MemoryPoolMetricDataDefine extends DataDefine {
public static class MemoryPoolMetric implements Transform<MemoryPoolMetric> {
private String id;
private int applicationInstanceId;
private int instanceId;
private int poolType;
private boolean isHeap;
private long init;
......@@ -50,10 +50,10 @@ public class MemoryPoolMetricDataDefine extends DataDefine {
private long committed;
private long timeBucket;
public MemoryPoolMetric(String id, int applicationInstanceId, int poolType, boolean isHeap, long init, long max,
public MemoryPoolMetric(String id, int instanceId, int poolType, boolean isHeap, long init, long max,
long used, long committed, long timeBucket) {
this.id = id;
this.applicationInstanceId = applicationInstanceId;
this.instanceId = instanceId;
this.poolType = poolType;
this.isHeap = isHeap;
this.init = init;
......@@ -70,7 +70,7 @@ public class MemoryPoolMetricDataDefine extends DataDefine {
MemoryPoolMetricDataDefine define = new MemoryPoolMetricDataDefine();
Data data = define.build(id);
data.setDataString(0, this.id);
data.setDataInteger(0, this.applicationInstanceId);
data.setDataInteger(0, this.instanceId);
data.setDataInteger(1, this.poolType);
data.setDataBoolean(0, this.isHeap);
data.setDataLong(0, this.init);
......@@ -83,7 +83,7 @@ public class MemoryPoolMetricDataDefine extends DataDefine {
@Override public MemoryPoolMetric toSelf(Data data) {
this.id = data.getDataString(0);
this.applicationInstanceId = data.getDataInteger(0);
this.instanceId = data.getDataInteger(0);
this.poolType = data.getDataInteger(1);
this.isHeap = data.getDataBoolean(0);
this.init = data.getDataLong(0);
......@@ -98,8 +98,8 @@ public class MemoryPoolMetricDataDefine extends DataDefine {
this.id = id;
}
public void setApplicationInstanceId(int applicationInstanceId) {
this.applicationInstanceId = applicationInstanceId;
public void setInstanceId(int instanceId) {
this.instanceId = instanceId;
}
public void setPoolType(int poolType) {
......@@ -134,8 +134,8 @@ public class MemoryPoolMetricDataDefine extends DataDefine {
return id;
}
public int getApplicationInstanceId() {
return applicationInstanceId;
public int getInstanceId() {
return instanceId;
}
public long getTimeBucket() {
......
......@@ -7,7 +7,7 @@ import org.skywalking.apm.collector.storage.define.CommonTable;
*/
public class MemoryPoolMetricTable extends CommonTable {
public static final String TABLE = "memory_pool_metric";
public static final String COLUMN_APPLICATION_INSTANCE_ID = "application_instance_id";
public static final String COLUMN_INSTANCE_ID = "instance_id";
public static final String COLUMN_POOL_TYPE = "pool_type";
public static final String COLUMN_IS_HEAP = "is_heap";
public static final String COLUMN_INIT = "init";
......
......@@ -44,29 +44,29 @@ public class NodeReferenceDataDefine extends DataDefine {
int summary = remoteData.getDataIntegers(6);
int error = remoteData.getDataIntegers(7);
long timeBucket = remoteData.getDataLongs(0);
return new NodeReferenceSum(id, applicationId, behindApplicationId, behindPeer, s1LTE, s3LTE, s5LTE, s5GT, summary, error, timeBucket);
return new NodeReference(id, applicationId, behindApplicationId, behindPeer, s1LTE, s3LTE, s5LTE, s5GT, summary, error, timeBucket);
}
@Override public RemoteData serialize(Object object) {
NodeReferenceSum nodeReferenceSum = (NodeReferenceSum)object;
NodeReference nodeReference = (NodeReference)object;
RemoteData.Builder builder = RemoteData.newBuilder();
builder.addDataStrings(nodeReferenceSum.getId());
builder.addDataIntegers(nodeReferenceSum.getApplicationId());
builder.addDataIntegers(nodeReferenceSum.getBehindApplicationId());
builder.addDataStrings(nodeReferenceSum.getBehindPeer());
builder.addDataIntegers(nodeReferenceSum.getS1LTE());
builder.addDataIntegers(nodeReferenceSum.getS3LTE());
builder.addDataIntegers(nodeReferenceSum.getS5LTE());
builder.addDataIntegers(nodeReferenceSum.getS5GT());
builder.addDataIntegers(nodeReferenceSum.getSummary());
builder.addDataIntegers(nodeReferenceSum.getError());
builder.addDataLongs(nodeReferenceSum.getTimeBucket());
builder.addDataStrings(nodeReference.getId());
builder.addDataIntegers(nodeReference.getFrontApplicationId());
builder.addDataIntegers(nodeReference.getBehindApplicationId());
builder.addDataStrings(nodeReference.getBehindPeer());
builder.addDataIntegers(nodeReference.getS1LTE());
builder.addDataIntegers(nodeReference.getS3LTE());
builder.addDataIntegers(nodeReference.getS5LTE());
builder.addDataIntegers(nodeReference.getS5GT());
builder.addDataIntegers(nodeReference.getSummary());
builder.addDataIntegers(nodeReference.getError());
builder.addDataLongs(nodeReference.getTimeBucket());
return builder.build();
}
public static class NodeReferenceSum implements Transform {
public static class NodeReference implements Transform {
private String id;
private int applicationId;
private int frontApplicationId;
private int behindApplicationId;
private String behindPeer;
private int s1LTE = 0;
......@@ -77,11 +77,11 @@ public class NodeReferenceDataDefine extends DataDefine {
private int error = 0;
private long timeBucket;
public NodeReferenceSum(String id, int applicationId, int behindApplicationId, String behindPeer, int s1LTE,
public NodeReference(String id, int frontApplicationId, int behindApplicationId, String behindPeer, int s1LTE,
int s3LTE,
int s5LTE, int s5GT, int summary, int error, long timeBucket) {
this.id = id;
this.applicationId = applicationId;
this.frontApplicationId = frontApplicationId;
this.behindApplicationId = behindApplicationId;
this.behindPeer = behindPeer;
this.s1LTE = s1LTE;
......@@ -93,14 +93,14 @@ public class NodeReferenceDataDefine extends DataDefine {
this.timeBucket = timeBucket;
}
public NodeReferenceSum() {
public NodeReference() {
}
@Override public Data toData() {
NodeReferenceDataDefine define = new NodeReferenceDataDefine();
Data data = define.build(id);
data.setDataString(0, this.id);
data.setDataInteger(0, this.applicationId);
data.setDataInteger(0, this.frontApplicationId);
data.setDataInteger(1, this.behindApplicationId);
data.setDataString(1, this.behindPeer);
data.setDataInteger(2, this.s1LTE);
......@@ -125,12 +125,12 @@ public class NodeReferenceDataDefine extends DataDefine {
this.id = id;
}
public int getApplicationId() {
return applicationId;
public int getFrontApplicationId() {
return frontApplicationId;
}
public void setApplicationId(int applicationId) {
this.applicationId = applicationId;
public void setFrontApplicationId(int frontApplicationId) {
this.frontApplicationId = frontApplicationId;
}
public int getBehindApplicationId() {
......
......@@ -21,7 +21,7 @@ public class ServiceEntryDataDefine extends DataDefine {
@Override protected void attributeDefine() {
addAttribute(0, new Attribute(ServiceEntryTable.COLUMN_ID, AttributeType.STRING, new NonOperation()));
addAttribute(1, new Attribute(ServiceEntryTable.COLUMN_APPLICATION_ID, AttributeType.INTEGER, new NonOperation()));
addAttribute(2, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, AttributeType.INTEGER, new NonOperation()));
addAttribute(2, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_ID, AttributeType.INTEGER, new CoverOperation()));
addAttribute(3, new Attribute(ServiceEntryTable.COLUMN_ENTRY_SERVICE_NAME, AttributeType.STRING, new NonOperation()));
addAttribute(4, new Attribute(ServiceEntryTable.COLUMN_REGISTER_TIME, AttributeType.LONG, new NonOperation()));
addAttribute(5, new Attribute(ServiceEntryTable.COLUMN_NEWEST_TIME, AttributeType.LONG, new CoverOperation()));
......
......@@ -12,7 +12,7 @@ import org.skywalking.apm.collector.ui.dao.IServiceNameDAO;
public class ServiceNameCache {
//TODO size configuration
private static Cache<Integer, String> CACHE = CacheBuilder.newBuilder().maximumSize(1000).build();
private static Cache<Integer, String> CACHE = CacheBuilder.newBuilder().maximumSize(10000).build();
public static String get(int serviceId) {
try {
......
......@@ -6,6 +6,7 @@ import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetRequestBuilder;
import org.elasticsearch.action.get.MultiGetResponse;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.jvm.CpuMetricTable;
import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
......@@ -27,19 +28,20 @@ public class CpuMetricEsDAO extends EsDAO implements ICpuMetricDAO {
@Override public JsonArray getMetric(int instanceId, long startTimeBucket, long endTimeBucket) {
MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet();
int i = 0;
long timeBucket = startTimeBucket;
do {
String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId;
timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1);
String id = timeBucket + Const.ID_SPLIT + instanceId;
prepareMultiGet.add(CpuMetricTable.TABLE, CpuMetricTable.TABLE_TYPE, id);
i++;
}
while (startTimeBucket + i <= endTimeBucket);
while (timeBucket <= endTimeBucket);
JsonArray metrics = new JsonArray();
MultiGetResponse multiGetResponse = prepareMultiGet.get();
for (MultiGetItemResponse response : multiGetResponse.getResponses()) {
if (response.getResponse().isExists()) {
metrics.add(((Number)response.getResponse().getSource().get(CpuMetricTable.COLUMN_USAGE_PERCENT)).intValue());
double cpuUsed = ((Number)response.getResponse().getSource().get(CpuMetricTable.COLUMN_USAGE_PERCENT)).doubleValue();
metrics.add((int)(cpuUsed * 100));
} else {
metrics.add(0);
}
......
......@@ -10,12 +10,12 @@ import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.jvm.GCMetricTable;
import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
import org.skywalking.apm.network.proto.GCPhrase;
......@@ -29,18 +29,15 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO {
private final Logger logger = LoggerFactory.getLogger(GCMetricEsDAO.class);
@Override public GCCount getGCCount(long s5TimeBucket, int instanceId) {
logger.debug("get gc count, s5TimeBucket: {}, instanceId: {}", s5TimeBucket, instanceId);
@Override public GCCount getGCCount(long[] timeBuckets, int instanceId) {
logger.debug("get gc count, timeBuckets: {}, instanceId: {}", timeBuckets, instanceId);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(GCMetricTable.TABLE);
searchRequestBuilder.setTypes(GCMetricTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
MatchQueryBuilder matchApplicationId = QueryBuilders.matchQuery(GCMetricTable.COLUMN_APPLICATION_INSTANCE_ID, instanceId);
MatchQueryBuilder matchTimeBucket = QueryBuilders.matchQuery(GCMetricTable.COLUMN_5S_TIME_BUCKET, s5TimeBucket);
boolQuery.must().add(matchApplicationId);
boolQuery.must().add(matchTimeBucket);
boolQuery.must().add(QueryBuilders.termQuery(GCMetricTable.COLUMN_INSTANCE_ID, instanceId));
boolQuery.must().add(QueryBuilders.termsQuery(GCMetricTable.COLUMN_TIME_BUCKET, timeBuckets));
searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0);
......@@ -89,13 +86,13 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO {
JsonObject response = new JsonObject();
MultiGetRequestBuilder youngPrepareMultiGet = getClient().prepareMultiGet();
int i = 0;
long timeBucket = startTimeBucket;
do {
String youngId = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.NEW_VALUE;
timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1);
String youngId = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.NEW_VALUE;
youngPrepareMultiGet.add(GCMetricTable.TABLE, GCMetricTable.TABLE_TYPE, youngId);
i++;
}
while (startTimeBucket + i <= endTimeBucket);
while (timeBucket <= endTimeBucket);
JsonArray youngArray = new JsonArray();
MultiGetResponse multiGetResponse = youngPrepareMultiGet.get();
......@@ -109,13 +106,13 @@ public class GCMetricEsDAO extends EsDAO implements IGCMetricDAO {
response.add("ygc", youngArray);
MultiGetRequestBuilder oldPrepareMultiGet = getClient().prepareMultiGet();
i = 0;
timeBucket = startTimeBucket;
do {
String oldId = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.OLD_VALUE;
timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1);
String oldId = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + GCPhrase.OLD_VALUE;
oldPrepareMultiGet.add(GCMetricTable.TABLE, GCMetricTable.TABLE_TYPE, oldId);
i++;
}
while (startTimeBucket + i <= endTimeBucket);
while (timeBucket <= endTimeBucket);
JsonArray oldArray = new JsonArray();
......
......@@ -8,7 +8,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
*/
public class GCMetricH2DAO extends H2DAO implements IGCMetricDAO {
@Override public GCCount getGCCount(long timestamp, int instanceId) {
@Override public GCCount getGCCount(long[] timeBuckets, int instanceId) {
return null;
}
......
......@@ -7,7 +7,7 @@ import com.google.gson.JsonObject;
*/
public interface IGCMetricDAO {
GCCount getGCCount(long timestamp, int instanceId);
GCCount getGCCount(long[] timeBuckets, int instanceId);
JsonObject getMetric(int instanceId, long timeBucket);
......
package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonArray;
import java.util.List;
/**
* @author pengys5
*/
public interface IInstPerformanceDAO {
List<InstPerformance> getMultiple(long timeBucket, int applicationId);
InstPerformance get(long[] timeBuckets, int instanceId);
int getTpsMetric(int instanceId, long timeBucket);
......@@ -19,12 +18,12 @@ public interface IInstPerformanceDAO {
class InstPerformance {
private final int instanceId;
private final int callTimes;
private final int calls;
private final long costTotal;
public InstPerformance(int instanceId, int callTimes, long costTotal) {
public InstPerformance(int instanceId, int calls, long costTotal) {
this.instanceId = instanceId;
this.callTimes = callTimes;
this.calls = calls;
this.costTotal = costTotal;
}
......@@ -32,8 +31,8 @@ public interface IInstPerformanceDAO {
return instanceId;
}
public int getCallTimes() {
return callTimes;
public int getCalls() {
return calls;
}
public long getCostTotal() {
......
package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonArray;
import java.util.List;
import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine;
/**
......@@ -15,6 +16,8 @@ public interface IInstanceDAO {
InstanceDataDefine.Instance getInstance(int instanceId);
List<InstanceDataDefine.Instance> getInstances(int applicationId, long timeBucket);
class Application {
private final int applicationId;
private final long count;
......
package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonObject;
import java.util.List;
/**
* @author pengys5
*/
public interface ISegmentCostDAO {
JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName,
String globalTraceId, int limit, int from, Sort sort);
List<String> segmentIds, int limit, int from, Sort sort);
public enum Sort {
Cost, Time
......
......@@ -7,4 +7,6 @@ import com.google.gson.JsonArray;
*/
public interface IServiceReferenceDAO {
JsonArray load(int entryServiceId, long startTime, long endTime);
JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime);
}
package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonArray;
import java.util.LinkedList;
import java.util.List;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetRequestBuilder;
......@@ -11,12 +9,11 @@ import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.sum.Sum;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.instance.InstPerformanceTable;
import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
......@@ -25,46 +22,25 @@ import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
*/
public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO {
@Override public List<InstPerformance> getMultiple(long timeBucket, int applicationId) {
@Override public InstPerformance get(long[] timeBuckets, int instanceId) {
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstPerformanceTable.TABLE);
searchRequestBuilder.setTypes(InstPerformanceTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
MatchQueryBuilder matchApplicationId = QueryBuilders.matchQuery(InstPerformanceTable.COLUMN_APPLICATION_ID, applicationId);
MatchQueryBuilder matchTimeBucket = QueryBuilders.matchQuery(InstPerformanceTable.COLUMN_5S_TIME_BUCKET, timeBucket);
boolQuery.must().add(matchApplicationId);
boolQuery.must().add(matchTimeBucket);
boolQuery.must().add(QueryBuilders.termQuery(InstPerformanceTable.COLUMN_INSTANCE_ID, instanceId));
boolQuery.must().add(QueryBuilders.termsQuery(InstPerformanceTable.COLUMN_TIME_BUCKET, timeBuckets));
searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0);
searchRequestBuilder.addAggregation(
AggregationBuilders.terms(InstPerformanceTable.COLUMN_INSTANCE_ID).field(InstPerformanceTable.COLUMN_INSTANCE_ID)
.subAggregation(
AggregationBuilders.terms(InstPerformanceTable.COLUMN_5S_TIME_BUCKET).field(InstPerformanceTable.COLUMN_5S_TIME_BUCKET)
.subAggregation(AggregationBuilders.sum(InstPerformanceTable.COLUMN_CALL_TIMES).field(InstPerformanceTable.COLUMN_CALL_TIMES))
.subAggregation(AggregationBuilders.sum(InstPerformanceTable.COLUMN_COST_TOTAL).field(InstPerformanceTable.COLUMN_COST_TOTAL))));
searchRequestBuilder.addAggregation(AggregationBuilders.sum(InstPerformanceTable.COLUMN_CALLS).field(InstPerformanceTable.COLUMN_CALLS));
searchRequestBuilder.addAggregation(AggregationBuilders.sum(InstPerformanceTable.COLUMN_COST_TOTAL).field(InstPerformanceTable.COLUMN_COST_TOTAL));
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
Terms instanceTerms = searchResponse.getAggregations().get(InstPerformanceTable.COLUMN_INSTANCE_ID);
List<InstPerformance> instPerformances = new LinkedList<>();
for (Terms.Bucket instanceBucket : instanceTerms.getBuckets()) {
int instanceId = instanceBucket.getKeyAsNumber().intValue();
Terms timeBucketTerms = instanceBucket.getAggregations().get(InstPerformanceTable.COLUMN_5S_TIME_BUCKET);
for (Terms.Bucket timeBucketBucket : timeBucketTerms.getBuckets()) {
long count = timeBucketBucket.getDocCount();
Sum sumCallTimes = timeBucketBucket.getAggregations().get(InstPerformanceTable.COLUMN_CALL_TIMES);
Sum sumCostTotal = timeBucketBucket.getAggregations().get(InstPerformanceTable.COLUMN_COST_TOTAL);
int avgCallTimes = (int)(sumCallTimes.getValue() / count);
int avgCost = (int)(sumCostTotal.getValue() / count);
instPerformances.add(new InstPerformance(instanceId, avgCallTimes, avgCost));
}
}
return instPerformances;
Sum sumCalls = searchResponse.getAggregations().get(InstPerformanceTable.COLUMN_CALLS);
Sum sumCostTotal = searchResponse.getAggregations().get(InstPerformanceTable.COLUMN_CALLS);
return new InstPerformance(instanceId, (int)sumCalls.getValue(), (long)sumCostTotal.getValue());
}
@Override public int getTpsMetric(int instanceId, long timeBucket) {
......@@ -72,7 +48,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO {
GetResponse getResponse = getClient().prepareGet(InstPerformanceTable.TABLE, id).get();
if (getResponse.isExists()) {
return ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue();
return ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALLS)).intValue();
}
return 0;
}
......@@ -80,19 +56,19 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO {
@Override public JsonArray getTpsMetric(int instanceId, long startTimeBucket, long endTimeBucket) {
MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet();
int i = 0;
long timeBucket = startTimeBucket;
do {
String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId;
String id = timeBucket + Const.ID_SPLIT + instanceId;
prepareMultiGet.add(InstPerformanceTable.TABLE, InstPerformanceTable.TABLE_TYPE, id);
i++;
timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1);
}
while (startTimeBucket + i <= endTimeBucket);
while (timeBucket <= endTimeBucket);
JsonArray metrics = new JsonArray();
MultiGetResponse multiGetResponse = prepareMultiGet.get();
for (MultiGetItemResponse response : multiGetResponse.getResponses()) {
if (response.getResponse().isExists()) {
metrics.add(((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue());
metrics.add(((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALLS)).intValue());
} else {
metrics.add(0);
}
......@@ -105,7 +81,7 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO {
GetResponse getResponse = getClient().prepareGet(InstPerformanceTable.TABLE, id).get();
if (getResponse.isExists()) {
int callTimes = ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue();
int callTimes = ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_CALLS)).intValue();
int costTotal = ((Number)getResponse.getSource().get(InstPerformanceTable.COLUMN_COST_TOTAL)).intValue();
return costTotal / callTimes;
}
......@@ -116,18 +92,20 @@ public class InstPerformanceEsDAO extends EsDAO implements IInstPerformanceDAO {
MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet();
int i = 0;
long timeBucket;
do {
String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId;
timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), startTimeBucket, i);
String id = timeBucket + Const.ID_SPLIT + instanceId;
prepareMultiGet.add(InstPerformanceTable.TABLE, InstPerformanceTable.TABLE_TYPE, id);
i++;
}
while (startTimeBucket + i <= endTimeBucket);
while (timeBucket <= endTimeBucket);
JsonArray metrics = new JsonArray();
MultiGetResponse multiGetResponse = prepareMultiGet.get();
for (MultiGetItemResponse response : multiGetResponse.getResponses()) {
if (response.getResponse().isExists()) {
int callTimes = ((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALL_TIMES)).intValue();
int callTimes = ((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_CALLS)).intValue();
int costTotal = ((Number)response.getResponse().getSource().get(InstPerformanceTable.COLUMN_COST_TOTAL)).intValue();
metrics.add(costTotal / callTimes);
} else {
......
package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonArray;
import java.util.List;
import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
/**
......@@ -9,7 +8,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
*/
public class InstPerformanceH2DAO extends H2DAO implements IInstPerformanceDAO {
@Override public List<InstPerformance> getMultiple(long timestamp, int applicationId) {
@Override public InstPerformance get(long[] timeBuckets, int instanceId) {
return null;
}
......
......@@ -2,6 +2,8 @@ package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.LinkedList;
import java.util.List;
import org.elasticsearch.action.get.GetRequestBuilder;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.search.SearchRequestBuilder;
......@@ -9,7 +11,6 @@ import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
import org.elasticsearch.index.query.AbstractQueryBuilder;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MatchQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.elasticsearch.search.SearchHit;
......@@ -18,6 +19,7 @@ import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.metrics.valuecount.ValueCount;
import org.elasticsearch.search.sort.SortBuilders;
import org.elasticsearch.search.sort.SortMode;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine;
import org.skywalking.apm.collector.storage.define.register.InstanceTable;
import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
......@@ -34,17 +36,18 @@ public class InstanceEsDAO extends EsDAO implements IInstanceDAO {
@Override public Long lastHeartBeatTime() {
long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000;
fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore);
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gt(fiveMinuteBefore);
return heartBeatTime(rangeQueryBuilder);
}
@Override public Long instanceLastHeartBeatTime(long applicationInstanceId) {
long fiveMinuteBefore = System.currentTimeMillis() - 5 * 60 * 1000;
fiveMinuteBefore = TimeBucketUtils.INSTANCE.getSecondTimeBucket(fiveMinuteBefore);
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gt(fiveMinuteBefore);
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery(InstanceTable.COLUMN_INSTANCE_ID, applicationInstanceId);
boolQueryBuilder.must(rangeQueryBuilder);
boolQueryBuilder.must(matchQueryBuilder);
boolQueryBuilder.must(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gt(fiveMinuteBefore));
boolQueryBuilder.must(QueryBuilders.termQuery(InstanceTable.COLUMN_INSTANCE_ID, applicationInstanceId));
return heartBeatTime(boolQueryBuilder);
}
......@@ -114,4 +117,30 @@ public class InstanceEsDAO extends EsDAO implements IInstanceDAO {
}
return null;
}
@Override public List<InstanceDataDefine.Instance> getInstances(int applicationId, long timeBucket) {
logger.debug("get instances info, application id: {}, timeBucket: {}", applicationId, timeBucket);
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(InstanceTable.TABLE);
searchRequestBuilder.setTypes(InstanceTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
searchRequestBuilder.setSize(1000);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(InstanceTable.COLUMN_HEARTBEAT_TIME).gte(timeBucket));
boolQuery.must().add(QueryBuilders.termQuery(InstanceTable.COLUMN_APPLICATION_ID, applicationId));
searchRequestBuilder.setQuery(boolQuery);
SearchResponse searchResponse = searchRequestBuilder.execute().actionGet();
SearchHit[] searchHits = searchResponse.getHits().getHits();
List<InstanceDataDefine.Instance> instanceList = new LinkedList<>();
for (SearchHit searchHit : searchHits) {
InstanceDataDefine.Instance instance = new InstanceDataDefine.Instance();
instance.setApplicationId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_APPLICATION_ID)).intValue());
instance.setHeartBeatTime(((Number)searchHit.getSource().get(InstanceTable.COLUMN_HEARTBEAT_TIME)).longValue());
instance.setInstanceId(((Number)searchHit.getSource().get(InstanceTable.COLUMN_INSTANCE_ID)).intValue());
instanceList.add(instance);
}
return instanceList;
}
}
package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonArray;
import java.util.List;
import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine;
import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
......@@ -23,4 +24,8 @@ public class InstanceH2DAO extends H2DAO implements IInstanceDAO {
@Override public InstanceDataDefine.Instance getInstance(int instanceId) {
return null;
}
@Override public List<InstanceDataDefine.Instance> getInstances(int applicationId, long timeBucket) {
return null;
}
}
......@@ -7,6 +7,7 @@ import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetRequestBuilder;
import org.elasticsearch.action.get.MultiGetResponse;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.jvm.MemoryMetricTable;
import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
......@@ -36,22 +37,25 @@ public class MemoryMetricEsDAO extends EsDAO implements IMemoryMetricDAO {
MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet();
int i = 0;
long timeBucket = startTimeBucket;
do {
String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap;
timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1);
String id = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap;
prepareMultiGet.add(MemoryMetricTable.TABLE, MemoryMetricTable.TABLE_TYPE, id);
i++;
}
while (startTimeBucket + i <= endTimeBucket);
while (timeBucket <= endTimeBucket);
JsonObject metric = new JsonObject();
JsonArray usedMetric = new JsonArray();
MultiGetResponse multiGetResponse = prepareMultiGet.get();
for (MultiGetItemResponse response : multiGetResponse.getResponses()) {
if (response.getResponse().isExists()) {
metric.addProperty("max", ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_MAX)).intValue());
metric.addProperty("init", ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_INIT)).intValue());
usedMetric.add(((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_USED)).intValue());
metric.addProperty("max", ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_MAX)).longValue());
metric.addProperty("init", ((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_INIT)).longValue());
usedMetric.add(((Number)response.getResponse().getSource().get(MemoryMetricTable.COLUMN_USED)).longValue());
} else {
metric.addProperty("max", 0);
metric.addProperty("init",0);
usedMetric.add(0);
}
}
......
......@@ -7,6 +7,7 @@ import org.elasticsearch.action.get.MultiGetItemResponse;
import org.elasticsearch.action.get.MultiGetRequestBuilder;
import org.elasticsearch.action.get.MultiGetResponse;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.define.jvm.MemoryPoolMetricTable;
import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
......@@ -36,23 +37,25 @@ public class MemoryPoolMetricEsDAO extends EsDAO implements IMemoryPoolMetricDAO
int poolType) {
MultiGetRequestBuilder prepareMultiGet = getClient().prepareMultiGet();
int i = 0;
long timeBucket = startTimeBucket;
do {
String id = (startTimeBucket + i) + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap + Const.ID_SPLIT + poolType;
timeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, 1);
String id = timeBucket + Const.ID_SPLIT + instanceId + Const.ID_SPLIT + isHeap + Const.ID_SPLIT + poolType;
prepareMultiGet.add(MemoryPoolMetricTable.TABLE, MemoryPoolMetricTable.TABLE_TYPE, id);
i++;
}
while (startTimeBucket + i <= endTimeBucket);
while (timeBucket <= endTimeBucket);
JsonObject metric = new JsonObject();
JsonArray usedMetric = new JsonArray();
MultiGetResponse multiGetResponse = prepareMultiGet.get();
for (MultiGetItemResponse response : multiGetResponse.getResponses()) {
if (response.getResponse().isExists()) {
metric.addProperty("max", ((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_MAX)).intValue());
metric.addProperty("init", ((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_INIT)).intValue());
usedMetric.add(((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_USED)).intValue());
metric.addProperty("max", ((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_MAX)).longValue());
metric.addProperty("init", ((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_INIT)).longValue());
usedMetric.add(((Number)response.getResponse().getSource().get(MemoryPoolMetricTable.COLUMN_USED)).longValue());
} else {
metric.addProperty("max", 0);
metric.addProperty("init", 0);
usedMetric.add(0);
}
}
......
......@@ -25,7 +25,7 @@ import org.skywalking.apm.collector.storage.elasticsearch.dao.EsDAO;
public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO {
@Override public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName,
String globalTraceId, int limit, int from, Sort sort) {
List<String> segmentIds, int limit, int from, Sort sort) {
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(SegmentCostTable.TABLE);
searchRequestBuilder.setTypes(SegmentCostTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
......@@ -44,9 +44,12 @@ public class SegmentCostEsDAO extends EsDAO implements ISegmentCostDAO {
}
boolQueryBuilder.must().add(rangeQueryBuilder);
}
if (!StringUtils.isEmpty(operationName)) {
if (StringUtils.isNotEmpty(operationName)) {
mustQueryList.add(QueryBuilders.matchQuery(SegmentCostTable.COLUMN_SERVICE_NAME, operationName));
}
if (CollectionUtils.isNotEmpty(segmentIds)) {
boolQueryBuilder.must().add(QueryBuilders.termsQuery(SegmentCostTable.COLUMN_SEGMENT_ID, segmentIds.toArray(new String[0])));
}
if (Sort.Cost.equals(sort)) {
searchRequestBuilder.addSort(SegmentCostTable.COLUMN_COST, SortOrder.DESC);
......
package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonObject;
import java.util.List;
import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
/**
......@@ -8,7 +9,7 @@ import org.skywalking.apm.collector.storage.h2.dao.H2DAO;
*/
public class SegmentCostH2DAO extends H2DAO implements ISegmentCostDAO {
@Override public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName,
String globalTraceId, int limit, int from, Sort sort) {
List<String> segmentIds, int limit, int from, Sort sort) {
return null;
}
}
......@@ -22,7 +22,9 @@ public class ServiceNameEsDAO extends EsDAO implements IServiceNameDAO {
GetResponse getResponse = getRequestBuilder.get();
if (getResponse.isExists()) {
return (String)getResponse.getSource().get(ServiceNameTable.COLUMN_SERVICE_NAME);
String serviceName = (String)getResponse.getSource().get(ServiceNameTable.COLUMN_SERVICE_NAME);
int applicationId = ((Number)getResponse.getSource().get(ServiceNameTable.COLUMN_APPLICATION_ID)).intValue();
return applicationId + Const.ID_SPLIT + serviceName;
}
return Const.UNKNOWN;
}
......
......@@ -2,6 +2,8 @@ package org.skywalking.apm.collector.ui.dao;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.LinkedHashMap;
import java.util.Map;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.SearchType;
......@@ -27,21 +29,60 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO
private final Logger logger = LoggerFactory.getLogger(ServiceReferenceEsDAO.class);
@Override public JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime) {
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceReferenceTable.TABLE);
searchRequestBuilder.setTypes(ServiceReferenceTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
int entryServiceId = ServiceIdCache.get(entryApplicationId, entryServiceName);
BoolQueryBuilder entryBoolQuery = QueryBuilders.boolQuery();
if (entryServiceId != 0) {
entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, entryServiceId));
}
entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, entryApplicationId + Const.ID_SPLIT + entryServiceName));
boolQuery.must(entryBoolQuery);
searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0);
return load(searchRequestBuilder);
}
@Override public JsonArray load(int entryServiceId, long startTime, long endTime) {
SearchRequestBuilder searchRequestBuilder = getClient().prepareSearch(ServiceReferenceTable.TABLE);
searchRequestBuilder.setTypes(ServiceReferenceTable.TABLE_TYPE);
searchRequestBuilder.setSearchType(SearchType.DFS_QUERY_THEN_FETCH);
BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();
boolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, entryServiceId));
boolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, ServiceNameCache.getForUI(entryServiceId)));
boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
boolQuery.must().add(QueryBuilders.rangeQuery(ServiceReferenceTable.COLUMN_TIME_BUCKET).gte(startTime).lte(endTime));
String entryServiceName = ServiceNameCache.get(entryServiceId);
BoolQueryBuilder entryBoolQuery = QueryBuilders.boolQuery();
entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_ID, entryServiceId));
entryBoolQuery.should().add(QueryBuilders.matchQuery(ServiceReferenceTable.COLUMN_ENTRY_SERVICE_NAME, entryServiceName));
boolQuery.must(entryBoolQuery);
searchRequestBuilder.setQuery(boolQuery);
searchRequestBuilder.setSize(0);
return load(searchRequestBuilder);
}
private JsonArray load(SearchRequestBuilder searchRequestBuilder) {
searchRequestBuilder.addAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID).field(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID).size(100)
.subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).size(100)
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY)))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_LTE).field(ServiceReferenceTable.COLUMN_S5_LTE))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_GT).field(ServiceReferenceTable.COLUMN_S5_GT))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_ERROR).field(ServiceReferenceTable.COLUMN_ERROR))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_COST_SUMMARY).field(ServiceReferenceTable.COLUMN_COST_SUMMARY)))
.subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).size(100)
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE))
......@@ -53,7 +94,13 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO
searchRequestBuilder.addAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_FRONT_SERVICE_NAME).size(100)
.subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID).size(100)
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY)))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_LTE).field(ServiceReferenceTable.COLUMN_S5_LTE))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S5_GT).field(ServiceReferenceTable.COLUMN_S5_GT))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_ERROR).field(ServiceReferenceTable.COLUMN_ERROR))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_SUMMARY).field(ServiceReferenceTable.COLUMN_SUMMARY))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_COST_SUMMARY).field(ServiceReferenceTable.COLUMN_COST_SUMMARY)))
.subAggregation(AggregationBuilders.terms(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).field(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_NAME).size(100)
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S1_LTE).field(ServiceReferenceTable.COLUMN_S1_LTE))
.subAggregation(AggregationBuilders.sum(ServiceReferenceTable.COLUMN_S3_LTE).field(ServiceReferenceTable.COLUMN_S3_LTE))
......@@ -87,6 +134,8 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO
private void parseSubAggregate(JsonArray serviceReferenceArray, Terms.Bucket frontServiceBucket,
int frontServiceId) {
Map<String, JsonObject> serviceReferenceMap = new LinkedHashMap<>();
Terms behindServiceIdTerms = frontServiceBucket.getAggregations().get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID);
for (Terms.Bucket behindServiceIdBucket : behindServiceIdTerms.getBuckets()) {
int behindServiceId = behindServiceIdBucket.getKeyAsNumber().intValue();
......@@ -100,7 +149,13 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO
Sum costSum = behindServiceIdBucket.getAggregations().get(ServiceReferenceTable.COLUMN_COST_SUMMARY);
String frontServiceName = ServiceNameCache.getForUI(frontServiceId);
if (StringUtils.isNotEmpty(frontServiceName)) {
frontServiceName = frontServiceName.split(Const.ID_SPLIT)[1];
}
String behindServiceName = ServiceNameCache.getForUI(behindServiceId);
if (StringUtils.isNotEmpty(frontServiceName)) {
behindServiceName = behindServiceName.split(Const.ID_SPLIT)[1];
}
JsonObject serviceReference = new JsonObject();
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID), frontServiceId);
......@@ -114,7 +169,7 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), (long)error.getValue());
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), (long)summary.getValue());
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), (long)costSum.getValue());
serviceReferenceArray.add(serviceReference);
merge(serviceReferenceMap, serviceReference);
}
}
......@@ -147,8 +202,33 @@ public class ServiceReferenceEsDAO extends EsDAO implements IServiceReferenceDAO
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR), (long)error.getValue());
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY), (long)summary.getValue());
serviceReference.addProperty(ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY), (long)costSum.getValue());
serviceReferenceArray.add(serviceReference);
merge(serviceReferenceMap, serviceReference);
}
}
serviceReferenceMap.values().forEach(serviceReferenceArray::add);
}
private void merge(Map<String, JsonObject> serviceReferenceMap, JsonObject serviceReference) {
String id = serviceReference.get(ServiceReferenceTable.COLUMN_FRONT_SERVICE_ID) + Const.ID_SPLIT + serviceReference.get(ServiceReferenceTable.COLUMN_BEHIND_SERVICE_ID);
if (serviceReferenceMap.containsKey(id)) {
JsonObject reference = serviceReferenceMap.get(id);
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S1_LTE));
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S3_LTE));
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_LTE));
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_S5_GT));
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_ERROR));
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_SUMMARY));
add(reference, serviceReference, ColumnNameUtils.INSTANCE.rename(ServiceReferenceTable.COLUMN_COST_SUMMARY));
} else {
serviceReferenceMap.put(id, serviceReference);
}
}
private void add(JsonObject oldReference, JsonObject newReference, String key) {
long oldValue = oldReference.get(key).getAsLong();
long newValue = newReference.get(key).getAsLong();
oldReference.addProperty(key, oldValue + newValue);
}
}
......@@ -11,4 +11,8 @@ public class ServiceReferenceH2DAO extends H2DAO implements IServiceReferenceDAO
@Override public JsonArray load(int entryServiceId, long startTime, long endTime) {
return null;
}
@Override public JsonArray load(String entryServiceName, int entryApplicationId, long startTime, long endTime) {
return null;
}
}
......@@ -21,7 +21,8 @@ import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceMetr
import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceMetricGetRangeTimeBucketHandler;
import org.skywalking.apm.collector.ui.jetty.handler.instancemetric.InstanceOsInfoGetHandler;
import org.skywalking.apm.collector.ui.jetty.handler.servicetree.EntryServiceGetHandler;
import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetHandler;
import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetByIdHandler;
import org.skywalking.apm.collector.ui.jetty.handler.servicetree.ServiceTreeGetByNameHandler;
import org.skywalking.apm.collector.ui.jetty.handler.time.AllInstanceLastTimeGetHandler;
import org.skywalking.apm.collector.ui.jetty.handler.time.OneInstanceLastTimeGetHandler;
......@@ -71,7 +72,8 @@ public class UIJettyModuleDefine extends UIModuleDefine {
handlers.add(new InstanceMetricGetOneTimeBucketHandler());
handlers.add(new InstanceMetricGetRangeTimeBucketHandler());
handlers.add(new EntryServiceGetHandler());
handlers.add(new ServiceTreeGetHandler());
handlers.add(new ServiceTreeGetByIdHandler());
handlers.add(new ServiceTreeGetByNameHandler());
return handlers;
}
}
......@@ -11,12 +11,12 @@ import org.slf4j.LoggerFactory;
/**
* @author pengys5
*/
public class ServiceTreeGetHandler extends JettyHandler {
public class ServiceTreeGetByIdHandler extends JettyHandler {
private final Logger logger = LoggerFactory.getLogger(ServiceTreeGetHandler.class);
private final Logger logger = LoggerFactory.getLogger(ServiceTreeGetByIdHandler.class);
@Override public String pathSpec() {
return "/service/tree";
return "/service/tree/entryServiceId";
}
private ServiceTreeService service = new ServiceTreeService();
......
package org.skywalking.apm.collector.ui.jetty.handler.servicetree;
import com.google.gson.JsonElement;
import javax.servlet.http.HttpServletRequest;
import org.skywalking.apm.collector.server.jetty.ArgumentsParseException;
import org.skywalking.apm.collector.server.jetty.JettyHandler;
import org.skywalking.apm.collector.ui.service.ServiceTreeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* @author pengys5
*/
public class ServiceTreeGetByNameHandler extends JettyHandler {
private final Logger logger = LoggerFactory.getLogger(ServiceTreeGetByNameHandler.class);
@Override public String pathSpec() {
return "/service/tree/entryServiceName";
}
private ServiceTreeService service = new ServiceTreeService();
@Override protected JsonElement doGet(HttpServletRequest req) throws ArgumentsParseException {
if (!req.getParameterMap().containsKey("entryServiceName") || !req.getParameterMap().containsKey("entryApplicationId") || !req.getParameterMap().containsKey("startTime") || !req.getParameterMap().containsKey("endTime")) {
throw new ArgumentsParseException("must contains parameters: entryServiceName, entryApplicationId, startTime, endTime");
}
String entryServiceName = req.getParameter("entryServiceName");
String entryApplicationIdStr = req.getParameter("entryApplicationId");
String startTimeStr = req.getParameter("startTime");
String endTimeStr = req.getParameter("endTime");
logger.debug("service entry get entryServiceName: {}, startTime: {}, endTime: {}", entryServiceName, startTimeStr, endTimeStr);
int entryApplicationId;
try {
entryApplicationId = Integer.parseInt(entryApplicationIdStr);
} catch (NumberFormatException e) {
throw new ArgumentsParseException("entry application id must be integer");
}
long startTime;
try {
startTime = Long.parseLong(startTimeStr);
} catch (NumberFormatException e) {
throw new ArgumentsParseException("start time must be long");
}
long endTime;
try {
endTime = Long.parseLong(endTimeStr);
} catch (NumberFormatException e) {
throw new ArgumentsParseException("end time must be long");
}
return service.loadServiceTree(entryServiceName, entryApplicationId, startTime, endTime);
}
@Override protected JsonElement doPost(HttpServletRequest req) throws ArgumentsParseException {
throw new UnsupportedOperationException();
}
}
......@@ -28,12 +28,18 @@ public class AllInstanceLastTimeGetHandler extends JettyHandler {
Long timeBucket = service.allInstanceLastTime();
logger.debug("all instance last time: {}", timeBucket);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket));
calendar.add(Calendar.SECOND, -5);
long instanceTimeBucket;
if (timeBucket == 0) {
instanceTimeBucket = 0;
} else {
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket));
calendar.add(Calendar.SECOND, -5);
instanceTimeBucket = calendar.getTimeInMillis();
}
JsonObject timeJson = new JsonObject();
timeJson.addProperty("timeBucket", TimeBucketUtils.INSTANCE.getSecondTimeBucket(calendar.getTimeInMillis()));
timeJson.addProperty("timeBucket", TimeBucketUtils.INSTANCE.getSecondTimeBucket(instanceTimeBucket));
return timeJson;
}
......
......@@ -5,9 +5,11 @@ import com.google.gson.JsonObject;
import java.util.List;
import org.skywalking.apm.collector.core.util.TimeBucketUtils;
import org.skywalking.apm.collector.storage.dao.DAOContainer;
import org.skywalking.apm.collector.storage.define.register.InstanceDataDefine;
import org.skywalking.apm.collector.ui.cache.ApplicationCache;
import org.skywalking.apm.collector.ui.dao.IGCMetricDAO;
import org.skywalking.apm.collector.ui.dao.IInstPerformanceDAO;
import org.skywalking.apm.collector.ui.dao.IInstanceDAO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -21,23 +23,29 @@ public class InstanceHealthService {
public JsonObject getInstances(long timeBucket, int applicationId) {
JsonObject response = new JsonObject();
long s5TimeBucket = TimeBucketUtils.INSTANCE.getFiveSecondTimeBucket(timeBucket);
long[] timeBuckets = TimeBucketUtils.INSTANCE.getFiveSecondTimeBuckets(timeBucket);
long halfHourBeforeTimeBucket = TimeBucketUtils.INSTANCE.addSecondForSecondTimeBucket(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket, -60 * 30);
IInstanceDAO instanceDAO = (IInstanceDAO)DAOContainer.INSTANCE.get(IInstanceDAO.class.getName());
List<InstanceDataDefine.Instance> instanceList = instanceDAO.getInstances(applicationId, halfHourBeforeTimeBucket);
IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName());
List<IInstPerformanceDAO.InstPerformance> performances = instPerformanceDAO.getMultiple(s5TimeBucket, applicationId);
instanceList.forEach(instance -> {
JsonArray instances = new JsonArray();
response.addProperty("applicationCode", ApplicationCache.getForUI(applicationId));
response.addProperty("applicationId", applicationId);
response.add("instances", instances);
JsonArray instances = new JsonArray();
response.addProperty("applicationCode", ApplicationCache.getForUI(applicationId));
response.addProperty("applicationId", applicationId);
response.add("instances", instances);
IInstPerformanceDAO instPerformanceDAO = (IInstPerformanceDAO)DAOContainer.INSTANCE.get(IInstPerformanceDAO.class.getName());
IInstPerformanceDAO.InstPerformance performance = instPerformanceDAO.get(timeBuckets, instance.getInstanceId());
IGCMetricDAO gcMetricDAO = (IGCMetricDAO)DAOContainer.INSTANCE.get(IGCMetricDAO.class.getName());
performances.forEach(instance -> {
IGCMetricDAO gcMetricDAO = (IGCMetricDAO)DAOContainer.INSTANCE.get(IGCMetricDAO.class.getName());
JsonObject instanceJson = new JsonObject();
instanceJson.addProperty("id", instance.getInstanceId());
instanceJson.addProperty("tps", instance.getCallTimes());
instanceJson.addProperty("tps", performance.getCalls());
int avg = (int)(instance.getCostTotal() / instance.getCallTimes());
int avg = 0;
if (performance.getCalls() != 0) {
avg = (int)(performance.getCostTotal() / performance.getCalls());
}
instanceJson.addProperty("avg", avg);
if (avg > 5000) {
......@@ -50,14 +58,22 @@ public class InstanceHealthService {
instanceJson.addProperty("healthLevel", 3);
}
instanceJson.addProperty("status", 0);
long heartBeatTime = TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), instance.getHeartBeatTime());
long currentTime = TimeBucketUtils.INSTANCE.changeTimeBucket2TimeStamp(TimeBucketUtils.TimeBucketType.SECOND.name(), timeBucket);
IGCMetricDAO.GCCount gcCount = gcMetricDAO.getGCCount(s5TimeBucket, instance.getInstanceId());
if (currentTime - heartBeatTime < 1000 * 60 * 2) {
instanceJson.addProperty("status", 0);
} else {
instanceJson.addProperty("status", 1);
}
IGCMetricDAO.GCCount gcCount = gcMetricDAO.getGCCount(timeBuckets, instance.getInstanceId());
instanceJson.addProperty("ygc", gcCount.getYoung());
instanceJson.addProperty("ogc", gcCount.getOld());
instances.add(instanceJson);
});
return response;
}
}
package org.skywalking.apm.collector.ui.service;
import com.google.gson.JsonObject;
import java.util.LinkedList;
import java.util.List;
import org.skywalking.apm.collector.core.util.StringUtils;
import org.skywalking.apm.collector.storage.dao.DAOContainer;
import org.skywalking.apm.collector.ui.dao.IGlobalTraceDAO;
import org.skywalking.apm.collector.ui.dao.ISegmentCostDAO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -16,7 +20,13 @@ public class SegmentTopService {
public JsonObject loadTop(long startTime, long endTime, long minCost, long maxCost, String operationName,
String globalTraceId, int limit, int from, ISegmentCostDAO.Sort sort) {
logger.debug("startTime: {}, endTime: {}, minCost: {}, maxCost: {}, operationName: {}, globalTraceId: {}, limit: {}, from: {}", startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from);
List<String> segmentIds = new LinkedList<>();
if (StringUtils.isNotEmpty(globalTraceId)) {
IGlobalTraceDAO globalTraceDAO = (IGlobalTraceDAO)DAOContainer.INSTANCE.get(IGlobalTraceDAO.class.getName());
segmentIds = globalTraceDAO.getSegmentIds(globalTraceId);
}
ISegmentCostDAO segmentCostDAO = (ISegmentCostDAO)DAOContainer.INSTANCE.get(ISegmentCostDAO.class.getName());
return segmentCostDAO.loadTop(startTime, endTime, minCost, maxCost, operationName, globalTraceId, limit, from, sort);
return segmentCostDAO.loadTop(startTime, endTime, minCost, maxCost, operationName, segmentIds, limit, from, sort);
}
}
......@@ -21,4 +21,9 @@ public class ServiceTreeService {
IServiceReferenceDAO serviceReferenceDAO = (IServiceReferenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName());
return serviceReferenceDAO.load(entryServiceId, startTime, endTime);
}
public JsonArray loadServiceTree(String entryServiceName, int entryApplicationId, long startTime, long endTime) {
IServiceReferenceDAO serviceReferenceDAO = (IServiceReferenceDAO)DAOContainer.INSTANCE.get(IServiceReferenceDAO.class.getName());
return serviceReferenceDAO.load(entryServiceName, entryApplicationId, startTime, endTime);
}
}
\ No newline at end of file
......@@ -3,13 +3,17 @@ package org.skywalking.apm.collector.ui.service;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.List;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.StringUtils;
import org.skywalking.apm.collector.storage.dao.DAOContainer;
import org.skywalking.apm.collector.ui.cache.ApplicationCache;
import org.skywalking.apm.collector.ui.cache.ServiceNameCache;
import org.skywalking.apm.collector.ui.dao.ISegmentDAO;
import org.skywalking.apm.network.proto.KeyWithStringValue;
import org.skywalking.apm.network.proto.LogMessage;
import org.skywalking.apm.network.proto.SpanObject;
import org.skywalking.apm.network.proto.TraceSegmentObject;
import org.skywalking.apm.network.trace.component.ComponentsDefine;
/**
* @author pengys5
......@@ -26,7 +30,10 @@ public class SpanService {
if (spanId == spanObject.getSpanId()) {
String operationName = spanObject.getOperationName();
if (spanObject.getOperationNameId() != 0) {
operationName = ServiceNameCache.get(spanObject.getOperationNameId());
String serviceName = ServiceNameCache.get(spanObject.getOperationNameId());
if (StringUtils.isNotEmpty(serviceName)) {
operationName = serviceName.split(Const.ID_SPLIT)[1];
}
}
spanJson.addProperty("operationName", operationName);
spanJson.addProperty("startTime", spanObject.getStartTime());
......@@ -51,12 +58,42 @@ public class SpanService {
spanJson.add("logMessage", logsArray);
JsonArray tagsArray = new JsonArray();
JsonObject spanTypeJson = new JsonObject();
spanTypeJson.addProperty("key", "span type");
spanTypeJson.addProperty("value", spanObject.getSpanType().name());
tagsArray.add(spanTypeJson);
JsonObject componentJson = new JsonObject();
componentJson.addProperty("key", "component");
if (spanObject.getComponentId() == 0) {
componentJson.addProperty("value", spanObject.getComponent());
} else {
componentJson.addProperty("value", ComponentsDefine.getInstance().getComponentName(spanObject.getComponentId()));
}
tagsArray.add(componentJson);
JsonObject peerJson = new JsonObject();
peerJson.addProperty("key", "peer");
if (spanObject.getPeerId() == 0) {
peerJson.addProperty("value", spanObject.getPeer());
} else {
peerJson.addProperty("value", ApplicationCache.getForUI(spanObject.getPeerId()));
}
tagsArray.add(peerJson);
for (KeyWithStringValue tagValue : spanObject.getTagsList()) {
JsonObject tagJson = new JsonObject();
tagJson.addProperty("key", tagValue.getKey());
tagJson.addProperty("value", tagValue.getValue());
tagsArray.add(tagJson);
}
JsonObject isErrorJson = new JsonObject();
isErrorJson.addProperty("key", "is error");
isErrorJson.addProperty("value", spanObject.getIsError());
tagsArray.add(isErrorJson);
spanJson.add("tags", tagsArray);
}
}
......
......@@ -3,6 +3,7 @@ package org.skywalking.apm.collector.ui.service;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.storage.define.noderef.NodeReferenceTable;
......@@ -26,13 +27,14 @@ public class TraceDagDataBuilder {
changeNodeComp2Map(nodeCompArray);
changeMapping2Map(nodesMappingArray);
for (int i = 0; i < resSumArray.size(); i++) {
JsonObject nodeRefJsonObj = resSumArray.get(i).getAsJsonObject();
Map<String, JsonObject> mergedResSumMap = merge(resSumArray);
mergedResSumMap.values().forEach(nodeRefJsonObj -> {
String front = nodeRefJsonObj.get("front").getAsString();
String behind = nodeRefJsonObj.get("behind").getAsString();
if (hasMapping(behind)) {
continue;
return;
}
JsonObject lineJsonObj = new JsonObject();
......@@ -42,7 +44,7 @@ public class TraceDagDataBuilder {
lineArray.add(lineJsonObj);
logger.debug("line: {}", lineJsonObj);
}
});
JsonObject dagJsonObj = new JsonObject();
dagJsonObj.add("nodes", pointArray);
......@@ -93,4 +95,28 @@ public class TraceDagDataBuilder {
private boolean hasMapping(String peers) {
return mappingMap.containsKey(peers);
}
private Map<String, JsonObject> merge(JsonArray nodeReference) {
Map<String, JsonObject> mergedRef = new LinkedHashMap<>();
for (int i = 0; i < nodeReference.size(); i++) {
JsonObject nodeRefJsonObj = nodeReference.get(i).getAsJsonObject();
String front = nodeRefJsonObj.get("front").getAsString();
String behind = nodeRefJsonObj.get("behind").getAsString();
String id = front + Const.ID_SPLIT + behind;
if (mergedRef.containsKey(id)) {
JsonObject oldValue = mergedRef.get(id);
oldValue.addProperty(NodeReferenceTable.COLUMN_S1_LTE, oldValue.get(NodeReferenceTable.COLUMN_S1_LTE).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_S1_LTE).getAsLong());
oldValue.addProperty(NodeReferenceTable.COLUMN_S3_LTE, oldValue.get(NodeReferenceTable.COLUMN_S3_LTE).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_S3_LTE).getAsLong());
oldValue.addProperty(NodeReferenceTable.COLUMN_S5_LTE, oldValue.get(NodeReferenceTable.COLUMN_S5_LTE).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_S5_LTE).getAsLong());
oldValue.addProperty(NodeReferenceTable.COLUMN_S5_GT, oldValue.get(NodeReferenceTable.COLUMN_S5_GT).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_S5_GT).getAsLong());
oldValue.addProperty(NodeReferenceTable.COLUMN_ERROR, oldValue.get(NodeReferenceTable.COLUMN_ERROR).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_ERROR).getAsLong());
oldValue.addProperty(NodeReferenceTable.COLUMN_SUMMARY, oldValue.get(NodeReferenceTable.COLUMN_SUMMARY).getAsLong() + nodeRefJsonObj.get(NodeReferenceTable.COLUMN_SUMMARY).getAsLong());
} else {
mergedRef.put(id, nodeReference.get(i).getAsJsonObject());
}
}
return mergedRef;
}
}
......@@ -7,6 +7,7 @@ import java.util.List;
import org.skywalking.apm.collector.core.util.CollectionUtils;
import org.skywalking.apm.collector.core.util.Const;
import org.skywalking.apm.collector.core.util.ObjectUtils;
import org.skywalking.apm.collector.core.util.StringUtils;
import org.skywalking.apm.collector.storage.dao.DAOContainer;
import org.skywalking.apm.collector.ui.cache.ApplicationCache;
import org.skywalking.apm.collector.ui.cache.ServiceNameCache;
......@@ -98,7 +99,12 @@ public class TraceStackService {
String operationName = spanObject.getOperationName();
if (spanObject.getOperationNameId() != 0) {
operationName = ServiceNameCache.get(spanObject.getOperationNameId());
String serviceName = ServiceNameCache.get(spanObject.getOperationNameId());
if (StringUtils.isNotEmpty(serviceName)) {
operationName = serviceName.split(Const.ID_SPLIT)[1];
} else {
operationName = Const.EMPTY_STRING;
}
}
String applicationCode = ApplicationCache.get(segment.getApplicationId());
......@@ -113,7 +119,13 @@ public class TraceStackService {
UniqueId uniqueId = reference.getParentTraceSegmentId();
StringBuilder segmentIdBuilder = new StringBuilder();
uniqueId.getIdPartsList().forEach(part -> segmentIdBuilder.append(String.valueOf(part)));
for (int i = 0; i < uniqueId.getIdPartsList().size(); i++) {
if (i == 0) {
segmentIdBuilder.append(String.valueOf(uniqueId.getIdPartsList().get(i)));
} else {
segmentIdBuilder.append(".").append(String.valueOf(uniqueId.getIdPartsList().get(i)));
}
}
String parentSegmentId = segmentIdBuilder.toString();
segmentParentSpanId = parentSegmentId + Const.SEGMENT_SPAN_SPLIT + String.valueOf(parentSpanId);
......
......@@ -35,7 +35,7 @@ public enum OperationNameDictionary {
OperationNameKey key = new OperationNameKey(applicationId, operationName);
Integer operationId = operationNameDictionary.get(key);
if (operationId != null) {
return new Found(applicationId);
return new Found(operationId);
} else {
if (registerWhenNotFound &&
operationNameDictionary.size() + unRegisterOperationNames.size() < OPERATION_NAME_BUFFER_SIZE) {
......
......@@ -27,6 +27,6 @@ public abstract class CPUMetricAccessor {
long now = System.nanoTime();
CPU.Builder cpuBuilder = CPU.newBuilder();
return cpuBuilder.setUsagePercent(cpuCost * 1.0d / (now - lastSampleTimeNs) * cpuCoreNum).build();
return cpuBuilder.setUsagePercent(cpuCost * 1.0d / ((now - lastSampleTimeNs) * cpuCoreNum)).build();
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册