Merge pull request #404 from wu-sheng/feature/debugging
Feature/debugging
This commit is contained in:
commit
03a5db8ea4
|
|
@ -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()));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,13 +1,13 @@
|
|||
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();
|
||||
|
||||
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()));
|
||||
}
|
||||
|
||||
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);
|
||||
nodeReference.setId(idBuilder);
|
||||
nodeReferences.add(buildNodeRefSum(nodeReference, spanObject.getStartTime(), spanObject.getEndTime(), spanObject.getIsError()));
|
||||
});
|
||||
} else {
|
||||
referenceSum.setError(1);
|
||||
}
|
||||
referenceSum.setSummary(1);
|
||||
return referenceSum;
|
||||
}
|
||||
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()));
|
||||
|
||||
@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();
|
||||
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()));
|
||||
}
|
||||
}
|
||||
|
||||
@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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,9 +1,9 @@
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -1,10 +1,9 @@
|
|||
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 (hasEntry) {
|
||||
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());
|
||||
|
||||
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,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,25 @@
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,39 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,115 @@
|
|||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,102 @@
|
|||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,103 @@
|
|||
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
|
||||
|
|
@ -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>
|
||||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -1,13 +1,12 @@
|
|||
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() {
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
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;
|
||||
|
|
|
|||
|
|
@ -1,13 +1,14 @@
|
|||
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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,6 @@
|
|||
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 {
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
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);
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
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();
|
||||
|
|
@ -0,0 +1,62 @@
|
|||
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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,7 +1,11 @@
|
|||
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);
|
||||
}
|
||||
}
|
||||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue