From e3a297a6fc0b02d187dd199a578fe1298deb85d3 Mon Sep 17 00:00:00 2001 From: jaehong-kim Date: Fri, 3 May 2019 11:18:17 +0900 Subject: [PATCH] [#4558] Change stat-collector type of Agent --- .../test/monitor/AgentStatMonitorTest.java | 12 +- .../profiler/context/module/GrpcModule.java | 5 + .../context/module/StatConverter.java | 34 +++ .../profiler/context/module/ThriftModule.java | 6 + .../context/module/ThriftStatsModule.java | 30 +- .../provider/SpanDataSenderProvider.java | 5 +- .../provider/StatDataSenderProvider.java | 11 +- .../ActiveTraceMetricCollectorProvider.java | 8 +- .../buffer/BufferMetricCollectorProvider.java | 11 +- .../cpu/CpuLoadMetricCollectorProvider.java | 8 +- .../DataSourceMetricCollectorProvider.java | 10 +- .../DeadlockMetricCollectorProvider.java | 8 +- ...FileDescriptorMetricCollectorProvider.java | 8 +- .../jvmgc/JvmGcMetricCollectorProvider.java | 6 +- .../ResponseTimeMetricCollectorProvider.java | 8 +- .../TransactionMetricCollectorProvider.java | 8 +- .../thrift/StatThriftMessageConverter.java | 281 ++++++++++++++++++ .../StatThriftMessageConverterProvider.java | 36 +++ .../ThreadDumpThriftMessageConverter.java | 71 +++++ .../ThreadStateThriftMessageConverter.java | 52 ++++ .../pinpoint/profiler/monitor/CollectJob.java | 20 +- .../monitor/DefaultAgentStatMonitor.java | 7 +- .../monitor/collector/AgentStatCollector.java | 65 ++-- .../DefaultActiveTraceMetricCollector.java | 23 +- .../buffer/DefaultBufferMetricCollector.java | 15 +- .../cpu/DefaultCpuLoadMetricCollector.java | 10 +- .../DefaultDataSourceMetricCollector.java | 38 +-- .../DefaultDeadlockMetricCollector.java | 21 +- .../DefaultFileDescriptorMetricCollector.java | 12 +- .../jvmgc/BasicJvmGcMetricCollector.java | 36 +-- .../jvmgc/DetailedJvmGcMetricCollector.java | 34 ++- .../DefaultResponseTimeMetricCollector.java | 19 +- .../DefaultTransactionMetricCollector.java | 15 +- .../metric/AgentStatMetricSnapshot.java | 179 +++++++++++ .../metric/AgentStatMetricSnapshotBatch.java | 62 ++++ .../metric/JvmGcDetailedMetricSnapshot.java | 110 +++++++ .../monitor/metric/JvmGcMetricSnapshot.java | 112 +++++++ .../datasource/DataSourceMetricSnapshot.java | 43 +++ .../deadlock/DeadlockMetricSnapshot.java | 53 ++++ .../deadlock/MonitorInfoMetricSnapshot.java | 50 ++++ .../deadlock/ThreadDumpMetricSnapshot.java | 195 ++++++++++++ .../service/ActiveThreadDumpService.java | 6 +- .../service/ActiveThreadLightDumpService.java | 9 +- .../profiler/sender/TcpDataSender.java | 15 +- .../profiler/sender/UdpDataSenderFactory.java | 2 +- .../profiler/util/ThreadDumpUtils.java | 93 ++---- .../profiler/monitor/CollectJobTest.java | 12 +- ...efaultResponseTimeMetricCollectorTest.java | 6 +- .../profiler/util/ThreadDumpUtilsTest.java | 16 +- ...entActiveThreadDumpListSerializerTest.java | 8 +- .../web/vo/AgentActiveThreadDumpListTest.java | 17 +- 51 files changed, 1567 insertions(+), 354 deletions(-) create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/StatConverter.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/StatThriftMessageConverter.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/StatThriftMessageConverterProvider.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/ThreadDumpThriftMessageConverter.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/ThreadStateThriftMessageConverter.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/AgentStatMetricSnapshot.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/AgentStatMetricSnapshotBatch.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/JvmGcDetailedMetricSnapshot.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/JvmGcMetricSnapshot.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/datasource/DataSourceMetricSnapshot.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/DeadlockMetricSnapshot.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/MonitorInfoMetricSnapshot.java create mode 100644 profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/ThreadDumpMetricSnapshot.java diff --git a/profiler-test/src/test/java/com/navercorp/pinpoint/test/monitor/AgentStatMonitorTest.java b/profiler-test/src/test/java/com/navercorp/pinpoint/test/monitor/AgentStatMonitorTest.java index df8523cfe4e6..b72d300ba8f5 100644 --- a/profiler-test/src/test/java/com/navercorp/pinpoint/test/monitor/AgentStatMonitorTest.java +++ b/profiler-test/src/test/java/com/navercorp/pinpoint/test/monitor/AgentStatMonitorTest.java @@ -20,6 +20,8 @@ import com.navercorp.pinpoint.profiler.monitor.AgentStatMonitor; import com.navercorp.pinpoint.profiler.monitor.DefaultAgentStatMonitor; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshotBatch; import com.navercorp.pinpoint.profiler.sender.DataSender; import com.navercorp.pinpoint.test.ListenableDataSender; import com.navercorp.pinpoint.test.TBaseRecorder; @@ -43,18 +45,18 @@ public class AgentStatMonitorTest { private final Logger logger = LoggerFactory.getLogger(this.getClass()); - private TBaseRecorder tBaseRecorder; + private TBaseRecorder tBaseRecorder; private DataSender dataSender; @Mock - private AgentStatMetricCollector agentStatCollector; + private AgentStatMetricCollector agentStatCollector; @Before public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - when(agentStatCollector.collect()).thenReturn(new TAgentStat()); + when(agentStatCollector.collect()).thenReturn(new AgentStatMetricSnapshot()); - this.tBaseRecorder = new TBaseRecorder(); + this.tBaseRecorder = new TBaseRecorder(); TBaseRecorderAdaptor recorderAdaptor = new TBaseRecorderAdaptor(tBaseRecorder); ListenableDataSender listenableDataSender = new ListenableDataSender("testDataSender"); @@ -77,7 +79,7 @@ public void testAgentStatMonitor() throws InterruptedException { monitor.stop(); // Then assertTrue(tBaseRecorder.size() >= minNumBatchToTest); - for (TAgentStatBatch agentStatBatch : tBaseRecorder) { + for (AgentStatMetricSnapshotBatch agentStatBatch : tBaseRecorder) { logger.debug("agentStatBatch:{}", agentStatBatch); assertTrue(agentStatBatch.getAgentStats().size() <= numCollectionsPerBatch); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/GrpcModule.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/GrpcModule.java index ae21884862e1..c2e9afa99e62 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/GrpcModule.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/GrpcModule.java @@ -38,6 +38,7 @@ import com.navercorp.pinpoint.profiler.context.provider.TcpDataSenderProvider; import com.navercorp.pinpoint.profiler.context.provider.grpc.GrpcSpanProcessorProvider; import com.navercorp.pinpoint.profiler.context.thrift.MessageConverter; +import com.navercorp.pinpoint.profiler.context.thrift.StatThriftMessageConverterProvider; import com.navercorp.pinpoint.profiler.receiver.CommandDispatcher; import com.navercorp.pinpoint.profiler.sender.DataSender; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; @@ -87,6 +88,10 @@ protected void configure() { Key>> metadataMessageConverterKey = Key.get(thriftMessageConverter, MetadataConverter.class); bind(metadataMessageConverterKey).toProvider(MetadataMessageConverterProvider.class ).in(Scopes.SINGLETON); + // Stat Thrift Converter + TypeLiteral>> statMessageConverter = new TypeLiteral>>() {}; + Key>> statMessageConverterKey = Key.get(statMessageConverter, StatConverter.class); + bind(statMessageConverterKey).toProvider(StatThriftMessageConverterProvider.class ).in(Scopes.SINGLETON); Key spanDataSender = Key.get(DataSender.class, SpanDataSender.class); bind(spanDataSender).toProvider(GrpcDataSenderProvider.class).in(Scopes.SINGLETON); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/StatConverter.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/StatConverter.java new file mode 100644 index 000000000000..b753bad1a753 --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/StatConverter.java @@ -0,0 +1,34 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.context.module; + +import com.google.inject.BindingAnnotation; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * @author jaehong.kim + */ +@BindingAnnotation +@Target(PARAMETER) +@Retention(RUNTIME) +public @interface StatConverter { +} diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/ThriftModule.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/ThriftModule.java index 8bd0b31df500..a763ebdd3d48 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/ThriftModule.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/ThriftModule.java @@ -36,6 +36,7 @@ import com.navercorp.pinpoint.profiler.context.thrift.DefaultTransactionIdEncoder; import com.navercorp.pinpoint.profiler.context.thrift.MessageConverter; import com.navercorp.pinpoint.profiler.context.thrift.SpanThriftMessageConverterProvider; +import com.navercorp.pinpoint.profiler.context.thrift.StatThriftMessageConverterProvider; import com.navercorp.pinpoint.profiler.receiver.CommandDispatcher; import com.navercorp.pinpoint.profiler.sender.DataSender; import com.navercorp.pinpoint.profiler.sender.EnhancedDataSender; @@ -86,6 +87,11 @@ protected void configure() { // expose(metadataMessageConverterKey); + // Stat Thrift Converter + TypeLiteral>> statMessageConverter = new TypeLiteral>>() {}; + Key>> statMessageConverterKey = Key.get(statMessageConverter, StatConverter.class); + bind(statMessageConverterKey).toProvider(StatThriftMessageConverterProvider.class ).in(Scopes.SINGLETON); + Key spanDataSender = Key.get(DataSender.class, SpanDataSender.class); bind(spanDataSender).toProvider(SpanDataSenderProvider.class).in(Scopes.SINGLETON); expose(spanDataSender); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/ThriftStatsModule.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/ThriftStatsModule.java index f3ce68dda8d4..7cce4eea6b34 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/ThriftStatsModule.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/module/ThriftStatsModule.java @@ -20,6 +20,7 @@ import com.google.inject.Scopes; import com.google.inject.TypeLiteral; import com.google.inject.name.Names; +import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHistogram; import com.navercorp.pinpoint.profiler.context.provider.stat.activethread.ActiveTraceMetricCollectorProvider; import com.navercorp.pinpoint.profiler.context.provider.stat.buffer.BufferMetricCollectorProvider; import com.navercorp.pinpoint.profiler.context.provider.stat.cpu.CpuLoadMetricCollectorProvider; @@ -31,6 +32,15 @@ import com.navercorp.pinpoint.profiler.context.provider.stat.transaction.TransactionMetricCollectorProvider; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatCollector; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.JvmGcMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.buffer.BufferMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.cpu.CpuLoadMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSourceMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.DeadlockMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.filedescriptor.FileDescriptorMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.response.ResponseTimeValue; +import com.navercorp.pinpoint.profiler.monitor.metric.transaction.TransactionMetricSnapshot; import com.navercorp.pinpoint.thrift.dto.TActiveTrace; import com.navercorp.pinpoint.thrift.dto.TAgentStat; import com.navercorp.pinpoint.thrift.dto.TCpuLoad; @@ -54,43 +64,43 @@ protected void configure() { binder().disableCircularProxies(); // gc - TypeLiteral> jvmGcCollector = new TypeLiteral>() {}; + TypeLiteral> jvmGcCollector = new TypeLiteral>() {}; bind(jvmGcCollector).toProvider(JvmGcMetricCollectorProvider.class).in(Scopes.SINGLETON); // cpu - TypeLiteral> cpuLoadCollector = new TypeLiteral>() {}; + TypeLiteral> cpuLoadCollector = new TypeLiteral>() {}; bind(cpuLoadCollector).toProvider(CpuLoadMetricCollectorProvider.class).in(Scopes.SINGLETON); // FD - TypeLiteral> fdCollector = new TypeLiteral>() {}; + TypeLiteral> fdCollector = new TypeLiteral>() {}; bind(fdCollector).toProvider(FileDescriptorMetricCollectorProvider.class).in(Scopes.SINGLETON); // buffer - TypeLiteral> bufferCollector = new TypeLiteral>() {}; + TypeLiteral> bufferCollector = new TypeLiteral>() {}; bind(bufferCollector).toProvider(BufferMetricCollectorProvider.class).in(Scopes.SINGLETON); // transaction - TypeLiteral> transactionCollector = new TypeLiteral>() {}; + TypeLiteral> transactionCollector = new TypeLiteral>() {}; bind(transactionCollector).toProvider(TransactionMetricCollectorProvider.class).in(Scopes.SINGLETON); // activeTrace - TypeLiteral> activeTraceCollector = new TypeLiteral>() {}; + TypeLiteral> activeTraceCollector = new TypeLiteral>() {}; bind(activeTraceCollector).toProvider(ActiveTraceMetricCollectorProvider.class).in(Scopes.SINGLETON); // responseTime - TypeLiteral> responseTimeCollector = new TypeLiteral>() {}; + TypeLiteral> responseTimeCollector = new TypeLiteral>() {}; bind(responseTimeCollector).toProvider(ResponseTimeMetricCollectorProvider.class).in(Scopes.SINGLETON); // datasource - TypeLiteral> datasourceCollector = new TypeLiteral>() {}; + TypeLiteral> datasourceCollector = new TypeLiteral>() {}; bind(datasourceCollector).toProvider(DataSourceMetricCollectorProvider.class).in(Scopes.SINGLETON); // deadlock - TypeLiteral> deadlockCollector = new TypeLiteral>() {}; + TypeLiteral> deadlockCollector = new TypeLiteral>() {}; bind(deadlockCollector).toProvider(DeadlockMetricCollectorProvider.class).in(Scopes.SINGLETON); // stat - TypeLiteral> statMetric = new TypeLiteral>() {}; + TypeLiteral> statMetric = new TypeLiteral>() {}; bind(statMetric).annotatedWith(Names.named("AgentStatCollector")) .to(AgentStatCollector.class).in(Scopes.SINGLETON); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/SpanDataSenderProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/SpanDataSenderProvider.java index 0501e5ffd075..44cd97328287 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/SpanDataSenderProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/SpanDataSenderProvider.java @@ -25,7 +25,9 @@ import com.navercorp.pinpoint.profiler.context.module.SpanStatClientFactory; import com.navercorp.pinpoint.profiler.context.thrift.MessageConverter; import com.navercorp.pinpoint.profiler.sender.DataSender; +import com.navercorp.pinpoint.profiler.sender.MessageSerializer; import com.navercorp.pinpoint.profiler.sender.TcpDataSender; +import com.navercorp.pinpoint.profiler.sender.ThriftMessageSerializer; import com.navercorp.pinpoint.profiler.sender.UdpDataSenderFactory; import com.navercorp.pinpoint.rpc.client.PinpointClientFactory; import org.apache.thrift.TBase; @@ -77,7 +79,8 @@ public DataSender get() { } PinpointClientFactory pinpointClientFactory = clientFactoryProvider.get(); - return new TcpDataSender("SpanDataSender", ip, port, pinpointClientFactory); + MessageSerializer messageSerializer = new ThriftMessageSerializer(messageConverter); + return new TcpDataSender("SpanDataSender", ip, port, pinpointClientFactory, messageSerializer); } else { UdpDataSenderFactory factory = new UdpDataSenderFactory(ip, port, UDP_EXECUTOR_NAME, writeQueueSize, timeout, sendBufferSize, messageConverter); return factory.create(ioType); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/StatDataSenderProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/StatDataSenderProvider.java index e4a76c56b676..21dc45b146ee 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/StatDataSenderProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/StatDataSenderProvider.java @@ -22,10 +22,13 @@ import com.navercorp.pinpoint.bootstrap.config.ProfilerConfig; import com.navercorp.pinpoint.common.util.Assert; import com.navercorp.pinpoint.profiler.context.module.SpanStatClientFactory; +import com.navercorp.pinpoint.profiler.context.module.StatConverter; import com.navercorp.pinpoint.profiler.context.thrift.BypassMessageConverter; import com.navercorp.pinpoint.profiler.context.thrift.MessageConverter; import com.navercorp.pinpoint.profiler.sender.DataSender; +import com.navercorp.pinpoint.profiler.sender.MessageSerializer; import com.navercorp.pinpoint.profiler.sender.TcpDataSender; +import com.navercorp.pinpoint.profiler.sender.ThriftMessageSerializer; import com.navercorp.pinpoint.profiler.sender.UdpDataSenderFactory; import com.navercorp.pinpoint.rpc.client.PinpointClientFactory; import org.apache.thrift.TBase; @@ -54,7 +57,7 @@ public class StatDataSenderProvider implements Provider { private final MessageConverter> messageConverter; @Inject - public StatDataSenderProvider(ProfilerConfig profilerConfig, @SpanStatClientFactory Provider clientFactoryProvider) { + public StatDataSenderProvider(ProfilerConfig profilerConfig, @SpanStatClientFactory Provider clientFactoryProvider, @StatConverter MessageConverter> messageConverter) { Assert.requireNonNull(profilerConfig, "profilerConfig must not be null"); this.clientFactoryProvider = Assert.requireNonNull(clientFactoryProvider, "clientFactoryProvider must not be null"); @@ -67,8 +70,7 @@ public StatDataSenderProvider(ProfilerConfig profilerConfig, @SpanStatClientFact this.sendBufferSize = thriftTransportConfig.getStatDataSenderSocketSendBufferSize(); this.ioType = thriftTransportConfig.getStatDataSenderSocketType(); this.transportType = thriftTransportConfig.getStatDataSenderTransportType(); - - this.messageConverter = new BypassMessageConverter>(); + this.messageConverter = messageConverter; } @Override @@ -79,7 +81,8 @@ public DataSender get() { } PinpointClientFactory pinpointClientFactory = clientFactoryProvider.get(); - return new TcpDataSender("StatDataSender", ip, port, pinpointClientFactory); + MessageSerializer messageSerializer = new ThriftMessageSerializer(messageConverter); + return new TcpDataSender("StatDataSender", ip, port, pinpointClientFactory, messageSerializer); } else { UdpDataSenderFactory factory = new UdpDataSenderFactory(ip, port, UDP_EXECUTOR_NAME, writeQueueSize, timeout, sendBufferSize, messageConverter); return factory.create(ioType); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/activethread/ActiveTraceMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/activethread/ActiveTraceMetricCollectorProvider.java index 3977cf198c9a..46071747fd7c 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/activethread/ActiveTraceMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/activethread/ActiveTraceMetricCollectorProvider.java @@ -19,16 +19,16 @@ import com.google.inject.Inject; import com.google.inject.Provider; import com.navercorp.pinpoint.common.util.Assert; +import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHistogram; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.UnsupportedMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.activethread.DefaultActiveTraceMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.activethread.ActiveTraceMetric; -import com.navercorp.pinpoint.thrift.dto.TActiveTrace; /** * @author HyunGil Jeong */ -public class ActiveTraceMetricCollectorProvider implements Provider> { +public class ActiveTraceMetricCollectorProvider implements Provider> { private final ActiveTraceMetric activeTraceMetric; @@ -38,9 +38,9 @@ public ActiveTraceMetricCollectorProvider(ActiveTraceMetric activeTraceMetric) { } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { if (activeTraceMetric == ActiveTraceMetric.UNSUPPORTED_ACTIVE_TRACE_METRIC) { - return new UnsupportedMetricCollector(); + return new UnsupportedMetricCollector(); } return new DefaultActiveTraceMetricCollector(activeTraceMetric); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/buffer/BufferMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/buffer/BufferMetricCollectorProvider.java index 8626f8433df8..c0110819f049 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/buffer/BufferMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/buffer/BufferMetricCollectorProvider.java @@ -23,13 +23,12 @@ import com.navercorp.pinpoint.profiler.monitor.collector.UnsupportedMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.buffer.DefaultBufferMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.buffer.BufferMetric; -import com.navercorp.pinpoint.thrift.dto.TDirectBuffer; - +import com.navercorp.pinpoint.profiler.monitor.metric.buffer.BufferMetricSnapshot; /** * @author Roy Kim */ -public class BufferMetricCollectorProvider implements Provider> { +public class BufferMetricCollectorProvider implements Provider> { private final BufferMetric bufferMetric; @@ -39,10 +38,10 @@ public BufferMetricCollectorProvider(BufferMetric bufferMetric) { } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { if (bufferMetric == BufferMetric.UNSUPPORTED_BUFFER_METRIC) { - return new UnsupportedMetricCollector(); + return new UnsupportedMetricCollector(); } return new DefaultBufferMetricCollector(bufferMetric); } -} +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/cpu/CpuLoadMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/cpu/CpuLoadMetricCollectorProvider.java index a4bcfd7bb32e..3efd00557881 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/cpu/CpuLoadMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/cpu/CpuLoadMetricCollectorProvider.java @@ -23,12 +23,12 @@ import com.navercorp.pinpoint.profiler.monitor.collector.UnsupportedMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.cpu.DefaultCpuLoadMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.cpu.CpuLoadMetric; -import com.navercorp.pinpoint.thrift.dto.TCpuLoad; +import com.navercorp.pinpoint.profiler.monitor.metric.cpu.CpuLoadMetricSnapshot; /** * @author HyunGil Jeong */ -public class CpuLoadMetricCollectorProvider implements Provider> { +public class CpuLoadMetricCollectorProvider implements Provider> { private final CpuLoadMetric cpuLoadMetric; @@ -38,9 +38,9 @@ public CpuLoadMetricCollectorProvider(CpuLoadMetric cpuLoadMetric) { } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { if (cpuLoadMetric == CpuLoadMetric.UNSUPPORTED_CPU_LOAD_METRIC) { - return new UnsupportedMetricCollector(); + return new UnsupportedMetricCollector(); } return new DefaultCpuLoadMetricCollector(cpuLoadMetric); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/datasource/DataSourceMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/datasource/DataSourceMetricCollectorProvider.java index 4d32c1f6de6e..0a4972ba6579 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/datasource/DataSourceMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/datasource/DataSourceMetricCollectorProvider.java @@ -23,13 +23,13 @@ import com.navercorp.pinpoint.profiler.monitor.collector.UnsupportedMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.datasource.DefaultDataSourceMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSourceMetric; -import com.navercorp.pinpoint.thrift.dto.TDataSourceList; +import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSourceMetricSnapshot; /** * @author Taejin Koo * @author HyunGil Jeong */ -public class DataSourceMetricCollectorProvider implements Provider> { +public class DataSourceMetricCollectorProvider implements Provider> { private final DataSourceMetric dataSourceMetric; @@ -39,10 +39,10 @@ public DataSourceMetricCollectorProvider(DataSourceMetric dataSourceMetric) { } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { if (dataSourceMetric == DataSourceMetric.UNSUPPORTED_DATA_SOURCE_METRIC) { - return new UnsupportedMetricCollector(); + return new UnsupportedMetricCollector(); } return new DefaultDataSourceMetricCollector(dataSourceMetric); } -} +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/deadlock/DeadlockMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/deadlock/DeadlockMetricCollectorProvider.java index 6b7507ce696a..eff7ea6ab89b 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/deadlock/DeadlockMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/deadlock/DeadlockMetricCollectorProvider.java @@ -23,12 +23,12 @@ import com.navercorp.pinpoint.profiler.monitor.collector.UnsupportedMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.deadlock.DefaultDeadlockMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.DeadlockMetric; -import com.navercorp.pinpoint.thrift.dto.TDeadlock; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.DeadlockMetricSnapshot; /** * @author Taejin Koo */ -public class DeadlockMetricCollectorProvider implements Provider> { +public class DeadlockMetricCollectorProvider implements Provider> { private final DeadlockMetric deadlockMetric; @@ -38,9 +38,9 @@ public DeadlockMetricCollectorProvider(DeadlockMetric deadlockMetric) { } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { if (deadlockMetric == DeadlockMetric.UNSUPPORTED_DEADLOCK_SOURCE_METRIC) { - return new UnsupportedMetricCollector(); + return new UnsupportedMetricCollector(); } return new DefaultDeadlockMetricCollector(deadlockMetric); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/filedescriptor/FileDescriptorMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/filedescriptor/FileDescriptorMetricCollectorProvider.java index 6028e208e712..b3bd0d40b757 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/filedescriptor/FileDescriptorMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/filedescriptor/FileDescriptorMetricCollectorProvider.java @@ -23,12 +23,12 @@ import com.navercorp.pinpoint.profiler.monitor.collector.UnsupportedMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.filedescriptor.DefaultFileDescriptorMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.filedescriptor.FileDescriptorMetric; -import com.navercorp.pinpoint.thrift.dto.TFileDescriptor; +import com.navercorp.pinpoint.profiler.monitor.metric.filedescriptor.FileDescriptorMetricSnapshot; /** * @author Roy Kim */ -public class FileDescriptorMetricCollectorProvider implements Provider> { +public class FileDescriptorMetricCollectorProvider implements Provider> { private final FileDescriptorMetric fileDescriptorMetric; @@ -38,9 +38,9 @@ public FileDescriptorMetricCollectorProvider(FileDescriptorMetric fileDescriptor } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { if (fileDescriptorMetric == FileDescriptorMetric.UNSUPPORTED_FILE_DESCRIPTOR_METRIC) { - return new UnsupportedMetricCollector(); + return new UnsupportedMetricCollector(); } return new DefaultFileDescriptorMetricCollector(fileDescriptorMetric); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/jvmgc/JvmGcMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/jvmgc/JvmGcMetricCollectorProvider.java index a3a3d4639496..7926962bc4d9 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/jvmgc/JvmGcMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/jvmgc/JvmGcMetricCollectorProvider.java @@ -22,17 +22,17 @@ import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.jvmgc.DetailedJvmGcMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.jvmgc.BasicJvmGcMetricCollector; +import com.navercorp.pinpoint.profiler.monitor.metric.JvmGcMetricSnapshot; import com.navercorp.pinpoint.profiler.monitor.metric.gc.DetailedGarbageCollectorMetric; import com.navercorp.pinpoint.profiler.monitor.metric.gc.GarbageCollectorMetric; import com.navercorp.pinpoint.profiler.monitor.metric.memory.DetailedMemoryMetric; import com.navercorp.pinpoint.profiler.monitor.metric.memory.MemoryMetric; -import com.navercorp.pinpoint.thrift.dto.TJvmGc; /** * @author HyunGil Jeong */ -public class JvmGcMetricCollectorProvider implements Provider> { +public class JvmGcMetricCollectorProvider implements Provider> { private final boolean collectDetailedMetrics; private final Provider memoryMetricProivider; @@ -70,7 +70,7 @@ public JvmGcMetricCollectorProvider( } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { MemoryMetric memoryMetric = memoryMetricProivider.get(); GarbageCollectorMetric garbageCollectorMetric = garbageCollectorMetricProvider.get(); BasicJvmGcMetricCollector jvmGcMetricCollector = new BasicJvmGcMetricCollector(memoryMetric, garbageCollectorMetric); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/response/ResponseTimeMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/response/ResponseTimeMetricCollectorProvider.java index a25bbddf7b4a..c7849c8f3604 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/response/ResponseTimeMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/response/ResponseTimeMetricCollectorProvider.java @@ -23,12 +23,12 @@ import com.navercorp.pinpoint.profiler.monitor.collector.UnsupportedMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.response.DefaultResponseTimeMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.response.ResponseTimeMetric; -import com.navercorp.pinpoint.thrift.dto.TResponseTime; +import com.navercorp.pinpoint.profiler.monitor.metric.response.ResponseTimeValue; /** * @author Taejin Koo */ -public class ResponseTimeMetricCollectorProvider implements Provider> { +public class ResponseTimeMetricCollectorProvider implements Provider> { private final ResponseTimeMetric responseTimeMetric; @@ -38,9 +38,9 @@ public ResponseTimeMetricCollectorProvider(ResponseTimeMetric responseTimeMetric } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { if (responseTimeMetric == ResponseTimeMetric.UNSUPPORTED_RESPONSE_TIME_METRIC) { - return new UnsupportedMetricCollector(); + return new UnsupportedMetricCollector(); } return new DefaultResponseTimeMetricCollector(responseTimeMetric); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/transaction/TransactionMetricCollectorProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/transaction/TransactionMetricCollectorProvider.java index c3693dd2fe95..bb627de5bed9 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/transaction/TransactionMetricCollectorProvider.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/provider/stat/transaction/TransactionMetricCollectorProvider.java @@ -23,12 +23,12 @@ import com.navercorp.pinpoint.profiler.monitor.collector.UnsupportedMetricCollector; import com.navercorp.pinpoint.profiler.monitor.collector.transaction.DefaultTransactionMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.transaction.TransactionMetric; -import com.navercorp.pinpoint.thrift.dto.TTransaction; +import com.navercorp.pinpoint.profiler.monitor.metric.transaction.TransactionMetricSnapshot; /** * @author HyunGil Jeong */ -public class TransactionMetricCollectorProvider implements Provider> { +public class TransactionMetricCollectorProvider implements Provider> { private final TransactionMetric transactionMetric; @@ -38,9 +38,9 @@ public TransactionMetricCollectorProvider(TransactionMetric transactionMetric) { } @Override - public AgentStatMetricCollector get() { + public AgentStatMetricCollector get() { if (transactionMetric == TransactionMetric.UNSUPPORTED_TRANSACTION_METRIC) { - return new UnsupportedMetricCollector(); + return new UnsupportedMetricCollector(); } return new DefaultTransactionMetricCollector(transactionMetric); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/StatThriftMessageConverter.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/StatThriftMessageConverter.java new file mode 100644 index 000000000000..7bb40bd171fb --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/StatThriftMessageConverter.java @@ -0,0 +1,281 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.context.thrift; + +import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHistogram; +import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHistogramUtils; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshotBatch; +import com.navercorp.pinpoint.profiler.monitor.metric.JvmGcDetailedMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.JvmGcMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.buffer.BufferMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.cpu.CpuLoadMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSource; +import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSourceMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.DeadlockMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.ThreadDumpMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.filedescriptor.FileDescriptorMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.gc.JvmGcType; +import com.navercorp.pinpoint.profiler.monitor.metric.response.ResponseTimeValue; +import com.navercorp.pinpoint.profiler.monitor.metric.transaction.TransactionMetricSnapshot; +import com.navercorp.pinpoint.thrift.dto.TActiveTrace; +import com.navercorp.pinpoint.thrift.dto.TActiveTraceHistogram; +import com.navercorp.pinpoint.thrift.dto.TAgentStat; +import com.navercorp.pinpoint.thrift.dto.TAgentStatBatch; +import com.navercorp.pinpoint.thrift.dto.TCpuLoad; +import com.navercorp.pinpoint.thrift.dto.TDataSource; +import com.navercorp.pinpoint.thrift.dto.TDataSourceList; +import com.navercorp.pinpoint.thrift.dto.TDeadlock; +import com.navercorp.pinpoint.thrift.dto.TDirectBuffer; +import com.navercorp.pinpoint.thrift.dto.TFileDescriptor; +import com.navercorp.pinpoint.thrift.dto.TJvmGc; +import com.navercorp.pinpoint.thrift.dto.TJvmGcDetailed; +import com.navercorp.pinpoint.thrift.dto.TJvmGcType; +import com.navercorp.pinpoint.thrift.dto.TResponseTime; +import com.navercorp.pinpoint.thrift.dto.TTransaction; +import com.navercorp.pinpoint.thrift.dto.command.TThreadDump; +import org.apache.thrift.TBase; + +import java.util.List; + +/** + * @author jaehong.kim + */ +public class StatThriftMessageConverter implements MessageConverter> { + private final ThreadDumpThriftMessageConverter threadDumpMessageConverter = new ThreadDumpThriftMessageConverter(); + + @Override + public TBase toMessage(Object message) { + if (message instanceof AgentStatMetricSnapshotBatch) { + final AgentStatMetricSnapshotBatch agentStatMetricSnapshotBatch = (AgentStatMetricSnapshotBatch) message; + final TAgentStatBatch agentStatBatch = new TAgentStatBatch(); + agentStatBatch.setAgentId(agentStatMetricSnapshotBatch.getAgentId()); + agentStatBatch.setStartTimestamp(agentStatMetricSnapshotBatch.getStartTimestamp()); + for (AgentStatMetricSnapshot agentStatMetricSnapshot : agentStatMetricSnapshotBatch.getAgentStats()) { + final TAgentStat agentStat = convertAgentStat(agentStatMetricSnapshot); + agentStatBatch.addToAgentStats(agentStat); + } + return agentStatBatch; + } else if (message instanceof AgentStatMetricSnapshot) { + final AgentStatMetricSnapshot agentStatMetricSnapshot = (AgentStatMetricSnapshot) message; + final TAgentStat agentStat = convertAgentStat(agentStatMetricSnapshot); + return agentStat; + } + return null; + } + + private TAgentStat convertAgentStat(final AgentStatMetricSnapshot agentStatMetricSnapshot) { + final TAgentStat agentStat = new TAgentStat(); + agentStat.setTimestamp(agentStatMetricSnapshot.getTimestamp()); + agentStat.setCollectInterval(agentStatMetricSnapshot.getCollectInterval()); + + // Agent information + agentStat.setAgentId(agentStatMetricSnapshot.getAgentId()); + agentStat.setStartTimestamp(agentStatMetricSnapshot.getStartTimestamp()); + + // Metric + final JvmGcMetricSnapshot jvmGcMetricSnapshot = agentStatMetricSnapshot.getGc(); + if (jvmGcMetricSnapshot != null) { + final TJvmGc jvmGc = convertJvmGc(jvmGcMetricSnapshot); + agentStat.setGc(jvmGc); + } + + final CpuLoadMetricSnapshot cpuLoadMetricSnapshot = agentStatMetricSnapshot.getCpuLoad(); + if (cpuLoadMetricSnapshot != null) { + final TCpuLoad cpuLoad = convertCpuLoad(cpuLoadMetricSnapshot); + agentStat.setCpuLoad(cpuLoad); + } + + final TransactionMetricSnapshot transactionMetricSnapshot = agentStatMetricSnapshot.getTransaction(); + if (transactionMetricSnapshot != null) { + final TTransaction transaction = convertTransaction(transactionMetricSnapshot); + agentStat.setTransaction(transaction); + } + + final ActiveTraceHistogram activeTraceHistogram = agentStatMetricSnapshot.getActiveTrace(); + if (activeTraceHistogram != null) { + final TActiveTrace activeTrace = convertActiveTrace(activeTraceHistogram); + agentStat.setActiveTrace(activeTrace); + } + + final DataSourceMetricSnapshot dataSourceMetricSnapshot = agentStatMetricSnapshot.getDataSourceList(); + if (dataSourceMetricSnapshot != null) { + final TDataSourceList dataSourceList = convertDataSourceList(dataSourceMetricSnapshot); + agentStat.setDataSourceList(dataSourceList); + } + + final ResponseTimeValue responseTimeValue = agentStatMetricSnapshot.getResponseTime(); + if(responseTimeValue != null) { + final TResponseTime responseTime = convertResponseTime(responseTimeValue); + agentStat.setResponseTime(responseTime); + } + + final DeadlockMetricSnapshot deadlockMetricSnapshot = agentStatMetricSnapshot.getDeadlock(); + if (deadlockMetricSnapshot != null) { + final TDeadlock deadlock = convertDeadlock(deadlockMetricSnapshot); + agentStat.setDeadlock(deadlock); + } + + final FileDescriptorMetricSnapshot fileDescriptorMetricSnapshot = agentStatMetricSnapshot.getFileDescriptor(); + if(fileDescriptorMetricSnapshot != null) { + final TFileDescriptor fileDescriptor = convertFileDescriptor(fileDescriptorMetricSnapshot); + agentStat.setFileDescriptor(fileDescriptor); + } + + final BufferMetricSnapshot bufferMetricSnapshot = agentStatMetricSnapshot.getDirectBuffer(); + if(bufferMetricSnapshot != null) { + final TDirectBuffer directBuffer = convertDirectBuffer(bufferMetricSnapshot); + agentStat.setDirectBuffer(directBuffer); + } + + return agentStat; + } + + private TJvmGc convertJvmGc(JvmGcMetricSnapshot jvmGcMetricSnapshot) { + final TJvmGc jvmGc = new TJvmGc(); + jvmGc.setJvmMemoryHeapMax(jvmGcMetricSnapshot.getJvmMemoryHeapMax()); + jvmGc.setJvmMemoryHeapUsed(jvmGcMetricSnapshot.getJvmMemoryHeapUsed()); + jvmGc.setJvmMemoryNonHeapMax(jvmGcMetricSnapshot.getJvmMemoryNonHeapMax()); + jvmGc.setJvmMemoryNonHeapUsed(jvmGcMetricSnapshot.getJvmMemoryNonHeapUsed()); + jvmGc.setJvmGcOldCount(jvmGcMetricSnapshot.getJvmGcOldCount()); + jvmGc.setJvmGcOldTime(jvmGcMetricSnapshot.getJvmGcOldTime()); + + final TJvmGcType jvmGcType = convertJvmGcType(jvmGcMetricSnapshot.getType()); + jvmGc.setType(jvmGcType); + + if (jvmGcMetricSnapshot.getJvmGcDetailed() != null) { + final JvmGcDetailedMetricSnapshot jvmGcDetailedMetricSnapshot = jvmGcMetricSnapshot.getJvmGcDetailed(); + final TJvmGcDetailed jvmGcDetailed = new TJvmGcDetailed(); + jvmGcDetailed.setJvmPoolNewGenUsed(jvmGcDetailedMetricSnapshot.getJvmPoolNewGenUsed()); + jvmGcDetailed.setJvmPoolOldGenUsed(jvmGcDetailedMetricSnapshot.getJvmPoolOldGenUsed()); + jvmGcDetailed.setJvmPoolSurvivorSpaceUsed(jvmGcDetailedMetricSnapshot.getJvmPoolSurvivorSpaceUsed()); + jvmGcDetailed.setJvmPoolCodeCacheUsed(jvmGcDetailedMetricSnapshot.getJvmPoolCodeCacheUsed()); + jvmGcDetailed.setJvmPoolPermGenUsed(jvmGcDetailedMetricSnapshot.getJvmPoolPermGenUsed()); + jvmGcDetailed.setJvmPoolMetaspaceUsed(jvmGcDetailedMetricSnapshot.getJvmPoolMetaspaceUsed()); + jvmGcDetailed.setJvmGcNewCount(jvmGcDetailedMetricSnapshot.getJvmGcNewCount()); + jvmGcDetailed.setJvmGcNewTime(jvmGcDetailedMetricSnapshot.getJvmGcNewTime()); + jvmGc.setJvmGcDetailed(jvmGcDetailed); + } + return jvmGc; + } + + private TJvmGcType convertJvmGcType(final JvmGcType jvmGcType) { + switch (jvmGcType) { + case UNKNOWN: + return TJvmGcType.UNKNOWN; + case SERIAL: + return TJvmGcType.SERIAL; + case PARALLEL: + return TJvmGcType.PARALLEL; + case CMS: + return TJvmGcType.CMS; + case G1: + return TJvmGcType.G1; + default: + return TJvmGcType.UNKNOWN; + } + } + + private TCpuLoad convertCpuLoad(CpuLoadMetricSnapshot cpuLoadMetricSnapshot) { + final TCpuLoad cpuLoad = new TCpuLoad(); + cpuLoad.setJvmCpuLoad(cpuLoadMetricSnapshot.getJvmCpuUsage()); + cpuLoad.setSystemCpuLoad(cpuLoadMetricSnapshot.getSystemCpuUsage()); + return cpuLoad; + } + + private TTransaction convertTransaction(TransactionMetricSnapshot transactionMetricSnapshot) { + final TTransaction transaction = new TTransaction(); + transaction.setSampledNewCount(transactionMetricSnapshot.getSampledNewCount()); + transaction.setSampledContinuationCount(transactionMetricSnapshot.getSampledContinuationCount()); + transaction.setUnsampledNewCount(transactionMetricSnapshot.getUnsampledNewCount()); + transaction.setUnsampledContinuationCount(transactionMetricSnapshot.getUnsampledContinuationCount()); + return transaction; + } + + private TActiveTrace convertActiveTrace(ActiveTraceHistogram activeTraceHistogramMetricSnapshot) { + final TActiveTrace activeTrace = new TActiveTrace(); + final TActiveTraceHistogram activeTraceHistogram = new TActiveTraceHistogram(); + if(activeTraceHistogramMetricSnapshot.getHistogramSchema() != null) { + activeTraceHistogram.setHistogramSchemaType(activeTraceHistogramMetricSnapshot.getHistogramSchema().getTypeCode()); + } + final List activeTraceCounts = ActiveTraceHistogramUtils.asList(activeTraceHistogramMetricSnapshot); + activeTraceHistogram.setActiveTraceCount(activeTraceCounts); + activeTrace.setHistogram(activeTraceHistogram); + return activeTrace; + } + + private TDataSourceList convertDataSourceList(DataSourceMetricSnapshot dataSourceMetricSnapshot) { + final TDataSourceList dataSourceList = new TDataSourceList(); + for (DataSource dataSourceCollectData : dataSourceMetricSnapshot.getDataSourceList()) { + final TDataSource dataSource = new TDataSource(dataSourceCollectData.getId()); + dataSource.setServiceTypeCode(dataSourceCollectData.getServiceTypeCode()); + if (dataSourceCollectData.getDatabaseName() != null) { + dataSource.setDatabaseName(dataSourceCollectData.getDatabaseName()); + } + if (dataSourceCollectData.getActiveConnectionSize() != 0) { + dataSource.setActiveConnectionSize(dataSourceCollectData.getActiveConnectionSize()); + } + if (dataSourceCollectData.getUrl() != null) { + dataSource.setUrl(dataSourceCollectData.getUrl()); + } + dataSource.setMaxConnectionSize(dataSourceCollectData.getMaxConnectionSize()); + dataSourceList.addToDataSourceList(dataSource); + } + return dataSourceList; + } + + private TResponseTime convertResponseTime(ResponseTimeValue responseTimeValue) { + final TResponseTime responseTime = new TResponseTime(); + if (responseTimeValue.getAvg() != 0) { + responseTime.setAvg(responseTimeValue.getAvg()); + } + if (responseTimeValue.getMax() != 0) { + responseTime.setMax(responseTimeValue.getMax()); + } + return responseTime; + } + + + private TDeadlock convertDeadlock(DeadlockMetricSnapshot deadlockMetricSnapshot) { + // Only send id values that have already been sent + final TDeadlock deadlock = new TDeadlock(); + deadlock.setDeadlockedThreadCount(deadlockMetricSnapshot.getDeadlockedThreadCount()); + + for (ThreadDumpMetricSnapshot threadDumpMetricSnapshot : deadlockMetricSnapshot.getDeadlockedThreadList()) { + final TThreadDump threadDump = this.threadDumpMessageConverter.toMessage(threadDumpMetricSnapshot); + if (threadDump != null) { + deadlock.addToDeadlockedThreadList(threadDump); + } + } + return deadlock; + } + + private TFileDescriptor convertFileDescriptor(FileDescriptorMetricSnapshot fileDescriptorMetricSnapshot) { + final TFileDescriptor fileDescriptor = new TFileDescriptor(); + fileDescriptor.setOpenFileDescriptorCount(fileDescriptorMetricSnapshot.getOpenFileDescriptorCount()); + return fileDescriptor; + } + + private TDirectBuffer convertDirectBuffer(BufferMetricSnapshot bufferMetricSnapshot) { + final TDirectBuffer tdirectBuffer = new TDirectBuffer(); + tdirectBuffer.setDirectCount(bufferMetricSnapshot.getDirectCount()); + tdirectBuffer.setDirectMemoryUsed(bufferMetricSnapshot.getDirectMemoryUsed()); + tdirectBuffer.setMappedCount(bufferMetricSnapshot.getMappedCount()); + tdirectBuffer.setMappedMemoryUsed(bufferMetricSnapshot.getMappedMemoryUsed()); + return tdirectBuffer; + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/StatThriftMessageConverterProvider.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/StatThriftMessageConverterProvider.java new file mode 100644 index 000000000000..72b355d78bc0 --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/StatThriftMessageConverterProvider.java @@ -0,0 +1,36 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.context.thrift; + +import com.google.inject.Inject; +import com.google.inject.Provider; +import org.apache.thrift.TBase; + +/** + * @author jaehong.kim + */ +public class StatThriftMessageConverterProvider implements Provider>> { + + @Inject + public StatThriftMessageConverterProvider() { + } + + @Override + public MessageConverter> get() { + return new StatThriftMessageConverter(); + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/ThreadDumpThriftMessageConverter.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/ThreadDumpThriftMessageConverter.java new file mode 100644 index 000000000000..c8c2930043ee --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/ThreadDumpThriftMessageConverter.java @@ -0,0 +1,71 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.context.thrift; + +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.MonitorInfoMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.ThreadDumpMetricSnapshot; +import com.navercorp.pinpoint.thrift.dto.command.TMonitorInfo; +import com.navercorp.pinpoint.thrift.dto.command.TThreadDump; +import com.navercorp.pinpoint.thrift.dto.command.TThreadState; + +/** + * @author jaehong.kim + */ +public class ThreadDumpThriftMessageConverter implements MessageConverter { + private final ThreadStateThriftMessageConverter threadStateMessageConverter = new ThreadStateThriftMessageConverter(); + + @Override + public TThreadDump toMessage(Object message) { + if (message instanceof ThreadDumpMetricSnapshot) { + final ThreadDumpMetricSnapshot threadDumpMetricSnapshot = (ThreadDumpMetricSnapshot) message; + final TThreadDump threadDump = new TThreadDump(); + + threadDump.setThreadName(threadDumpMetricSnapshot.getThreadName()); + threadDump.setThreadId(threadDumpMetricSnapshot.getThreadId()); + threadDump.setBlockedTime(threadDumpMetricSnapshot.getBlockedTime()); + threadDump.setBlockedCount(threadDumpMetricSnapshot.getBlockedCount()); + threadDump.setWaitedTime(threadDumpMetricSnapshot.getWaitedTime()); + threadDump.setWaitedCount(threadDumpMetricSnapshot.getWaitedCount()); + + threadDump.setInNative(threadDumpMetricSnapshot.isInNative()); + threadDump.setSuspended(threadDumpMetricSnapshot.isSuspended()); + final TThreadState threadState = this.threadStateMessageConverter.toMessage(threadDumpMetricSnapshot.getThreadState()); + threadDump.setThreadState(threadState); + + for (String stackTrace : threadDumpMetricSnapshot.getStackTrace()) { + threadDump.addToStackTrace(stackTrace); + } + + for (MonitorInfoMetricSnapshot monitorInfoMetricSnapshot : threadDumpMetricSnapshot.getLockedMonitors()) { + final TMonitorInfo tMonitorInfo = new TMonitorInfo(); + tMonitorInfo.setStackDepth(monitorInfoMetricSnapshot.getStackDepth()); + tMonitorInfo.setStackFrame(monitorInfoMetricSnapshot.getStackFrame()); + threadDump.addToLockedMonitors(tMonitorInfo); + } + + threadDump.setLockName(threadDumpMetricSnapshot.getLockName()); + threadDump.setLockOwnerId(threadDumpMetricSnapshot.getLockOwnerId()); + threadDump.setLockOwnerName(threadDumpMetricSnapshot.getLockOwnerName()); + for (String lockedSynchronizer : threadDumpMetricSnapshot.getLockedSynchronizers()) { + threadDump.addToLockedSynchronizers(lockedSynchronizer); + } + return threadDump; + } else { + return null; + } + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/ThreadStateThriftMessageConverter.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/ThreadStateThriftMessageConverter.java new file mode 100644 index 000000000000..60fd88717e5d --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/context/thrift/ThreadStateThriftMessageConverter.java @@ -0,0 +1,52 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.context.thrift; + +import com.navercorp.pinpoint.thrift.dto.command.TThreadState; + +/** + * @author jaehong.kim + */ +public class ThreadStateThriftMessageConverter implements MessageConverter { + @Override + public TThreadState toMessage(Object message) { + if (message instanceof Thread.State) { + final Thread.State threadState = (Thread.State) message; + return convertThreadState(threadState); + } else { + throw new IllegalArgumentException("invalid message type. message=" + message); + } + } + + private TThreadState convertThreadState(Thread.State threadState) { + switch (threadState) { + case NEW: + return TThreadState.NEW; + case RUNNABLE: + return TThreadState.RUNNABLE; + case BLOCKED: + return TThreadState.BLOCKED; + case WAITING: + return TThreadState.WAITING; + case TIMED_WAITING: + return TThreadState.TIMED_WAITING; + case TERMINATED: + return TThreadState.TERMINATED; + } + return TThreadState.UNKNOWN; + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/CollectJob.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/CollectJob.java index b676863319c6..d47729bcffdb 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/CollectJob.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/CollectJob.java @@ -17,9 +17,9 @@ package com.navercorp.pinpoint.profiler.monitor; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshotBatch; import com.navercorp.pinpoint.profiler.sender.DataSender; -import com.navercorp.pinpoint.thrift.dto.TAgentStat; -import com.navercorp.pinpoint.thrift.dto.TAgentStatBatch; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -36,17 +36,17 @@ public class CollectJob implements Runnable { private final DataSender dataSender; private final String agentId; private final long agentStartTimestamp; - private final AgentStatMetricCollector agentStatCollector; + private final AgentStatMetricCollector agentStatCollector; private final int numCollectionsPerBatch; // Not thread safe. For use with single thread ONLY private int collectCount = 0; private long prevCollectionTimestamp = System.currentTimeMillis(); - private List agentStats; + private List agentStats; public CollectJob(DataSender dataSender, String agentId, long agentStartTimestamp, - AgentStatMetricCollector agentStatCollector, + AgentStatMetricCollector agentStatCollector, int numCollectionsPerBatch) { if (dataSender == null) { throw new NullPointerException("dataSender must not be null"); @@ -56,7 +56,7 @@ public CollectJob(DataSender dataSender, this.agentStartTimestamp = agentStartTimestamp; this.agentStatCollector = agentStatCollector; this.numCollectionsPerBatch = numCollectionsPerBatch; - this.agentStats = new ArrayList(numCollectionsPerBatch); + this.agentStats = new ArrayList(numCollectionsPerBatch); } @Override @@ -64,7 +64,7 @@ public void run() { final long currentCollectionTimestamp = System.currentTimeMillis(); final long collectInterval = currentCollectionTimestamp - this.prevCollectionTimestamp; try { - final TAgentStat agentStat = agentStatCollector.collect(); + final AgentStatMetricSnapshot agentStat = agentStatCollector.collect(); agentStat.setTimestamp(currentCollectionTimestamp); agentStat.setCollectInterval(collectInterval); this.agentStats.add(agentStat); @@ -83,15 +83,15 @@ private void sendAgentStats() { // prepare TAgentStat object. // TODO multi thread issue. // If we reuse TAgentStat, there could be concurrency issue because data sender runs in a different thread. - final TAgentStatBatch agentStatBatch = new TAgentStatBatch(); + final AgentStatMetricSnapshotBatch agentStatBatch = new AgentStatMetricSnapshotBatch(); agentStatBatch.setAgentId(agentId); agentStatBatch.setStartTimestamp(agentStartTimestamp); agentStatBatch.setAgentStats(this.agentStats); // If we reuse agentStats list, there could be concurrency issue because data sender runs in a different // thread. // So create new list. - this.agentStats = new ArrayList(numCollectionsPerBatch); + this.agentStats = new ArrayList(numCollectionsPerBatch); logger.trace("collect agentStat:{}", agentStatBatch); dataSender.send(agentStatBatch); } -} +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/DefaultAgentStatMonitor.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/DefaultAgentStatMonitor.java index 0b266fa39064..06dc96c55fd5 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/DefaultAgentStatMonitor.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/DefaultAgentStatMonitor.java @@ -25,6 +25,7 @@ import com.navercorp.pinpoint.profiler.context.module.AgentStartTime; import com.navercorp.pinpoint.profiler.context.module.StatDataSender; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshot; import com.navercorp.pinpoint.profiler.sender.DataSender; import com.navercorp.pinpoint.profiler.sender.EmptyDataSender; import com.navercorp.pinpoint.thrift.dto.TAgentStat; @@ -58,14 +59,14 @@ public class DefaultAgentStatMonitor implements AgentStatMonitor { @Inject public DefaultAgentStatMonitor(@StatDataSender DataSender dataSender, @AgentId String agentId, @AgentStartTime long agentStartTimestamp, - @Named("AgentStatCollector") AgentStatMetricCollector agentStatCollector, + @Named("AgentStatCollector") AgentStatMetricCollector agentStatCollector, ProfilerConfig profilerConfig) { this(dataSender, agentId, agentStartTimestamp, agentStatCollector, profilerConfig.getProfileJvmStatCollectIntervalMs(), profilerConfig.getProfileJvmStatBatchSendCount()); } public DefaultAgentStatMonitor(DataSender dataSender, String agentId, long agentStartTimestamp, - AgentStatMetricCollector agentStatCollector, + AgentStatMetricCollector agentStatCollector, long collectionIntervalMs, int numCollectionsPerBatch) { if (dataSender == null) { throw new NullPointerException("dataSender must not be null"); @@ -96,7 +97,7 @@ public DefaultAgentStatMonitor(DataSender dataSender, // prevent deadlock for JDK6 // Single thread execution is more safe than multi thread execution. // eg) executor.scheduleAtFixedRate(collectJob, 0(initialDelay is zero), this.collectionIntervalMs, TimeUnit.MILLISECONDS); - private void preLoadClass(String agentId, long agentStartTimestamp, AgentStatMetricCollector agentStatCollector) { + private void preLoadClass(String agentId, long agentStartTimestamp, AgentStatMetricCollector agentStatCollector) { logger.debug("pre-load class start"); CollectJob collectJob = new CollectJob(EmptyDataSender.INSTANCE, agentId, agentStartTimestamp, agentStatCollector, 1); diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/AgentStatCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/AgentStatCollector.java index a9d233216915..2f8b98095876 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/AgentStatCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/AgentStatCollector.java @@ -18,49 +18,49 @@ import com.google.inject.Inject; import com.navercorp.pinpoint.common.util.Assert; +import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHistogram; import com.navercorp.pinpoint.profiler.context.module.AgentId; import com.navercorp.pinpoint.profiler.context.module.AgentStartTime; -import com.navercorp.pinpoint.thrift.dto.TActiveTrace; -import com.navercorp.pinpoint.thrift.dto.TAgentStat; -import com.navercorp.pinpoint.thrift.dto.TCpuLoad; -import com.navercorp.pinpoint.thrift.dto.TDataSourceList; -import com.navercorp.pinpoint.thrift.dto.TDeadlock; -import com.navercorp.pinpoint.thrift.dto.TDirectBuffer; -import com.navercorp.pinpoint.thrift.dto.TFileDescriptor; -import com.navercorp.pinpoint.thrift.dto.TJvmGc; -import com.navercorp.pinpoint.thrift.dto.TResponseTime; -import com.navercorp.pinpoint.thrift.dto.TTransaction; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.JvmGcMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.buffer.BufferMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.cpu.CpuLoadMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSourceMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.DeadlockMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.filedescriptor.FileDescriptorMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.response.ResponseTimeValue; +import com.navercorp.pinpoint.profiler.monitor.metric.transaction.TransactionMetricSnapshot; /** * @author HyunGil Jeong */ -public class AgentStatCollector implements AgentStatMetricCollector { +public class AgentStatCollector implements AgentStatMetricCollector { private final String agentId; private final long agentStartTimestamp; - private final AgentStatMetricCollector jvmGcMetricCollector; - private final AgentStatMetricCollector cpuLoadMetricCollector; - private final AgentStatMetricCollector transactionMetricCollector; - private final AgentStatMetricCollector activeTraceMetricCollector; - private final AgentStatMetricCollector dataSourceMetricCollector; - private final AgentStatMetricCollector responseTimeMetricCollector; - private final AgentStatMetricCollector deadlockMetricCollector; - private final AgentStatMetricCollector fileDescriptorMetricCollector; - private final AgentStatMetricCollector bufferMetricCollector; + private final AgentStatMetricCollector jvmGcMetricCollector; + private final AgentStatMetricCollector cpuLoadMetricCollector; + private final AgentStatMetricCollector transactionMetricCollector; + private final AgentStatMetricCollector activeTraceMetricCollector; + private final AgentStatMetricCollector dataSourceMetricCollector; + private final AgentStatMetricCollector responseTimeMetricCollector; + private final AgentStatMetricCollector deadlockMetricCollector; + private final AgentStatMetricCollector fileDescriptorMetricCollector; + private final AgentStatMetricCollector bufferMetricCollector; @Inject public AgentStatCollector( @AgentId String agentId, @AgentStartTime long agentStartTimestamp, - AgentStatMetricCollector jvmGcMetricCollector, - AgentStatMetricCollector cpuLoadMetricCollector, - AgentStatMetricCollector transactionMetricCollector, - AgentStatMetricCollector activeTraceMetricCollector, - AgentStatMetricCollector dataSourceMetricCollector, - AgentStatMetricCollector responseTimeMetricCollector, - AgentStatMetricCollector deadlockMetricCollector, - AgentStatMetricCollector fileDescriptorMetricCollector, - AgentStatMetricCollector bufferMetricCollector) { + AgentStatMetricCollector jvmGcMetricCollector, + AgentStatMetricCollector cpuLoadMetricCollector, + AgentStatMetricCollector transactionMetricCollector, + AgentStatMetricCollector activeTraceMetricCollector, + AgentStatMetricCollector dataSourceMetricCollector, + AgentStatMetricCollector responseTimeMetricCollector, + AgentStatMetricCollector deadlockMetricCollector, + AgentStatMetricCollector fileDescriptorMetricCollector, + AgentStatMetricCollector bufferMetricCollector) { this.agentId = Assert.requireNonNull(agentId, "agentId must not be null"); this.agentStartTimestamp = agentStartTimestamp; this.jvmGcMetricCollector = Assert.requireNonNull(jvmGcMetricCollector, "jvmGcMetricCollector must not be null"); @@ -75,8 +75,8 @@ public AgentStatCollector( } @Override - public TAgentStat collect() { - TAgentStat agentStat = new TAgentStat(); + public AgentStatMetricSnapshot collect() { + AgentStatMetricSnapshot agentStat = new AgentStatMetricSnapshot(); agentStat.setAgentId(agentId); agentStat.setStartTimestamp(agentStartTimestamp); agentStat.setGc(jvmGcMetricCollector.collect()); @@ -109,5 +109,4 @@ public String toString() { sb.append('}'); return sb.toString(); } - -} +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/activethread/DefaultActiveTraceMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/activethread/DefaultActiveTraceMetricCollector.java index 57ea128880f4..b3e184c1a06b 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/activethread/DefaultActiveTraceMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/activethread/DefaultActiveTraceMetricCollector.java @@ -17,18 +17,13 @@ package com.navercorp.pinpoint.profiler.monitor.collector.activethread; import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHistogram; -import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHistogramUtils; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.activethread.ActiveTraceMetric; -import com.navercorp.pinpoint.thrift.dto.TActiveTrace; -import com.navercorp.pinpoint.thrift.dto.TActiveTraceHistogram; - -import java.util.List; /** * @author HyunGil Jeong */ -public class DefaultActiveTraceMetricCollector implements AgentStatMetricCollector { +public class DefaultActiveTraceMetricCollector implements AgentStatMetricCollector { private final ActiveTraceMetric activeTraceMetric; @@ -40,20 +35,8 @@ public DefaultActiveTraceMetricCollector(ActiveTraceMetric activeTraceMetric) { } @Override - public TActiveTrace collect() { + public ActiveTraceHistogram collect() { final ActiveTraceHistogram histogram = activeTraceMetric.activeTraceHistogram(); - - final int histogramSchemaTypeCode = histogram.getHistogramSchema().getTypeCode(); - - TActiveTraceHistogram tActiveTraceHistogram = new TActiveTraceHistogram(); - tActiveTraceHistogram.setHistogramSchemaType(histogramSchemaTypeCode); - - final List activeTraceCounts = ActiveTraceHistogramUtils.asList(histogram); - tActiveTraceHistogram.setActiveTraceCount(activeTraceCounts); - - - TActiveTrace activeTrace = new TActiveTrace(); - activeTrace.setHistogram(tActiveTraceHistogram); - return activeTrace; + return histogram; } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/buffer/DefaultBufferMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/buffer/DefaultBufferMetricCollector.java index 34e28c64ceac..18aff0b6fe91 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/buffer/DefaultBufferMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/buffer/DefaultBufferMetricCollector.java @@ -20,12 +20,11 @@ import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.buffer.BufferMetric; import com.navercorp.pinpoint.profiler.monitor.metric.buffer.BufferMetricSnapshot; -import com.navercorp.pinpoint.thrift.dto.TDirectBuffer; /** * @author Roy Kim */ -public class DefaultBufferMetricCollector implements AgentStatMetricCollector { +public class DefaultBufferMetricCollector implements AgentStatMetricCollector { private final BufferMetric bufferMetric; @@ -37,15 +36,9 @@ public DefaultBufferMetricCollector(BufferMetric bufferMetric) { } @Override - public TDirectBuffer collect() { + public BufferMetricSnapshot collect() { final BufferMetricSnapshot snapshot = bufferMetric.getSnapshot(); - - TDirectBuffer tdirectBuffer = new TDirectBuffer(); - tdirectBuffer.setDirectCount(snapshot.getDirectCount()); - tdirectBuffer.setDirectMemoryUsed(snapshot.getDirectMemoryUsed()); - tdirectBuffer.setMappedCount(snapshot.getMappedCount()); - tdirectBuffer.setMappedMemoryUsed(snapshot.getMappedMemoryUsed()); - return tdirectBuffer; + return snapshot; } @Override @@ -55,4 +48,4 @@ public String toString() { sb.append('}'); return sb.toString(); } -} +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/cpu/DefaultCpuLoadMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/cpu/DefaultCpuLoadMetricCollector.java index 76f0dee1ca00..d007fcedf52b 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/cpu/DefaultCpuLoadMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/cpu/DefaultCpuLoadMetricCollector.java @@ -24,7 +24,7 @@ /** * @author HyunGil Jeong */ -public class DefaultCpuLoadMetricCollector implements AgentStatMetricCollector { +public class DefaultCpuLoadMetricCollector implements AgentStatMetricCollector { private final CpuLoadMetric cpuLoadMetric; @@ -36,13 +36,9 @@ public DefaultCpuLoadMetricCollector(CpuLoadMetric cpuLoadMetric) { } @Override - public TCpuLoad collect() { + public CpuLoadMetricSnapshot collect() { final CpuLoadMetricSnapshot snapshot = cpuLoadMetric.getSnapshot(); - - final TCpuLoad cpuLoad = new TCpuLoad(); - cpuLoad.setJvmCpuLoad(snapshot.getJvmCpuUsage()); - cpuLoad.setSystemCpuLoad(snapshot.getSystemCpuUsage()); - return cpuLoad; + return snapshot; } @Override diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/datasource/DefaultDataSourceMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/datasource/DefaultDataSourceMetricCollector.java index ffc3df9e2bd8..4beff0d0c07c 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/datasource/DefaultDataSourceMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/datasource/DefaultDataSourceMetricCollector.java @@ -20,15 +20,14 @@ import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSource; import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSourceMetric; -import com.navercorp.pinpoint.thrift.dto.TDataSource; -import com.navercorp.pinpoint.thrift.dto.TDataSourceList; +import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSourceMetricSnapshot; import java.util.List; /** * @author HyunGil Jeong */ -public class DefaultDataSourceMetricCollector implements AgentStatMetricCollector { +public class DefaultDataSourceMetricCollector implements AgentStatMetricCollector { private final DataSourceMetric dataSourceMetric; @@ -40,41 +39,18 @@ public DefaultDataSourceMetricCollector(DataSourceMetric dataSourceMetric) { } @Override - public TDataSourceList collect() { + public DataSourceMetricSnapshot collect() { final List dataSources = dataSourceMetric.dataSourceList(); if (CollectionUtils.isEmpty(dataSources)) { - return new TDataSourceList(); + return new DataSourceMetricSnapshot(); } - - TDataSourceList tDataSourceList = new TDataSourceList(); + final DataSourceMetricSnapshot dataSourceMetricSnapshot = new DataSourceMetricSnapshot(); for (DataSource dataSource : dataSources) { - TDataSource tDataSource = toTDataSource(dataSource); - tDataSourceList.addToDataSourceList(tDataSource); - } - - return tDataSourceList; - } - - private TDataSource toTDataSource(DataSource dataSource) { - TDataSource tDataSource = new TDataSource(dataSource.getId()); - - tDataSource.setServiceTypeCode(dataSource.getServiceTypeCode()); - - if (dataSource.getDatabaseName() != null) { - tDataSource.setDatabaseName(dataSource.getDatabaseName()); - } - - if (dataSource.getActiveConnectionSize() != 0) { - tDataSource.setActiveConnectionSize(dataSource.getActiveConnectionSize()); - } - - if (dataSource.getUrl() != null) { - tDataSource.setUrl(dataSource.getUrl()); + dataSourceMetricSnapshot.addDataSourceCollectData(dataSource); } - tDataSource.setMaxConnectionSize(dataSource.getMaxConnectionSize()); - return tDataSource; + return dataSourceMetricSnapshot; } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/deadlock/DefaultDeadlockMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/deadlock/DefaultDeadlockMetricCollector.java index 07c9b507dc84..99bcb333a0b1 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/deadlock/DefaultDeadlockMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/deadlock/DefaultDeadlockMetricCollector.java @@ -19,6 +19,8 @@ import com.navercorp.pinpoint.common.util.CollectionUtils; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.DeadlockMetric; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.DeadlockMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.ThreadDumpMetricSnapshot; import com.navercorp.pinpoint.profiler.util.ThreadDumpUtils; import com.navercorp.pinpoint.thrift.dto.TDeadlock; import com.navercorp.pinpoint.thrift.dto.command.TThreadDump; @@ -29,7 +31,7 @@ /** * @author Taejin Koo */ -public class DefaultDeadlockMetricCollector implements AgentStatMetricCollector { +public class DefaultDeadlockMetricCollector implements AgentStatMetricCollector { private Set prevDeadlockedThreadIdSet = new HashSet(); @@ -43,7 +45,7 @@ public DefaultDeadlockMetricCollector(DeadlockMetric deadlockMetric) { } @Override - public TDeadlock collect() { + public DeadlockMetricSnapshot collect() { Set deadlockedThreadIdSet = deadlockMetric.deadlockedThreadsIdSet(); if (CollectionUtils.isEmpty(deadlockedThreadIdSet)) { return null; @@ -51,20 +53,20 @@ public TDeadlock collect() { // Only send id values that have already been sent if (prevDeadlockedThreadIdSet.containsAll(deadlockedThreadIdSet)) { - TDeadlock deadlock = new TDeadlock(); + DeadlockMetricSnapshot deadlock = new DeadlockMetricSnapshot(); deadlock.setDeadlockedThreadCount(deadlockedThreadIdSet.size()); return deadlock; } // The first event sends id and threadinfo - TDeadlock deadlock = new TDeadlock(); - deadlock.setDeadlockedThreadCount(deadlockedThreadIdSet.size()); + final DeadlockMetricSnapshot deadlockMetricSnapshot = new DeadlockMetricSnapshot(); + deadlockMetricSnapshot.setDeadlockedThreadCount(deadlockedThreadIdSet.size()); for (Long deadlockedThreadId : deadlockedThreadIdSet) { - TThreadDump tThreadDump = ThreadDumpUtils.createTThreadDump(deadlockedThreadId); - deadlock.addToDeadlockedThreadList(tThreadDump); + final ThreadDumpMetricSnapshot tThreadDump = ThreadDumpUtils.createTThreadDump(deadlockedThreadId); + deadlockMetricSnapshot.addDeadlockedThread(tThreadDump); prevDeadlockedThreadIdSet = deadlockedThreadIdSet; } - return deadlock; + return deadlockMetricSnapshot; } @Override @@ -75,5 +77,4 @@ public String toString() { sb.append('}'); return sb.toString(); } - -} +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/filedescriptor/DefaultFileDescriptorMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/filedescriptor/DefaultFileDescriptorMetricCollector.java index ea9a60a4a032..f16bac16bede 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/filedescriptor/DefaultFileDescriptorMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/filedescriptor/DefaultFileDescriptorMetricCollector.java @@ -20,12 +20,11 @@ import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.filedescriptor.FileDescriptorMetric; import com.navercorp.pinpoint.profiler.monitor.metric.filedescriptor.FileDescriptorMetricSnapshot; -import com.navercorp.pinpoint.thrift.dto.TFileDescriptor; /** * @author Roy Kim */ -public class DefaultFileDescriptorMetricCollector implements AgentStatMetricCollector { +public class DefaultFileDescriptorMetricCollector implements AgentStatMetricCollector { private final FileDescriptorMetric fileDescriptorMetric; @@ -37,12 +36,9 @@ public DefaultFileDescriptorMetricCollector(FileDescriptorMetric fileDescriptorM } @Override - public TFileDescriptor collect() { - FileDescriptorMetricSnapshot snapshot = fileDescriptorMetric.getSnapshot(); - - TFileDescriptor tfileDescriptor = new TFileDescriptor(); - tfileDescriptor.setOpenFileDescriptorCount(snapshot.getOpenFileDescriptorCount()); - return tfileDescriptor; + public FileDescriptorMetricSnapshot collect() { + final FileDescriptorMetricSnapshot snapshot = fileDescriptorMetric.getSnapshot(); + return snapshot; } @Override diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/jvmgc/BasicJvmGcMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/jvmgc/BasicJvmGcMetricCollector.java index 290edfcb52be..43012afa7b0e 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/jvmgc/BasicJvmGcMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/jvmgc/BasicJvmGcMetricCollector.java @@ -17,6 +17,7 @@ package com.navercorp.pinpoint.profiler.monitor.collector.jvmgc; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; +import com.navercorp.pinpoint.profiler.monitor.metric.JvmGcMetricSnapshot; import com.navercorp.pinpoint.profiler.monitor.metric.gc.GarbageCollectorMetric; import com.navercorp.pinpoint.profiler.monitor.metric.gc.GarbageCollectorMetricSnapshot; import com.navercorp.pinpoint.profiler.monitor.metric.gc.JvmGcType; @@ -28,7 +29,7 @@ /** * @author HyunGil Jeong */ -public class BasicJvmGcMetricCollector implements AgentStatMetricCollector { +public class BasicJvmGcMetricCollector implements AgentStatMetricCollector { private final MemoryMetric memoryMetric; private final GarbageCollectorMetric garbageCollectorMetric; @@ -45,27 +46,22 @@ public BasicJvmGcMetricCollector(MemoryMetric memoryMetric, GarbageCollectorMetr } @Override - public TJvmGc collect() { + public JvmGcMetricSnapshot collect() { + final JvmGcType jvmGcType = garbageCollectorMetric.getGcType(); + final MemoryMetricSnapshot memoryMetricSnapshot = memoryMetric.getSnapshot(); + final GarbageCollectorMetricSnapshot garbageCollectorMetricSnapshot = garbageCollectorMetric.getSnapshot(); - JvmGcType jvmGcType = garbageCollectorMetric.getGcType(); - TJvmGcType tJvmGcType = TJvmGcTypeUtils.toTJvmGcType(jvmGcType.getValue()); - - MemoryMetricSnapshot memoryMetricSnapshot = memoryMetric.getSnapshot(); - GarbageCollectorMetricSnapshot garbageCollectorMetricSnapshot = garbageCollectorMetric.getSnapshot(); - - TJvmGc jvmGc = new TJvmGc(); - jvmGc.setJvmMemoryHeapMax(memoryMetricSnapshot.getHeapMax()); - jvmGc.setJvmMemoryHeapUsed(memoryMetricSnapshot.getHeapUsed()); - jvmGc.setJvmMemoryNonHeapMax(memoryMetricSnapshot.getNonHeapMax()); - jvmGc.setJvmMemoryNonHeapUsed(memoryMetricSnapshot.getNonHeapUsed()); - jvmGc.setJvmGcOldCount(garbageCollectorMetricSnapshot.getGcOldCount()); - jvmGc.setJvmGcOldTime(garbageCollectorMetricSnapshot.getGcOldTime()); - jvmGc.setType(tJvmGcType); - return jvmGc; + final JvmGcMetricSnapshot jvmGcMetricSnapshot = new JvmGcMetricSnapshot(); + jvmGcMetricSnapshot.setJvmMemoryHeapMax(memoryMetricSnapshot.getHeapMax()); + jvmGcMetricSnapshot.setJvmMemoryHeapUsed(memoryMetricSnapshot.getHeapUsed()); + jvmGcMetricSnapshot.setJvmMemoryNonHeapMax(memoryMetricSnapshot.getNonHeapMax()); + jvmGcMetricSnapshot.setJvmMemoryNonHeapUsed(memoryMetricSnapshot.getNonHeapUsed()); + jvmGcMetricSnapshot.setJvmGcOldCount(garbageCollectorMetricSnapshot.getGcOldCount()); + jvmGcMetricSnapshot.setJvmGcOldTime(garbageCollectorMetricSnapshot.getGcOldTime()); + jvmGcMetricSnapshot.setType(jvmGcType); + return jvmGcMetricSnapshot; } - - @Override public String toString() { final StringBuilder sb = new StringBuilder("BasicJvmGcMetricCollector{"); @@ -74,4 +70,4 @@ public String toString() { sb.append('}'); return sb.toString(); } -} +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/jvmgc/DetailedJvmGcMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/jvmgc/DetailedJvmGcMetricCollector.java index fcaf4718fffd..f647039804b4 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/jvmgc/DetailedJvmGcMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/jvmgc/DetailedJvmGcMetricCollector.java @@ -17,6 +17,8 @@ package com.navercorp.pinpoint.profiler.monitor.collector.jvmgc; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; +import com.navercorp.pinpoint.profiler.monitor.metric.JvmGcDetailedMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.JvmGcMetricSnapshot; import com.navercorp.pinpoint.profiler.monitor.metric.gc.DetailedGarbageCollectorMetric; import com.navercorp.pinpoint.profiler.monitor.metric.gc.DetailedGarbageCollectorMetricSnapshot; import com.navercorp.pinpoint.profiler.monitor.metric.memory.DetailedMemoryMetric; @@ -28,7 +30,7 @@ * @author dawidmalina * @author HyunGil Jeong */ -public class DetailedJvmGcMetricCollector implements AgentStatMetricCollector { +public class DetailedJvmGcMetricCollector implements AgentStatMetricCollector { private final BasicJvmGcMetricCollector jvmGcMetricCollector; private final DetailedMemoryMetric detailedMemoryMetric; @@ -53,22 +55,22 @@ public DetailedJvmGcMetricCollector( } @Override - public TJvmGc collect() { - TJvmGc jvmGc = jvmGcMetricCollector.collect(); - DetailedMemoryMetricSnapshot detailedMemoryMetricSnapshot = detailedMemoryMetric.getSnapshot(); - DetailedGarbageCollectorMetricSnapshot detailedGarbageCollectorMetricSnapshot = detailedGarbageCollectorMetric.getSnapshot(); + public JvmGcMetricSnapshot collect() { + final JvmGcMetricSnapshot jvmGcMetricSnapshot = jvmGcMetricCollector.collect(); + final DetailedMemoryMetricSnapshot detailedMemoryMetricSnapshot = detailedMemoryMetric.getSnapshot(); + final DetailedGarbageCollectorMetricSnapshot detailedGarbageCollectorMetricSnapshot = detailedGarbageCollectorMetric.getSnapshot(); - final TJvmGcDetailed jvmGcDetailed = new TJvmGcDetailed(); - jvmGcDetailed.setJvmPoolNewGenUsed(detailedMemoryMetricSnapshot.getNewGenUsage()); - jvmGcDetailed.setJvmPoolOldGenUsed(detailedMemoryMetricSnapshot.getOldGenUsage()); - jvmGcDetailed.setJvmPoolSurvivorSpaceUsed(detailedMemoryMetricSnapshot.getSurvivorSpaceUsage()); - jvmGcDetailed.setJvmPoolCodeCacheUsed(detailedMemoryMetricSnapshot.getCodeCacheUsage()); - jvmGcDetailed.setJvmPoolPermGenUsed(detailedMemoryMetricSnapshot.getPermGenUsage()); - jvmGcDetailed.setJvmPoolMetaspaceUsed(detailedMemoryMetricSnapshot.getMetaspaceUsage()); - jvmGcDetailed.setJvmGcNewCount(detailedGarbageCollectorMetricSnapshot.getGcNewCount()); - jvmGcDetailed.setJvmGcNewTime(detailedGarbageCollectorMetricSnapshot.getGcNewTime()); - jvmGc.setJvmGcDetailed(jvmGcDetailed); - return jvmGc; + final JvmGcDetailedMetricSnapshot jvmGcDetailedMetricSnapshot = new JvmGcDetailedMetricSnapshot(); + jvmGcDetailedMetricSnapshot.setJvmPoolNewGenUsed(detailedMemoryMetricSnapshot.getNewGenUsage()); + jvmGcDetailedMetricSnapshot.setJvmPoolOldGenUsed(detailedMemoryMetricSnapshot.getOldGenUsage()); + jvmGcDetailedMetricSnapshot.setJvmPoolSurvivorSpaceUsed(detailedMemoryMetricSnapshot.getSurvivorSpaceUsage()); + jvmGcDetailedMetricSnapshot.setJvmPoolCodeCacheUsed(detailedMemoryMetricSnapshot.getCodeCacheUsage()); + jvmGcDetailedMetricSnapshot.setJvmPoolPermGenUsed(detailedMemoryMetricSnapshot.getPermGenUsage()); + jvmGcDetailedMetricSnapshot.setJvmPoolMetaspaceUsed(detailedMemoryMetricSnapshot.getMetaspaceUsage()); + jvmGcDetailedMetricSnapshot.setJvmGcNewCount(detailedGarbageCollectorMetricSnapshot.getGcNewCount()); + jvmGcDetailedMetricSnapshot.setJvmGcNewTime(detailedGarbageCollectorMetricSnapshot.getGcNewTime()); + jvmGcMetricSnapshot.setJvmGcDetailed(jvmGcDetailedMetricSnapshot); + return jvmGcMetricSnapshot; } @Override diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/response/DefaultResponseTimeMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/response/DefaultResponseTimeMetricCollector.java index a335ecd8d8a6..39658f16b74e 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/response/DefaultResponseTimeMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/response/DefaultResponseTimeMetricCollector.java @@ -19,12 +19,11 @@ import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.response.ResponseTimeValue; import com.navercorp.pinpoint.profiler.monitor.metric.response.ResponseTimeMetric; -import com.navercorp.pinpoint.thrift.dto.TResponseTime; /** * @author Taejin Koo */ -public class DefaultResponseTimeMetricCollector implements AgentStatMetricCollector { +public class DefaultResponseTimeMetricCollector implements AgentStatMetricCollector { private final ResponseTimeMetric responseTimeMetric; @@ -36,19 +35,9 @@ public DefaultResponseTimeMetricCollector(ResponseTimeMetric responseTimeMetric) } @Override - public TResponseTime collect() { - ResponseTimeValue responseTimeValue = responseTimeMetric.responseTimeValue(); - long avg = responseTimeValue.getAvg(); - long max = responseTimeValue.getMax(); - - TResponseTime tResponseTime = new TResponseTime(); - if (avg != 0) { - tResponseTime.setAvg(avg); - } - if (max != 0) { - tResponseTime.setMax(max); - } - return tResponseTime; + public ResponseTimeValue collect() { + final ResponseTimeValue responseTimeValue = responseTimeMetric.responseTimeValue(); + return responseTimeValue; } } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/transaction/DefaultTransactionMetricCollector.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/transaction/DefaultTransactionMetricCollector.java index 350dfc2a288b..437109d4484b 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/transaction/DefaultTransactionMetricCollector.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/collector/transaction/DefaultTransactionMetricCollector.java @@ -20,12 +20,11 @@ import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; import com.navercorp.pinpoint.profiler.monitor.metric.transaction.TransactionMetric; import com.navercorp.pinpoint.profiler.monitor.metric.transaction.TransactionMetricSnapshot; -import com.navercorp.pinpoint.thrift.dto.TTransaction; /** * @author HyunGil Jeong */ -public class DefaultTransactionMetricCollector implements AgentStatMetricCollector { +public class DefaultTransactionMetricCollector implements AgentStatMetricCollector { private final TransactionMetric transactionMetric; @@ -35,15 +34,9 @@ public DefaultTransactionMetricCollector(TransactionMetric transactionMetric) { } @Override - public TTransaction collect() { - TransactionMetricSnapshot transactionMetricSnapshot = transactionMetric.getSnapshot(); - - TTransaction transaction = new TTransaction(); - transaction.setSampledNewCount(transactionMetricSnapshot.getSampledNewCount()); - transaction.setSampledContinuationCount(transactionMetricSnapshot.getSampledContinuationCount()); - transaction.setUnsampledNewCount(transactionMetricSnapshot.getUnsampledNewCount()); - transaction.setUnsampledContinuationCount(transactionMetricSnapshot.getUnsampledContinuationCount()); - return transaction; + public TransactionMetricSnapshot collect() { + final TransactionMetricSnapshot transactionMetricSnapshot = transactionMetric.getSnapshot(); + return transactionMetricSnapshot; } @Override diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/AgentStatMetricSnapshot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/AgentStatMetricSnapshot.java new file mode 100644 index 000000000000..b03da49c3c0a --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/AgentStatMetricSnapshot.java @@ -0,0 +1,179 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.monitor.metric; + +import com.navercorp.pinpoint.profiler.context.active.ActiveTraceHistogram; +import com.navercorp.pinpoint.profiler.monitor.metric.buffer.BufferMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.cpu.CpuLoadMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.datasource.DataSourceMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.DeadlockMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.filedescriptor.FileDescriptorMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.response.ResponseTimeValue; +import com.navercorp.pinpoint.profiler.monitor.metric.transaction.TransactionMetricSnapshot; + +/** + * @author jaehong.kim + */ +public class AgentStatMetricSnapshot { + private String agentId; + private long startTimestamp; + private long timestamp; + private long collectInterval; + private JvmGcMetricSnapshot gc; + private CpuLoadMetricSnapshot cpuLoad; + private TransactionMetricSnapshot transaction; + private ActiveTraceHistogram activeTrace; + private DataSourceMetricSnapshot dataSourceList; + private ResponseTimeValue responseTime; + private DeadlockMetricSnapshot deadlock; + private FileDescriptorMetricSnapshot fileDescriptor; + private BufferMetricSnapshot directBuffer; + private String metadata; + + public String getAgentId() { + return agentId; + } + + public void setAgentId(String agentId) { + this.agentId = agentId; + } + + public long getStartTimestamp() { + return startTimestamp; + } + + public void setStartTimestamp(long startTimestamp) { + this.startTimestamp = startTimestamp; + } + + public long getTimestamp() { + return timestamp; + } + + public void setTimestamp(long timestamp) { + this.timestamp = timestamp; + } + + public long getCollectInterval() { + return collectInterval; + } + + public void setCollectInterval(long collectInterval) { + this.collectInterval = collectInterval; + } + + public JvmGcMetricSnapshot getGc() { + return gc; + } + + public void setGc(JvmGcMetricSnapshot gc) { + this.gc = gc; + } + + public CpuLoadMetricSnapshot getCpuLoad() { + return cpuLoad; + } + + public void setCpuLoad(CpuLoadMetricSnapshot cpuLoad) { + this.cpuLoad = cpuLoad; + } + + public TransactionMetricSnapshot getTransaction() { + return transaction; + } + + public void setTransaction(TransactionMetricSnapshot transaction) { + this.transaction = transaction; + } + + public ActiveTraceHistogram getActiveTrace() { + return activeTrace; + } + + public void setActiveTrace(ActiveTraceHistogram activeTrace) { + this.activeTrace = activeTrace; + } + + public DataSourceMetricSnapshot getDataSourceList() { + return dataSourceList; + } + + public void setDataSourceList(DataSourceMetricSnapshot dataSourceList) { + this.dataSourceList = dataSourceList; + } + + public ResponseTimeValue getResponseTime() { + return responseTime; + } + + public void setResponseTime(ResponseTimeValue responseTime) { + this.responseTime = responseTime; + } + + public DeadlockMetricSnapshot getDeadlock() { + return deadlock; + } + + public void setDeadlock(DeadlockMetricSnapshot deadlock) { + this.deadlock = deadlock; + } + + public FileDescriptorMetricSnapshot getFileDescriptor() { + return fileDescriptor; + } + + public void setFileDescriptor(FileDescriptorMetricSnapshot fileDescriptor) { + this.fileDescriptor = fileDescriptor; + } + + public BufferMetricSnapshot getDirectBuffer() { + return directBuffer; + } + + public void setDirectBuffer(BufferMetricSnapshot directBuffer) { + this.directBuffer = directBuffer; + } + + public String getMetadata() { + return metadata; + } + + public void setMetadata(String metadata) { + this.metadata = metadata; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("AgentStatMetricSnapshot{"); + sb.append("agentId='").append(agentId).append('\''); + sb.append(", startTimestamp=").append(startTimestamp); + sb.append(", timestamp=").append(timestamp); + sb.append(", collectInterval=").append(collectInterval); + sb.append(", gc=").append(gc); + sb.append(", cpuLoad=").append(cpuLoad); + sb.append(", transaction=").append(transaction); + sb.append(", activeTrace=").append(activeTrace); + sb.append(", dataSourceList=").append(dataSourceList); + sb.append(", responseTime=").append(responseTime); + sb.append(", deadlock=").append(deadlock); + sb.append(", fileDescriptor=").append(fileDescriptor); + sb.append(", directBuffer=").append(directBuffer); + sb.append(", metadata='").append(metadata).append('\''); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/AgentStatMetricSnapshotBatch.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/AgentStatMetricSnapshotBatch.java new file mode 100644 index 000000000000..488d8e91ff08 --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/AgentStatMetricSnapshotBatch.java @@ -0,0 +1,62 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.monitor.metric; + +import java.util.List; + +/** + * @author jaehong.kim + */ +public class AgentStatMetricSnapshotBatch { + private java.lang.String agentId; + private long startTimestamp; + private List agentStats; + + public String getAgentId() { + return agentId; + } + + public void setAgentId(String agentId) { + this.agentId = agentId; + } + + public long getStartTimestamp() { + return startTimestamp; + } + + public void setStartTimestamp(long startTimestamp) { + this.startTimestamp = startTimestamp; + } + + public List getAgentStats() { + return agentStats; + } + + public void setAgentStats(List agentStats) { + this.agentStats = agentStats; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("AgentStatMetricSnapshotBatch{"); + sb.append("agentId='").append(agentId).append('\''); + sb.append(", startTimestamp=").append(startTimestamp); + sb.append(", agentStats=").append(agentStats); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/JvmGcDetailedMetricSnapshot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/JvmGcDetailedMetricSnapshot.java new file mode 100644 index 000000000000..ea056d3951cb --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/JvmGcDetailedMetricSnapshot.java @@ -0,0 +1,110 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.monitor.metric; + +/** + * @author jaehong.kim + */ +public class JvmGcDetailedMetricSnapshot { + private long jvmGcNewCount; + private long jvmGcNewTime; + private double jvmPoolCodeCacheUsed; + private double jvmPoolNewGenUsed; + private double jvmPoolOldGenUsed; + private double jvmPoolSurvivorSpaceUsed; + private double jvmPoolPermGenUsed; + private double jvmPoolMetaspaceUsed; + + public long getJvmGcNewCount() { + return jvmGcNewCount; + } + + public void setJvmGcNewCount(long jvmGcNewCount) { + this.jvmGcNewCount = jvmGcNewCount; + } + + public long getJvmGcNewTime() { + return jvmGcNewTime; + } + + public void setJvmGcNewTime(long jvmGcNewTime) { + this.jvmGcNewTime = jvmGcNewTime; + } + + public double getJvmPoolCodeCacheUsed() { + return jvmPoolCodeCacheUsed; + } + + public void setJvmPoolCodeCacheUsed(double jvmPoolCodeCacheUsed) { + this.jvmPoolCodeCacheUsed = jvmPoolCodeCacheUsed; + } + + public double getJvmPoolNewGenUsed() { + return jvmPoolNewGenUsed; + } + + public void setJvmPoolNewGenUsed(double jvmPoolNewGenUsed) { + this.jvmPoolNewGenUsed = jvmPoolNewGenUsed; + } + + public double getJvmPoolOldGenUsed() { + return jvmPoolOldGenUsed; + } + + public void setJvmPoolOldGenUsed(double jvmPoolOldGenUsed) { + this.jvmPoolOldGenUsed = jvmPoolOldGenUsed; + } + + public double getJvmPoolSurvivorSpaceUsed() { + return jvmPoolSurvivorSpaceUsed; + } + + public void setJvmPoolSurvivorSpaceUsed(double jvmPoolSurvivorSpaceUsed) { + this.jvmPoolSurvivorSpaceUsed = jvmPoolSurvivorSpaceUsed; + } + + public double getJvmPoolPermGenUsed() { + return jvmPoolPermGenUsed; + } + + public void setJvmPoolPermGenUsed(double jvmPoolPermGenUsed) { + this.jvmPoolPermGenUsed = jvmPoolPermGenUsed; + } + + public double getJvmPoolMetaspaceUsed() { + return jvmPoolMetaspaceUsed; + } + + public void setJvmPoolMetaspaceUsed(double jvmPoolMetaspaceUsed) { + this.jvmPoolMetaspaceUsed = jvmPoolMetaspaceUsed; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("JvmGcDetailedMetricSnapshot{"); + sb.append("jvmGcNewCount=").append(jvmGcNewCount); + sb.append(", jvmGcNewTime=").append(jvmGcNewTime); + sb.append(", jvmPoolCodeCacheUsed=").append(jvmPoolCodeCacheUsed); + sb.append(", jvmPoolNewGenUsed=").append(jvmPoolNewGenUsed); + sb.append(", jvmPoolOldGenUsed=").append(jvmPoolOldGenUsed); + sb.append(", jvmPoolSurvivorSpaceUsed=").append(jvmPoolSurvivorSpaceUsed); + sb.append(", jvmPoolPermGenUsed=").append(jvmPoolPermGenUsed); + sb.append(", jvmPoolMetaspaceUsed=").append(jvmPoolMetaspaceUsed); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/JvmGcMetricSnapshot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/JvmGcMetricSnapshot.java new file mode 100644 index 000000000000..b9d67c409812 --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/JvmGcMetricSnapshot.java @@ -0,0 +1,112 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.monitor.metric; + +import com.navercorp.pinpoint.profiler.monitor.metric.gc.JvmGcType; + +/** + * @author jaehong.kim + */ +public class JvmGcMetricSnapshot { + private JvmGcType type; + private long jvmMemoryHeapUsed; + private long jvmMemoryHeapMax; + private long jvmMemoryNonHeapUsed; + private long jvmMemoryNonHeapMax; + private long jvmGcOldCount; + private long jvmGcOldTime; + private JvmGcDetailedMetricSnapshot jvmGcDetailed; + + public JvmGcType getType() { + return type; + } + + public void setType(JvmGcType type) { + this.type = type; + } + + public long getJvmMemoryHeapUsed() { + return jvmMemoryHeapUsed; + } + + public void setJvmMemoryHeapUsed(long jvmMemoryHeapUsed) { + this.jvmMemoryHeapUsed = jvmMemoryHeapUsed; + } + + public long getJvmMemoryHeapMax() { + return jvmMemoryHeapMax; + } + + public void setJvmMemoryHeapMax(long jvmMemoryHeapMax) { + this.jvmMemoryHeapMax = jvmMemoryHeapMax; + } + + public long getJvmMemoryNonHeapUsed() { + return jvmMemoryNonHeapUsed; + } + + public void setJvmMemoryNonHeapUsed(long jvmMemoryNonHeapUsed) { + this.jvmMemoryNonHeapUsed = jvmMemoryNonHeapUsed; + } + + public long getJvmMemoryNonHeapMax() { + return jvmMemoryNonHeapMax; + } + + public void setJvmMemoryNonHeapMax(long jvmMemoryNonHeapMax) { + this.jvmMemoryNonHeapMax = jvmMemoryNonHeapMax; + } + + public long getJvmGcOldCount() { + return jvmGcOldCount; + } + + public void setJvmGcOldCount(long jvmGcOldCount) { + this.jvmGcOldCount = jvmGcOldCount; + } + + public long getJvmGcOldTime() { + return jvmGcOldTime; + } + + public void setJvmGcOldTime(long jvmGcOldTime) { + this.jvmGcOldTime = jvmGcOldTime; + } + + public JvmGcDetailedMetricSnapshot getJvmGcDetailed() { + return jvmGcDetailed; + } + + public void setJvmGcDetailed(JvmGcDetailedMetricSnapshot jvmGcDetailed) { + this.jvmGcDetailed = jvmGcDetailed; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("JvmGcMetricSnapshot{"); + sb.append("type=").append(type); + sb.append(", jvmMemoryHeapUsed=").append(jvmMemoryHeapUsed); + sb.append(", jvmMemoryHeapMax=").append(jvmMemoryHeapMax); + sb.append(", jvmMemoryNonHeapUsed=").append(jvmMemoryNonHeapUsed); + sb.append(", jvmMemoryNonHeapMax=").append(jvmMemoryNonHeapMax); + sb.append(", jvmGcOldCount=").append(jvmGcOldCount); + sb.append(", jvmGcOldTime=").append(jvmGcOldTime); + sb.append(", jvmGcDetailed=").append(jvmGcDetailed); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/datasource/DataSourceMetricSnapshot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/datasource/DataSourceMetricSnapshot.java new file mode 100644 index 000000000000..0aaa59fa0862 --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/datasource/DataSourceMetricSnapshot.java @@ -0,0 +1,43 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.monitor.metric.datasource; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author jaehong.kim + */ +public class DataSourceMetricSnapshot { + private List dataSourceList = new ArrayList(); + + public List getDataSourceList() { + return dataSourceList; + } + + public void addDataSourceCollectData(DataSource dataSource) { + this.dataSourceList.add(dataSource); + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("DataSourceMetricSnapshot{"); + sb.append("dataSourceList=").append(dataSourceList); + sb.append('}'); + return sb.toString(); + } +} diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/DeadlockMetricSnapshot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/DeadlockMetricSnapshot.java new file mode 100644 index 000000000000..c27f75824afc --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/DeadlockMetricSnapshot.java @@ -0,0 +1,53 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.monitor.metric.deadlock; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author jaehong.kim + */ +public class DeadlockMetricSnapshot { + private int deadlockedThreadCount; + private List deadlockedThreadList = new ArrayList(); + + public int getDeadlockedThreadCount() { + return deadlockedThreadCount; + } + + public void setDeadlockedThreadCount(int deadlockedThreadCount) { + this.deadlockedThreadCount = deadlockedThreadCount; + } + + public List getDeadlockedThreadList() { + return deadlockedThreadList; + } + + public void addDeadlockedThread(ThreadDumpMetricSnapshot threadDumpMetricSnapshot) { + this.deadlockedThreadList.add(threadDumpMetricSnapshot); + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("DeadlockMetricSnapshot{"); + sb.append("deadlockedThreadCount=").append(deadlockedThreadCount); + sb.append(", deadlockedThreadList=").append(deadlockedThreadList); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/MonitorInfoMetricSnapshot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/MonitorInfoMetricSnapshot.java new file mode 100644 index 000000000000..e7bc6b6d3507 --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/MonitorInfoMetricSnapshot.java @@ -0,0 +1,50 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.monitor.metric.deadlock; + +/** + * @author jaehong.kim + */ +public class MonitorInfoMetricSnapshot { + private int stackDepth; + private String stackFrame; + + public int getStackDepth() { + return stackDepth; + } + + public void setStackDepth(int stackDepth) { + this.stackDepth = stackDepth; + } + + public String getStackFrame() { + return stackFrame; + } + + public void setStackFrame(String stackFrame) { + this.stackFrame = stackFrame; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("MonitorInfoMetricSnapshot{"); + sb.append("stackDepth=").append(stackDepth); + sb.append(", stackFrame='").append(stackFrame).append('\''); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/ThreadDumpMetricSnapshot.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/ThreadDumpMetricSnapshot.java new file mode 100644 index 000000000000..275f7967654c --- /dev/null +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/monitor/metric/deadlock/ThreadDumpMetricSnapshot.java @@ -0,0 +1,195 @@ +/* + * Copyright 2019 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.profiler.monitor.metric.deadlock; + +import java.util.ArrayList; +import java.util.List; + +/** + * @author jaehong.kim + */ +public class ThreadDumpMetricSnapshot { + private String threadName; + private long threadId; + private long blockedTime; + private long blockedCount; + private long waitedTime; + private long waitedCount; + private String lockName; + private long lockOwnerId; + private String lockOwnerName; + private boolean inNative; + private boolean suspended; + private Thread.State threadState; + private List stackTrace = new ArrayList(); + private List lockedMonitors = new ArrayList(); + private List lockedSynchronizers = new ArrayList(); + + public String getThreadName() { + return threadName; + } + + public void setThreadName(String threadName) { + this.threadName = threadName; + } + + public long getThreadId() { + return threadId; + } + + public void setThreadId(long threadId) { + this.threadId = threadId; + } + + public long getBlockedTime() { + return blockedTime; + } + + public void setBlockedTime(long blockedTime) { + this.blockedTime = blockedTime; + } + + public long getBlockedCount() { + return blockedCount; + } + + public void setBlockedCount(long blockedCount) { + this.blockedCount = blockedCount; + } + + public long getWaitedTime() { + return waitedTime; + } + + public void setWaitedTime(long waitedTime) { + this.waitedTime = waitedTime; + } + + public long getWaitedCount() { + return waitedCount; + } + + public void setWaitedCount(long waitedCount) { + this.waitedCount = waitedCount; + } + + public String getLockName() { + return lockName; + } + + public void setLockName(String lockName) { + this.lockName = lockName; + } + + public long getLockOwnerId() { + return lockOwnerId; + } + + public void setLockOwnerId(long lockOwnerId) { + this.lockOwnerId = lockOwnerId; + } + + public String getLockOwnerName() { + return lockOwnerName; + } + + public void setLockOwnerName(String lockOwnerName) { + this.lockOwnerName = lockOwnerName; + } + + public boolean isInNative() { + return inNative; + } + + public void setInNative(boolean inNative) { + this.inNative = inNative; + } + + public boolean isSuspended() { + return suspended; + } + + public void setSuspended(boolean suspended) { + this.suspended = suspended; + } + + public Thread.State getThreadState() { + return threadState; + } + + public void setThreadState(Thread.State threadState) { + this.threadState = threadState; + } + + public List getStackTrace() { + return stackTrace; + } + + public void setStackTrace(List stackTrace) { + this.stackTrace = stackTrace; + } + + public void addStackTrace(String stackTrace) { + this.stackTrace.add(stackTrace); + } + + public List getLockedMonitors() { + return lockedMonitors; + } + + public void addLockedMonitor(MonitorInfoMetricSnapshot monitorInfoMetricSnapshot) { + this.lockedMonitors.add(monitorInfoMetricSnapshot); + } + + public void setLockedMonitors(List monitorInfoMetricSnapshotList) { + this.lockedMonitors = monitorInfoMetricSnapshotList; + } + + public List getLockedSynchronizers() { + return lockedSynchronizers; + } + + public void addLockedSynchronizer(String lockedSynchronizer) { + this.lockedSynchronizers.add(lockedSynchronizer); + } + + public void setLockedSynchronizers(List lockedSynchronizers) { + this.lockedSynchronizers = lockedSynchronizers; + } + + @Override + public String toString() { + final StringBuilder sb = new StringBuilder("ThreadDumpMetricSnapshot{"); + sb.append("threadName='").append(threadName).append('\''); + sb.append(", threadId=").append(threadId); + sb.append(", blockedTime=").append(blockedTime); + sb.append(", blockedCount=").append(blockedCount); + sb.append(", waitedTime=").append(waitedTime); + sb.append(", waitedCount=").append(waitedCount); + sb.append(", lockName='").append(lockName).append('\''); + sb.append(", lockOwnerId=").append(lockOwnerId); + sb.append(", lockOwnerName='").append(lockOwnerName).append('\''); + sb.append(", inNative=").append(inNative); + sb.append(", suspended=").append(suspended); + sb.append(", threadState=").append(threadState); + sb.append(", stackTrace=").append(stackTrace); + sb.append(", lockedMonitors=").append(lockedMonitors); + sb.append(", lockedSynchronizers=").append(lockedSynchronizers); + sb.append('}'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/receiver/service/ActiveThreadDumpService.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/receiver/service/ActiveThreadDumpService.java index 758413fb842c..5aa09f41abd0 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/receiver/service/ActiveThreadDumpService.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/receiver/service/ActiveThreadDumpService.java @@ -18,6 +18,8 @@ import com.navercorp.pinpoint.common.util.JvmUtils; import com.navercorp.pinpoint.profiler.context.active.ActiveTraceSnapshot; +import com.navercorp.pinpoint.profiler.context.thrift.ThreadDumpThriftMessageConverter; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.ThreadDumpMetricSnapshot; import com.navercorp.pinpoint.profiler.receiver.ProfilerRequestCommandService; import com.navercorp.pinpoint.profiler.util.ThreadDumpUtils; import com.navercorp.pinpoint.thrift.dto.command.TActiveThreadDump; @@ -40,6 +42,7 @@ public class ActiveThreadDumpService implements ProfilerRequestCommandService, TBase> { - private final ActiveThreadDumpCoreService activeThreadDump; + private final ThreadStateThriftMessageConverter threadStateThriftMessageConverter = new ThreadStateThriftMessageConverter(); public ActiveThreadLightDumpService(ActiveThreadDumpCoreService activeThreadDump) { this.activeThreadDump = Assert.requireNonNull(activeThreadDump, "activeThreadDump must not be null"); @@ -87,7 +91,8 @@ private TThreadLightDump createTThreadLightDump(ThreadInfo threadInfo) { threadDump.setThreadName(threadInfo.getThreadName()); threadDump.setThreadId(threadInfo.getThreadId()); - threadDump.setThreadState(ThreadDumpUtils.toTThreadState(threadInfo.getThreadState())); + final TThreadState threadState = this.threadStateThriftMessageConverter.toMessage(threadInfo.getThreadState()); + threadDump.setThreadState(threadState); return threadDump; } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/TcpDataSender.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/TcpDataSender.java index 5e2918dfc5ae..6fb5c720eb53 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/TcpDataSender.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/TcpDataSender.java @@ -197,24 +197,19 @@ public void stop() { protected void sendPacket(Object message) { try { - if (message instanceof TBase) { - final byte[] copy = messageSerializer.serializer(message); - if (copy == null) { - return; - } - doSend(copy); - return; - } - if (message instanceof RequestMessage) { final RequestMessage requestMessage = (RequestMessage) message; if (doRequest(requestMessage)) { return; } - } else { + } + + final byte[] copy = messageSerializer.serializer(message); + if (copy == null) { logger.error("sendPacket fail. invalid dto type:{}", message.getClass()); return; } + doSend(copy); } catch (Exception e) { logger.warn("tcp send fail. Caused:{}", e.getMessage(), e); } diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/UdpDataSenderFactory.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/UdpDataSenderFactory.java index 5342b04a5b5e..a59967e96cd5 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/UdpDataSenderFactory.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/sender/UdpDataSenderFactory.java @@ -35,7 +35,7 @@ public final class UdpDataSenderFactory { private final int sendBufferSize; private final MessageConverter> messageConverter; - public UdpDataSenderFactory(String host, int port, String threadName, int queueSize, int timeout, int sendBufferSize, @SpanConverter MessageConverter> messageConverter) { + public UdpDataSenderFactory(String host, int port, String threadName, int queueSize, int timeout, int sendBufferSize, MessageConverter> messageConverter) { this.host = host; this.port = port; this.threadName = threadName; diff --git a/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/ThreadDumpUtils.java b/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/ThreadDumpUtils.java index ee52285276d8..3659c2abcac5 100644 --- a/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/ThreadDumpUtils.java +++ b/profiler/src/main/java/com/navercorp/pinpoint/profiler/util/ThreadDumpUtils.java @@ -18,9 +18,8 @@ import com.navercorp.pinpoint.common.util.Assert; import com.navercorp.pinpoint.common.util.ThreadMXBeanUtils; -import com.navercorp.pinpoint.thrift.dto.command.TMonitorInfo; -import com.navercorp.pinpoint.thrift.dto.command.TThreadDump; -import com.navercorp.pinpoint.thrift.dto.command.TThreadState; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.MonitorInfoMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.ThreadDumpMetricSnapshot; import java.lang.management.LockInfo; import java.lang.management.MonitorInfo; @@ -32,31 +31,28 @@ */ public class ThreadDumpUtils { - - public static TThreadDump createTThreadDump(Thread thread) { + public static ThreadDumpMetricSnapshot createThreadDump(Thread thread) { Assert.requireNonNull(thread, "thread must not be null"); - - ThreadInfo threadInfo = ThreadMXBeanUtils.getThreadInfo(thread.getId()); + final ThreadInfo threadInfo = ThreadMXBeanUtils.getThreadInfo(thread.getId()); if (threadInfo == null) { return null; } - return createTThreadDump(threadInfo); + return createThreadDump(threadInfo); } - public static TThreadDump createTThreadDump(Thread thread, int stackTraceMaxDepth) { + public static ThreadDumpMetricSnapshot createThreadDump(Thread thread, int stackTraceMaxDepth) { Assert.requireNonNull(thread, "thread must not be null"); - - ThreadInfo threadInfo = ThreadMXBeanUtils.getThreadInfo(thread.getId(), stackTraceMaxDepth); + final ThreadInfo threadInfo = ThreadMXBeanUtils.getThreadInfo(thread.getId(), stackTraceMaxDepth); if (threadInfo == null) { return null; } - return createTThreadDump(threadInfo); + return createThreadDump(threadInfo); } - public static TThreadDump createTThreadDump(ThreadInfo threadInfo) { - TThreadDump threadDump = new TThreadDump(); + public static ThreadDumpMetricSnapshot createThreadDump(ThreadInfo threadInfo) { + final ThreadDumpMetricSnapshot threadDump = new ThreadDumpMetricSnapshot(); setThreadInfo(threadDump, threadInfo); setThreadStatus(threadDump, threadInfo); setStackTrace(threadDump, threadInfo); @@ -66,46 +62,16 @@ public static TThreadDump createTThreadDump(ThreadInfo threadInfo) { return threadDump; } - public static TThreadDump createTThreadDump(long threadId) { - ThreadInfo threadInfo = ThreadMXBeanUtils.getThreadInfo(threadId); - if (threadInfo == null) { - return null; - } - - return createTThreadDump(threadInfo); - } - - public static TThreadDump createTThreadDump(long threadId, int stackTraceMaxDepth) { - ThreadInfo threadInfo = ThreadMXBeanUtils.getThreadInfo(threadId, stackTraceMaxDepth); + public static ThreadDumpMetricSnapshot createTThreadDump(long threadId) { + final ThreadInfo threadInfo = ThreadMXBeanUtils.getThreadInfo(threadId); if (threadInfo == null) { return null; } - return createTThreadDump(threadInfo); + return createThreadDump(threadInfo); } - public static TThreadState toTThreadState(Thread.State threadState) { - if (threadState == null) { - throw new NullPointerException("threadState must not be null"); - } - switch (threadState) { - case NEW: - return TThreadState.NEW; - case RUNNABLE: - return TThreadState.RUNNABLE; - case BLOCKED: - return TThreadState.BLOCKED; - case WAITING: - return TThreadState.WAITING; - case TIMED_WAITING: - return TThreadState.TIMED_WAITING; - case TERMINATED: - return TThreadState.TERMINATED; - } - return TThreadState.UNKNOWN; - } - - private static void setThreadInfo(TThreadDump threadDump, ThreadInfo threadInfo) { + private static void setThreadInfo(ThreadDumpMetricSnapshot threadDump, ThreadInfo threadInfo) { threadDump.setThreadName(threadInfo.getThreadName()); threadDump.setThreadId(threadInfo.getThreadId()); threadDump.setBlockedTime(threadInfo.getBlockedTime()); @@ -114,46 +80,44 @@ private static void setThreadInfo(TThreadDump threadDump, ThreadInfo threadInfo) threadDump.setWaitedCount(threadInfo.getWaitedCount()); } - private static void setThreadStatus(TThreadDump threadDump, ThreadInfo threadInfo) { + private static void setThreadStatus(ThreadDumpMetricSnapshot threadDump, ThreadInfo threadInfo) { threadDump.setInNative(threadInfo.isInNative()); threadDump.setSuspended(threadInfo.isSuspended()); - threadDump.setThreadState(getThreadState(threadInfo)); + threadDump.setThreadState(threadInfo.getThreadState()); } - private static void setStackTrace(TThreadDump threadDump, ThreadInfo threadInfo) { + private static void setStackTrace(ThreadDumpMetricSnapshot threadDump, ThreadInfo threadInfo) { StackTraceElement[] stackTraceElements = threadInfo.getStackTrace(); if (stackTraceElements != null) { for (StackTraceElement element : stackTraceElements) { if (element == null) { continue; } - threadDump.addToStackTrace(element.toString()); + threadDump.addStackTrace(element.toString()); } } else { threadDump.setStackTrace(Collections.emptyList()); } } - private static void setMonitorInfo(TThreadDump threadDump, ThreadInfo threadInfo) { + private static void setMonitorInfo(ThreadDumpMetricSnapshot threadDump, ThreadInfo threadInfo) { MonitorInfo[] monitorInfos = threadInfo.getLockedMonitors(); if (monitorInfos != null) { for (MonitorInfo each : monitorInfos) { if (each == null) { continue; } - TMonitorInfo tMonitorInfo = new TMonitorInfo(); - - tMonitorInfo.setStackDepth(each.getLockedStackDepth()); - tMonitorInfo.setStackFrame(each.getLockedStackFrame().toString()); - - threadDump.addToLockedMonitors(tMonitorInfo); + MonitorInfoMetricSnapshot monitorInfoMetricSnapshot = new MonitorInfoMetricSnapshot(); + monitorInfoMetricSnapshot.setStackDepth(each.getLockedStackDepth()); + monitorInfoMetricSnapshot.setStackFrame(each.getLockedStackFrame().toString()); + threadDump.addLockedMonitor(monitorInfoMetricSnapshot); } } else { - threadDump.setLockedMonitors(Collections.emptyList()); + threadDump.setLockedMonitors(Collections.emptyList()); } } - private static void setLockInfo(TThreadDump threadDump, ThreadInfo threadInfo) { + private static void setLockInfo(ThreadDumpMetricSnapshot threadDump, ThreadInfo threadInfo) { threadDump.setLockName(threadInfo.getLockName()); threadDump.setLockOwnerId(threadInfo.getLockOwnerId()); threadDump.setLockOwnerName(threadInfo.getLockOwnerName()); @@ -165,15 +129,10 @@ private static void setLockInfo(TThreadDump threadDump, ThreadInfo threadInfo) { if (lockInfo == null) { continue; } - threadDump.addToLockedSynchronizers(lockInfo.toString()); + threadDump.addLockedSynchronizer(lockInfo.toString()); } } else { threadDump.setLockedSynchronizers(Collections.emptyList()); } } - - private static TThreadState getThreadState(ThreadInfo info) { - return toTThreadState(info.getThreadState()); - } - } diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/monitor/CollectJobTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/monitor/CollectJobTest.java index 5b72fd73b4cb..6ee64af505df 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/monitor/CollectJobTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/monitor/CollectJobTest.java @@ -17,9 +17,9 @@ package com.navercorp.pinpoint.profiler.monitor; import com.navercorp.pinpoint.profiler.monitor.collector.AgentStatMetricCollector; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshot; +import com.navercorp.pinpoint.profiler.monitor.metric.AgentStatMetricSnapshotBatch; import com.navercorp.pinpoint.profiler.sender.DataSender; -import com.navercorp.pinpoint.thrift.dto.TAgentStat; -import com.navercorp.pinpoint.thrift.dto.TAgentStatBatch; import org.junit.Test; import org.mockito.Mockito; @@ -33,20 +33,20 @@ public class CollectJobTest { @Test public void run() throws Exception { - AgentStatMetricCollector agentStatMetricCollector = mockAgentStatMetricCollector(); - Mockito.when(agentStatMetricCollector.collect()).thenReturn(new TAgentStat()); + AgentStatMetricCollector agentStatMetricCollector = mockAgentStatMetricCollector(); + Mockito.when(agentStatMetricCollector.collect()).thenReturn(new AgentStatMetricSnapshot()); DataSender dataSender = mock(DataSender.class); CollectJob job = new CollectJob(dataSender, "agent", 0, agentStatMetricCollector, 1); job.run(); - Mockito.verify(dataSender).send(any(TAgentStatBatch.class)); + Mockito.verify(dataSender).send(any(AgentStatMetricSnapshotBatch.class)); } @SuppressWarnings("unchecked") - private AgentStatMetricCollector mockAgentStatMetricCollector() { + private AgentStatMetricCollector mockAgentStatMetricCollector() { return Mockito.mock(AgentStatMetricCollector.class); } diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/monitor/collector/response/DefaultResponseTimeMetricCollectorTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/monitor/collector/response/DefaultResponseTimeMetricCollectorTest.java index ffe7a85f5dfc..2ab0124bdd93 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/monitor/collector/response/DefaultResponseTimeMetricCollectorTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/monitor/collector/response/DefaultResponseTimeMetricCollectorTest.java @@ -63,15 +63,15 @@ public void setUp() { @Test public void defaultTest() throws Exception { - AgentStatMetricCollector responseTimeMetricCollector = new DefaultResponseTimeMetricCollector(responseTimeMetric); - TResponseTime collect = responseTimeMetricCollector.collect(); + AgentStatMetricCollector responseTimeMetricCollector = new DefaultResponseTimeMetricCollector(responseTimeMetric); + ResponseTimeValue collect = responseTimeMetricCollector.collect(); Assert.assertEquals(totalValue / COUNT, collect.getAvg()); } @Test(expected = NullPointerException.class) public void throwNPETest() throws Exception { - AgentStatMetricCollector responseTimeMetricCollector = new DefaultResponseTimeMetricCollector(null); + AgentStatMetricCollector responseTimeMetricCollector = new DefaultResponseTimeMetricCollector(null); } } diff --git a/profiler/src/test/java/com/navercorp/pinpoint/profiler/util/ThreadDumpUtilsTest.java b/profiler/src/test/java/com/navercorp/pinpoint/profiler/util/ThreadDumpUtilsTest.java index 913b0d2bf8c7..76770deecda7 100644 --- a/profiler/src/test/java/com/navercorp/pinpoint/profiler/util/ThreadDumpUtilsTest.java +++ b/profiler/src/test/java/com/navercorp/pinpoint/profiler/util/ThreadDumpUtilsTest.java @@ -16,6 +16,7 @@ package com.navercorp.pinpoint.profiler.util; +import com.navercorp.pinpoint.profiler.context.thrift.ThreadStateThriftMessageConverter; import com.navercorp.pinpoint.thrift.dto.command.TThreadState; import org.junit.Assert; import org.junit.Test; @@ -31,26 +32,25 @@ public class ThreadDumpUtilsTest { @Test public void toTThreadState() throws Exception { + ThreadStateThriftMessageConverter threadStateThriftMessageConverter = new ThreadStateThriftMessageConverter(); - TThreadState newState = ThreadDumpUtils.toTThreadState(Thread.State.NEW); + TThreadState newState = threadStateThriftMessageConverter.toMessage(Thread.State.NEW); Assert.assertEquals(newState, TThreadState.NEW); - TThreadState runnable = ThreadDumpUtils.toTThreadState(Thread.State.RUNNABLE); + TThreadState runnable = threadStateThriftMessageConverter.toMessage(Thread.State.RUNNABLE); Assert.assertEquals(runnable, TThreadState.RUNNABLE); - TThreadState blocked = ThreadDumpUtils.toTThreadState(Thread.State.BLOCKED); + TThreadState blocked = threadStateThriftMessageConverter.toMessage(Thread.State.BLOCKED); Assert.assertEquals(blocked, TThreadState.BLOCKED); - TThreadState waiting = ThreadDumpUtils.toTThreadState(Thread.State.WAITING); + TThreadState waiting = threadStateThriftMessageConverter.toMessage(Thread.State.WAITING); Assert.assertEquals(waiting, TThreadState.WAITING); - TThreadState timedWaiting = ThreadDumpUtils.toTThreadState(Thread.State.TIMED_WAITING); + TThreadState timedWaiting = threadStateThriftMessageConverter.toMessage(Thread.State.TIMED_WAITING); Assert.assertEquals(timedWaiting, TThreadState.TIMED_WAITING); - TThreadState terminated = ThreadDumpUtils.toTThreadState(Thread.State.TERMINATED); + TThreadState terminated = threadStateThriftMessageConverter.toMessage(Thread.State.TERMINATED); Assert.assertEquals(terminated, TThreadState.TERMINATED); - } - } \ No newline at end of file diff --git a/web/src/test/java/com/navercorp/pinpoint/web/view/AgentActiveThreadDumpListSerializerTest.java b/web/src/test/java/com/navercorp/pinpoint/web/view/AgentActiveThreadDumpListSerializerTest.java index 2bc33add0b6a..bcb62b889127 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/view/AgentActiveThreadDumpListSerializerTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/view/AgentActiveThreadDumpListSerializerTest.java @@ -19,8 +19,11 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.navercorp.pinpoint.common.util.CollectionUtils; import com.navercorp.pinpoint.common.util.ThreadMXBeanUtils; +import com.navercorp.pinpoint.profiler.context.thrift.ThreadDumpThriftMessageConverter; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.ThreadDumpMetricSnapshot; import com.navercorp.pinpoint.profiler.util.ThreadDumpUtils; import com.navercorp.pinpoint.thrift.dto.command.TActiveThreadDump; +import com.navercorp.pinpoint.thrift.dto.command.TThreadDump; import com.navercorp.pinpoint.web.vo.AgentActiveThreadDumpFactory; import com.navercorp.pinpoint.web.vo.AgentActiveThreadDumpList; import org.junit.Assert; @@ -37,6 +40,7 @@ public class AgentActiveThreadDumpListSerializerTest { private ObjectMapper mapper = new ObjectMapper(); + private ThreadDumpThriftMessageConverter threadDumpThriftMessageConverter = new ThreadDumpThriftMessageConverter(); @Test public void serializeTest() throws Exception { @@ -67,8 +71,10 @@ private AgentActiveThreadDumpList createThreadDumpList(ThreadInfo[] allThreadInf for (ThreadInfo threadInfo : allThreadInfo) { TActiveThreadDump tActiveThreadDump = new TActiveThreadDump(); tActiveThreadDump.setStartTime(System.currentTimeMillis() - 1000); - tActiveThreadDump.setThreadDump(ThreadDumpUtils.createTThreadDump(threadInfo)); + final ThreadDumpMetricSnapshot threadDumpMetricSnapshot =ThreadDumpUtils.createThreadDump(threadInfo); + final TThreadDump threadDump = this.threadDumpThriftMessageConverter.toMessage(threadDumpMetricSnapshot); + tActiveThreadDump.setThreadDump(threadDump); activeThreadDumpList.add(tActiveThreadDump); } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/vo/AgentActiveThreadDumpListTest.java b/web/src/test/java/com/navercorp/pinpoint/web/vo/AgentActiveThreadDumpListTest.java index b11df4e09296..5e4910b2be25 100644 --- a/web/src/test/java/com/navercorp/pinpoint/web/vo/AgentActiveThreadDumpListTest.java +++ b/web/src/test/java/com/navercorp/pinpoint/web/vo/AgentActiveThreadDumpListTest.java @@ -18,10 +18,15 @@ import com.navercorp.pinpoint.bootstrap.util.jdk.ThreadLocalRandom; import com.navercorp.pinpoint.common.util.PinpointThreadFactory; +import com.navercorp.pinpoint.profiler.context.thrift.ThreadDumpThriftMessageConverter; +import com.navercorp.pinpoint.profiler.context.thrift.ThreadStateThriftMessageConverter; +import com.navercorp.pinpoint.profiler.monitor.metric.deadlock.ThreadDumpMetricSnapshot; import com.navercorp.pinpoint.profiler.util.ThreadDumpUtils; import com.navercorp.pinpoint.thrift.dto.command.TActiveThreadDump; import com.navercorp.pinpoint.thrift.dto.command.TActiveThreadLightDump; +import com.navercorp.pinpoint.thrift.dto.command.TThreadDump; import com.navercorp.pinpoint.thrift.dto.command.TThreadLightDump; +import com.navercorp.pinpoint.thrift.dto.command.TThreadState; import org.junit.Assert; import org.junit.Test; @@ -36,6 +41,8 @@ public class AgentActiveThreadDumpListTest { private static final int CREATE_DUMP_SIZE = 10; private final PinpointThreadFactory pinpointThreadFactory = new PinpointThreadFactory(this.getClass().getSimpleName()); + private ThreadDumpThriftMessageConverter threadDumpThriftMessageConverter = new ThreadDumpThriftMessageConverter(); + private ThreadStateThriftMessageConverter threadStateThriftMessageConverter = new ThreadStateThriftMessageConverter(); @Test public void basicFunctionTest1() throws Exception { @@ -119,7 +126,11 @@ private AgentActiveThreadDumpList createThreadDumpList(Thread[] threads) { for (Thread thread : threads) { TActiveThreadDump tActiveThreadDump = new TActiveThreadDump(); tActiveThreadDump.setStartTime(System.currentTimeMillis() - ThreadLocalRandom.current().nextLong(100000)); - tActiveThreadDump.setThreadDump(ThreadDumpUtils.createTThreadDump(thread)); + + final ThreadDumpMetricSnapshot threadDumpMetricSnapshot =ThreadDumpUtils.createThreadDump(thread); + final TThreadDump threadDump = this.threadDumpThriftMessageConverter.toMessage(threadDumpMetricSnapshot); + + tActiveThreadDump.setThreadDump(threadDump); activeThreadDumpList.add(tActiveThreadDump); } @@ -144,7 +155,9 @@ private TThreadLightDump createTThreadLightDump(Thread thread) { TThreadLightDump threadDump = new TThreadLightDump(); threadDump.setThreadName(thread.getName()); threadDump.setThreadId(thread.getId()); - threadDump.setThreadState(ThreadDumpUtils.toTThreadState(thread.getState())); + + final TThreadState threadState = this.threadStateThriftMessageConverter.toMessage(thread.getState()); + threadDump.setThreadState(threadState); return threadDump; }